//! \~\file piscreentiles.h //! \~\ingroup Console //! \brief //! \~english Various tiles for PIScreen //! \~russian Различные тайлы для PIScreen //! \details //! \~english Provides ready-to-use tile implementations for common UI elements. //! \~russian Обеспечивает готовые к использованию реализации тайлов для общих элементов UI. /* PIP - Platform Independent Primitives Various tiles for PIScreen 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 "pip_console_export.h" #include "piscreentile.h" //! \~\ingroup Console //! \~\brief //! \~english Simple text tile with per-row formatting. //! \~russian Простой текстовый тайл с форматированием по строкам. class PIP_CONSOLE_EXPORT TileSimple: public PIScreenTile { PIOBJECT_SUBCLASS(TileSimple, PIScreenTile); public: //! \~english Row text with cell format. //! \~russian Текст строки с форматом ячеек. typedef PIPair Row; //! \~english Constructs an empty text tile. //! \~russian Создает пустой текстовый тайл. TileSimple(const PIString & n = PIString()); //! \~english Constructs a text tile with one row. //! \~russian Создает текстовый тайл с одной строкой. TileSimple(const Row & r); //! \~english Destroys the text tile. //! \~russian Уничтожает текстовый тайл. virtual ~TileSimple() {} //! \~english Rows displayed by the tile. //! \~russian Строки, отображаемые тайлом. PIVector content; //! \~english Horizontal text alignment inside the tile. //! \~russian Горизонтальное выравнивание текста внутри тайла. PIScreenTypes::Alignment alignment; protected: void sizeHint(int & w, int & h) const override; void drawEvent(PIScreenDrawer * d) override; }; class TileList; //! \~\ingroup Console //! \~\brief //! \~english Scroll bar tile used by list-like widgets. //! \~russian Тайловая полоса прокрутки для списковых виджетов. class PIP_CONSOLE_EXPORT TileScrollBar: public PIScreenTile { PIOBJECT_SUBCLASS(TileScrollBar, PIScreenTile); friend class TileList; public: //! \~english Constructs a scroll bar tile. //! \~russian Создает тайл полосы прокрутки. TileScrollBar(const PIString & n = PIString()); //! \~english Destroys the scroll bar tile. //! \~russian Уничтожает тайл полосы прокрутки. virtual ~TileScrollBar() {} //! \~english Sets the minimum scroll value. //! \~russian Устанавливает минимальное значение прокрутки. void setMinimum(int v); //! \~english Sets the maximum scroll value. //! \~russian Устанавливает максимальное значение прокрутки. void setMaximum(int v); //! \~english Sets the current scroll value. //! \~russian Устанавливает текущее значение прокрутки. void setValue(int v); //! \~english Returns the minimum scroll value. //! \~russian Возвращает минимальное значение прокрутки. int minimum() const { return minimum_; } //! \~english Returns the maximum scroll value. //! \~russian Возвращает максимальное значение прокрутки. int maximum() const { return maximum_; } //! \~english Returns the current scroll value. //! \~russian Возвращает текущее значение прокрутки. int value() const { return value_; } //! \~english Thickness of the drawn bar in cells, perpendicular to the scroll direction. //! \~russian Толщина отрисовываемой полосы в ячейках поперек направления прокрутки. int thickness; protected: void _check(); void sizeHint(int & w, int & h) const override; void drawEvent(PIScreenDrawer * d) override; bool mouseEvent(PIKbdListener::MouseEvent me) override; int minimum_, maximum_, value_; PIChar line_char; }; //! \~\ingroup Console //! \~\brief //! \~english Scrollable list tile with optional row selection. //! \~russian Прокручиваемый тайл списка с необязательным выбором строк. class PIP_CONSOLE_EXPORT TileList: public PIScreenTile { PIOBJECT_SUBCLASS(TileList, PIScreenTile); public: //! \~english Selection policy for list rows. //! \~russian Режим выбора строк списка. enum SelectionMode { NoSelection /** \~english Rows are not selectable. \~russian Выбор строк отключен. */, SingleSelection /** \~english At most one row can be selected. \~russian Можно выбрать не более одной строки. */, MultiSelection /** \~english Multiple rows can be selected. \~russian Можно выбрать несколько строк. */ }; //! \~english Events emitted by the list tile. //! \~russian События, генерируемые тайлом списка. enum EventType { SelectionChanged /** \~english Selection set changed. \~russian Изменился набор выбранных строк. */, RowPressed /** \~english Current row was activated; event data stores the row index. \~russian Текущая строка была активирована; данные события содержат индекс строки. */ }; //! \~english Constructs a list tile with the specified selection mode. //! \~russian Создает тайл списка с указанным режимом выбора. TileList(const PIString & n = PIString(), SelectionMode sm = NoSelection); //! \~english Destroys the list tile. //! \~russian Уничтожает тайл списка. virtual ~TileList() {} //! \~english Row text with cell format. //! \~russian Текст строки с форматом ячеек. typedef PIPair Row; //! \~english Rows displayed by the list. //! \~russian Строки, отображаемые списком. PIDeque content; //! \~english Alignment used to draw row text. //! \~russian Выравнивание, используемое при рисовании текста строк. PIScreenTypes::Alignment alignment; //! \~english Active row selection mode. //! \~russian Текущий режим выбора строк. SelectionMode selection_mode; //! \~english Indexes of selected rows. //! \~russian Индексы выбранных строк. PISet selected; //! \~english Cached count of visible content rows between the top and bottom scroll markers. //! \~russian Кэшированное количество видимых строк содержимого между верхней и нижней метками прокрутки. int lhei; //! \~english Index of the current row used for focus and activation. //! \~russian Индекс текущей строки, используемой для фокуса и активации. int cur; //! \~english Index of the first row currently visible in the viewport. //! \~russian Индекс первой строки, видимой в текущей области просмотра. int offset; protected: void sizeHint(int & w, int & h) const override; void resizeEvent(int w, int h) override; void drawEvent(PIScreenDrawer * d) override; bool keyEvent(PIKbdListener::KeyEvent key) override; bool mouseEvent(PIKbdListener::MouseEvent me) override; bool wheelEvent(PIKbdListener::WheelEvent we) override; TileScrollBar * scroll; bool mouse_sel; }; //! \~\ingroup Console //! \~\brief //! \~english Push button tile. //! \~russian Тайл кнопки. class PIP_CONSOLE_EXPORT TileButton: public PIScreenTile { PIOBJECT_SUBCLASS(TileButton, PIScreenTile); public: //! \~english Constructs a button tile. //! \~russian Создает тайл кнопки. TileButton(const PIString & n = PIString()); //! \~english Destroys the button tile. //! \~russian Уничтожает тайл кнопки. virtual ~TileButton() {} //! \~english Events emitted by the button. //! \~russian События, генерируемые кнопкой. enum EventType { ButtonClicked /** \~english Button was activated. \~russian Кнопка была активирована. */ }; //! \~english Text format of the button label. //! \~russian Формат текста надписи кнопки. PIScreenTypes::CellFormat format; //! \~english Button caption. //! \~russian Подпись кнопки. PIString text; protected: void sizeHint(int & w, int & h) const override; void drawEvent(PIScreenDrawer * d) override; bool keyEvent(PIKbdListener::KeyEvent key) override; bool mouseEvent(PIKbdListener::MouseEvent me) override; }; //! \~\ingroup Console //! \~\brief //! \~english Group of selectable buttons arranged in one tile. //! \~russian Группа выбираемых кнопок, размещенных в одном тайле. class PIP_CONSOLE_EXPORT TileButtons: public PIScreenTile { PIOBJECT_SUBCLASS(TileButtons, PIScreenTile); public: //! \~english Constructs a button group tile. //! \~russian Создает тайл группы кнопок. TileButtons(const PIString & n = PIString()); //! \~english Destroys the button group tile. //! \~russian Уничтожает тайл группы кнопок. virtual ~TileButtons() {} //! \~english Events emitted by the button group. //! \~russian События, генерируемые группой кнопок. enum EventType { ButtonSelected /** \~english A button was selected; event data stores the button index. \~russian Кнопка была выбрана; данные события содержат индекс кнопки. */ }; //! \~english Button caption with cell format. //! \~russian Подпись кнопки с форматом ячеек. typedef PIPair Button; //! \~english Alignment of the whole button group inside the tile bounds. //! \~russian Выравнивание всей группы кнопок внутри границ тайла. PIScreenTypes::Alignment alignment; //! \~english Button definitions shown by the tile. //! \~russian Описания кнопок, отображаемых тайлом. PIVector