<root> / ListLike.hpp (6b4ded0093267522cc49743c21e7f5e3f76b8df0) (2,226B) (mode 100644) [raw]
// libcursed -- C++ classes for dealing with curses
// Copyright (C) 2019 xaizek <xaizek@posteo.net>
//
// This file is part of libcursed.
//
// libcursed is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// libcursed is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with libcursed.  If not, see <https://www.gnu.org/licenses/>.

#ifndef LIBCURSED__LISTLIKE_HPP__
#define LIBCURSED__LISTLIKE_HPP__

namespace cursed {

// Provides cursor and scrolling functionality common for lists.
class ListLike
{
protected:
    // Performs initialization.
    ListLike();

public:
    // Puts cursor on the first element.
    void moveToFirst();
    // Puts cursor on the last element.
    void moveToLast();

    // Moves cursor `by` elements down.
    void moveDown(int by = 1);
    // Moves cursor `by` elements up.
    void moveUp(int by = 1);

    // Moves cursor to the specified position (incorrect value is turned into
    // closes bound).
    void moveToPos(int newPos);

    // Scrolls text one line down.  If current position ends up being outside of
    // viewport, it's adjusted to be visible.
    void scrollDown();
    // Scrolls text one line up.  If current position ends up being outside of
    // viewport, it's adjusted to be visible.
    void scrollUp();

    // Retrieves current position.
    int getPos() const;

protected:
    // Resets scroll and cursor positions.
    void reset();
    // Retrieves scroll position.
    int getTop();

private:
    // Retrieves number of elements in the list.
    virtual int getSize() const = 0;

    // Retrieves viewport height.
    virtual int getHeight() const = 0;

private:
    int pos; // Current cursor position.
    int top; // Scroll position (first element to display).
};

}

#endif // LIBCURSED__LISTLIKE_HPP__
Hints

Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://code.reversed.top/user/xaizek/libcursed

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@code.reversed.top/user/xaizek/libcursed

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a pull request:
... clone the repository ...
... make some changes and some commits ...
git push origin master