/*! \file piscreentiles.h * \brief Various tiles for PIScreen */ /* PIP - Platform Independent Primitives Various tiles for PIScreen Copyright (C) 2020 Ivan Pelipenko peri4ko@yandex.ru This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef PISCREENTILES_H #define PISCREENTILES_H #include "piscreentile.h" class PIP_EXPORT TileSimple: public PIScreenTile { PIOBJECT_SUBCLASS(TileSimple, PIScreenTile) public: typedef PIPair Row; TileSimple(const PIString & n = PIString()); TileSimple(const Row & r); virtual ~TileSimple() {} PIVector content; PIScreenTypes::Alignment alignment; protected: void sizeHint(int & w, int & h) const; void drawEvent(PIScreenDrawer * d); }; class TileList; class PIP_EXPORT TileScrollBar: public PIScreenTile { PIOBJECT_SUBCLASS(TileScrollBar, PIScreenTile) friend class TileList; public: TileScrollBar(const PIString & n = PIString()); virtual ~TileScrollBar() {} void setMinimum(int v); void setMaximum(int v); void setValue(int v); int minimum() const {return minimum_;} int maximum() const {return maximum_;} int value() const {return value_;} int thickness; protected: void _check(); void sizeHint(int & w, int & h) const; void drawEvent(PIScreenDrawer * d); bool mouseEvent(PIKbdListener::MouseEvent me); int minimum_, maximum_, value_; PIChar line_char; }; class PIP_EXPORT TileList: public PIScreenTile { PIOBJECT_SUBCLASS(TileList, PIScreenTile) public: TileList(const PIString & n = PIString()); virtual ~TileList() {} enum SelectionMode { NoSelection, SingleSelection, MultiSelection }; enum EventType { SelectionChanged, RowPressed }; typedef PIPair Row; PIDeque content; PIScreenTypes::Alignment alignment; SelectionMode selection_mode; PISet selected; int lhei, cur, offset; protected: void sizeHint(int & w, int & h) const; void resizeEvent(int w, int h); void drawEvent(PIScreenDrawer * d); bool keyEvent(PIKbdListener::KeyEvent key); bool mouseEvent(PIKbdListener::MouseEvent me); bool wheelEvent(PIKbdListener::WheelEvent we); TileScrollBar * scroll; bool mouse_sel; }; class PIP_EXPORT TileButton: public PIScreenTile { PIOBJECT_SUBCLASS(TileButton, PIScreenTile) public: TileButton(const PIString & n = PIString()); virtual ~TileButton() {} enum EventType { ButtonClicked }; PIScreenTypes::CellFormat format; PIString text; protected: void sizeHint(int & w, int & h) const; void drawEvent(PIScreenDrawer * d); bool keyEvent(PIKbdListener::KeyEvent key); bool mouseEvent(PIKbdListener::MouseEvent me); }; class PIP_EXPORT TileButtons: public PIScreenTile { PIOBJECT_SUBCLASS(TileButtons, PIScreenTile) public: TileButtons(const PIString & n = PIString()); virtual ~TileButtons() {} enum EventType { ButtonSelected }; typedef PIPair Button; PIScreenTypes::Alignment alignment; PIVector