From b53ef184dc7ad3e360990278461e68e374400b7c Mon Sep 17 00:00:00 2001 From: "andrey.bychkov" Date: Fri, 27 Feb 2026 23:42:09 +0300 Subject: [PATCH] add doxygen via opencode --- .../client_server/piclientserver_client.h | 14 +- .../piclientserver_client_base.h | 105 ++++-- .../client_server/piclientserver_server.h | 14 +- .../main/client_server/piclientservermodule.h | 2 +- libs/main/cloud/picloudbase.h | 24 +- libs/main/cloud/picloudclient.h | 70 +++- libs/main/cloud/picloudserver.h | 89 ++++- libs/main/cloud/picloudtcp.h | 107 +++++- libs/main/console/pikbdlistener.h | 12 +- libs/main/console/piscreen.h | 104 +++++- libs/main/console/piscreenconsole.h | 46 ++- libs/main/console/piscreendrawer.h | 78 +++- libs/main/console/piscreentile.h | 138 ++++++- libs/main/console/piscreentiles.h | 353 +++++++++++++++++- libs/main/console/piscreentypes.h | 113 +++++- libs/main/console/piterminal.h | 60 ++- libs/main/containers/piset.h | 130 +++++-- libs/main/containers/pivector2d.h | 17 +- libs/main/core/pibase.h | 6 + libs/main/core/piincludes.h | 9 + libs/main/core/pimemoryblock.h | 4 + libs/main/geo/piellipsoidmodel.h | 42 ++- libs/main/geo/pigeoposition.h | 259 +++++++++++-- libs/main/io_devices/pican.h | 20 + libs/main/io_devices/pipeer.h | 62 +++ libs/main/io_devices/pispi.h | 38 +- libs/main/io_devices/piusb.h | 81 ++++ libs/main/math/picrc.h | 223 ++++++++++- libs/main/math/pifft.h | 112 +++++- libs/main/math/pigeometry.h | 28 +- libs/main/opencl/piopencl.h | 307 ++++++++++++++- libs/main/pip.h | 34 ++ libs/main/resources/piresources.h | 28 +- libs/main/resources/piresourcesstorage.h | 70 ++++ libs/main/state_machine/pistatemachine_base.h | 6 + .../main/state_machine/pistatemachine_state.h | 83 +++- .../state_machine/pistatemachine_transition.h | 38 +- libs/main/system/pihidevice.h | 96 +++++ libs/main/system/pisignals.h | 60 +-- libs/main/text/piconstchars.h | 8 +- libs/main/text/pistring.h | 4 +- libs/main/thread/piblockingqueue.h | 92 ++--- libs/main/thread/piconditionvar.h | 33 +- libs/main/thread/pigrabberbase.h | 62 ++- libs/main/thread/pipipelinethread.h | 58 ++- libs/main/thread/piprotectedvariable.h | 57 +-- libs/main/thread/pithreadpoolexecutor.h | 25 ++ libs/main/types/colors_p.h | 19 + libs/main/types/pibitarray.h | 10 +- libs/main/types/pibytearray.h | 11 +- libs/main/types/pidatetime.h | 11 +- libs/main/types/piflags.h | 11 +- libs/main/types/pinetworkaddress.h | 13 +- libs/main/types/pipropertystorage.h | 11 +- libs/main/types/pisystemtime.h | 11 +- libs/main/types/pitime.h | 11 +- libs/main/types/pivaluetree.h | 11 +- libs/main/types/pivariant.h | 140 ++++--- libs/main/types/pivariantsimple.h | 61 ++- libs/main/types/pivarianttypes.h | 11 +- libs/main/units/piunits_base.h | 168 +++++++-- libs/main/units/piunits_prefix.h | 81 ++-- libs/main/units/piunits_value.h | 54 ++- 63 files changed, 3374 insertions(+), 681 deletions(-) diff --git a/libs/main/client_server/piclientserver_client.h b/libs/main/client_server/piclientserver_client.h index 24e45eb0..387428ab 100644 --- a/libs/main/client_server/piclientserver_client.h +++ b/libs/main/client_server/piclientserver_client.h @@ -1,9 +1,11 @@ -/*! \file piclientserver_client.h - * \ingroup ClientServer - * \~\brief - * \~english - * \~russian - */ +//! \file piclientserver_client.h +//! \ingroup ClientServer +//! \brief +//! \~english Client and ServerClient classes +//! \~russian Классы Client и ServerClient +//! \details +//! \~english Provides client implementation for connecting to servers and server-side client representation. +//! \~russian Обеспечивает реализацию клиента для подключения к серверам и представление клиента на стороне сервера. /* PIP - Platform Independent Primitives Ivan Pelipenko peri4ko@yandex.ru diff --git a/libs/main/client_server/piclientserver_client_base.h b/libs/main/client_server/piclientserver_client_base.h index 844da0d1..255583a9 100644 --- a/libs/main/client_server/piclientserver_client_base.h +++ b/libs/main/client_server/piclientserver_client_base.h @@ -1,9 +1,11 @@ -/*! \file piclientserver_client_base.h - * \ingroup ClientServer - * \~\brief - * \~english - * \~russian - */ +//! \file piclientserver_client_base.h +//! \ingroup ClientServer +//! \brief +//! \~english Base class for client-server communication +//! \~russian Базовый класс для клиент-серверного взаимодействия +//! \details +//! \~english Provides base functionality for client-server communication with diagnostics support. +//! \~russian Обеспечивает базовую функциональность для клиент-серверного взаимодействия с поддержкой диагностики. /* PIP - Platform Independent Primitives Ivan Pelipenko peri4ko@yandex.ru @@ -37,77 +39,112 @@ class Server; class ClientInterface {}; -//! ~english Base class for client-server communication with diagnostics support -//! ~russian Базовый класс для клиент-серверного взаимодействия с поддержкой диагностики +//! \brief +//! \~english Base class for client and server-side client +//! \~russian Базовый класс для клиента и клиента на стороне сервера // template class PIP_CLIENT_SERVER_EXPORT ClientBase { friend class Server; NO_COPY_CLASS(ClientBase); public: + //! \brief + //! \~english Constructs ClientBase + //! \~russian Создает ClientBase ClientBase(); + + //! \brief + //! \~english Destructor + //! \~russian Деструктор virtual ~ClientBase(); - //! ~english Gets underlying TCP connection - //! ~russian Возвращает TCP-соединение + //! \brief + //! \~english Gets underlying TCP connection + //! \~russian Возвращает TCP-соединение const PIEthernet * getTCP() const { return tcp; } - //! ~english Closes the connection - //! ~russian Закрывает соединение + //! \brief + //! \~english Closes the connection + //! \~russian Закрывает соединение void close(); - //! ~english Gracefully stops and waits for completion - //! ~russian Плавно останавливает и ожидает завершения + //! \brief + //! \~english Gracefully stops and waits for completion + //! \~russian Плавно останавливает и ожидает завершения void stopAndWait(); - //! ~english Writes byte array to the connection - //! ~russian Записывает массив байтов в соединение + //! \brief + //! \~english Writes byte array to the connection + //! \~russian Записывает массив байтов в соединение int write(const void * d, const size_t s); - //! ~english Writes byte array to the connection - //! ~russian Записывает массив байтов в соединение + //! \brief + //! \~english Writes byte array to the connection + //! \~russian Записывает массив байтов в соединение int write(const PIByteArray & ba) { return write(ba.data(), ba.size()); } - //! ~english Enables diagnostics collection - //! ~russian Включает сбор диагностики + //! \brief + //! \~english Enables diagnostics collection + //! \~russian Включает сбор диагностики void enableDiagnostics(); - //! ~english Gets current diagnostics state - //! ~russian Возвращает текущее состояние диагностики + //! \brief + //! \~english Gets current diagnostics state + //! \~russian Возвращает текущее состояние диагностики PIDiagnostics::State diagnostics() const; - //! ~english Gets current received packet bytes already received (all bytes count passed in \a receivePacketStart()) - //! ~russian Возвращает сколько байт принимаемого пакета получено (общее количество передается в \a receivePacketStart()) + //! \brief + //! \~english Gets current received packet bytes already received (all bytes count passed in \a receivePacketStart()) + //! \~russian Возвращает сколько байт принимаемого пакета получено (общее количество передается в \a receivePacketStart()) int receivePacketProgress() const; + //! \brief + //! \~english Returns stream configuration + //! \~russian Возвращает конфигурацию стрима const PIStreamPackerConfig & configuration() const { return stream.configuration(); } + + //! \brief + //! \~english Returns stream configuration + //! \~russian Возвращает конфигурацию стрима PIStreamPackerConfig & configuration() { return stream.configuration(); } + + //! \brief + //! \~english Sets stream configuration + //! \~russian Устанавливает конфигурацию стрима void setConfiguration(const PIStreamPackerConfig & config) { stream.setConfiguration(config); } protected: - //! ~english Called when data is received - //! ~russian Вызывается при получении данных + //! \brief + //! \~english Called when data is received + //! \~russian Вызывается при получении данных virtual void readed(PIByteArray data) {} - //! ~english Called when connection is established - //! ~russian Вызывается при установке соединения + //! \brief + //! \~english Called when connection is established + //! \~russian Вызывается при установке соединения virtual void connected() {} - //! ~english Called when connection is closed - //! ~russian Вызывается при закрытии соединения + //! \brief + //! \~english Called when connection is closed + //! \~russian Вызывается при закрытии соединения virtual void disconnected() {} - //! ~english Called when packet receiving starts - //! ~russian Вызывается при начале получения пакета + //! \brief + //! \~english Called when packet receiving starts + //! \~russian Вызывается при начале получения пакета virtual void receivePacketStart(int size) {} - //! ~english Called when packet receiving ends - //! ~russian Вызывается при завершении получения пакета + //! \brief + //! \~english Called when packet receiving ends + //! \~russian Вызывается при завершении получения пакета virtual void receivePacketEnd() {} + //! \brief + //! \~english Initializes the client + //! \~russian Инициализирует клиента void init(); bool own_tcp = false; diff --git a/libs/main/client_server/piclientserver_server.h b/libs/main/client_server/piclientserver_server.h index f66eca5f..b5707cd8 100644 --- a/libs/main/client_server/piclientserver_server.h +++ b/libs/main/client_server/piclientserver_server.h @@ -1,9 +1,11 @@ -/*! \file piclientserver_server.h - * \ingroup ClientServer - * \~\brief - * \~english - * \~russian - */ +//! \file piclientserver_server.h +//! \ingroup ClientServer +//! \brief +//! \~english TCP Server +//! \~russian TCP Сервер +//! \details +//! \~english TCP server implementation for client-server communication. +//! \~russian Реализация TCP сервера для клиент-серверного взаимодействия. /* PIP - Platform Independent Primitives Ivan Pelipenko peri4ko@yandex.ru diff --git a/libs/main/client_server/piclientservermodule.h b/libs/main/client_server/piclientservermodule.h index fc3f100e..81c0c9e1 100644 --- a/libs/main/client_server/piclientservermodule.h +++ b/libs/main/client_server/piclientservermodule.h @@ -1,7 +1,7 @@ /* PIP - Platform Independent Primitives Module includes - Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru + Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@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 diff --git a/libs/main/cloud/picloudbase.h b/libs/main/cloud/picloudbase.h index f6978bd2..71b5b6e3 100644 --- a/libs/main/cloud/picloudbase.h +++ b/libs/main/cloud/picloudbase.h @@ -1,9 +1,11 @@ -/*! \file picloudbase.h - * \ingroup Cloud - * \~\brief - * \~english Base class for PICloudClient and PICloudServer - * \~russian Базовый класс для PICloudClient и PICloudServer - */ +//! \file picloudbase.h +//! \ingroup Cloud +//! \brief +//! \~english Base class for PICloudClient and PICloudServer +//! \~russian Базовый класс для PICloudClient и PICloudServer +//! \details +//! \~english Provides common functionality for cloud client and server implementations. +//! \~russian Обеспечивает общую функциональность для реализаций облачного клиента и сервера. /* PIP - Platform Independent Primitives PICloud Base - Base class for PICloudClient and PICloud Server @@ -31,10 +33,20 @@ #include "pistreampacker.h" +//! \brief +//! \~english Base class for cloud client and server +//! \~russian Базовый класс для облачного клиента и сервера + class PIP_CLOUD_EXPORT PICloudBase { public: + //! \brief + //! \~english Constructs PICloudBase + //! \~russian Создает PICloudBase PICloudBase(); + //! \brief + //! \~english Returns server name + //! \~russian Возвращает имя сервера PIString serverName() const; protected: diff --git a/libs/main/cloud/picloudclient.h b/libs/main/cloud/picloudclient.h index 505ed027..ae8f9440 100644 --- a/libs/main/cloud/picloudclient.h +++ b/libs/main/cloud/picloudclient.h @@ -1,9 +1,11 @@ -/*! \file picloudclient.h - * \ingroup Cloud - * \~\brief - * \~english PICloud Client - * \~russian Клиент PICloud - */ +//! \file picloudclient.h +//! \ingroup Cloud +//! \brief +//! \~english PICloud Client +//! \~russian Клиент PICloud +//! \details +//! \~english Client implementation for connecting to PICloud servers over TCP. +//! \~russian Реализация клиента для подключения к серверам PICloud по TCP. /* PIP - Platform Independent Primitives PICloud Client @@ -30,7 +32,9 @@ #include "piconditionvar.h" -//! \brief PICloudClient +//! \brief PICloud client implementation +//! \~english PICloud client for connecting to servers +//! \~russian Клиент PICloud для подключения к серверам class PIP_CLOUD_EXPORT PICloudClient : public PIIODevice @@ -38,23 +42,75 @@ class PIP_CLOUD_EXPORT PICloudClient PIIODEVICE(PICloudClient, ""); public: + //! \brief + //! \~english Constructs PICloudClient + //! \~russian Создает PICloudClient explicit PICloudClient(const PIString & path = PIString(), PIIODevice::DeviceMode mode = PIIODevice::ReadWrite); + + //! \brief + //! \~english Destructor + //! \~russian Деструктор virtual ~PICloudClient(); + //! \brief + //! \~english Sets server name + //! \~russian Устанавливает имя сервера void setServerName(const PIString & server_name); + + //! \brief + //! \~english Sets keep connection mode + //! \~russian Устанавливает режим поддержания соединения void setKeepConnection(bool on); + + //! \brief + //! \~english Checks if connected to server + //! \~russian Проверяет подключение к серверу bool isConnected() const { return is_connected; } + + //! \brief + //! \~english Returns number of bytes available + //! \~russian Возвращает количество доступных байт ssize_t bytesAvailable() const override { return buff.size(); } + + //! \brief + //! \~english Interrupts connection + //! \~russian Прерывает соединение void interrupt() override; + //! \brief + //! \~english Raised when connected to server + //! \~russian Вызывается при подключении к серверу EVENT(connected); + + //! \brief + //! \~english Raised when disconnected from server + //! \~russian Вызывается при отключении от сервера EVENT(disconnected); protected: + //! \brief + //! \~english Opens device + //! \~russian Открывает устройство bool openDevice() override; + + //! \brief + //! \~english Closes device + //! \~russian Закрывает устройство bool closeDevice() override; + + //! \brief + //! \~english Reads data from device + //! \~russian Читает данные из устройства ssize_t readDevice(void * read_to, ssize_t max_size) override; + + //! \brief + //! \~english Writes data to device + //! \~russian Записывает данные в устройство ssize_t writeDevice(const void * data, ssize_t size) override; + + //! \brief + //! \~english Returns device info flags + //! \~russian Возвращает флаги информации об устройстве DeviceInfoFlags deviceInfoFlags() const override { return PIIODevice::Reliable; } private: diff --git a/libs/main/cloud/picloudserver.h b/libs/main/cloud/picloudserver.h index cb36cd14..e62cc993 100644 --- a/libs/main/cloud/picloudserver.h +++ b/libs/main/cloud/picloudserver.h @@ -1,9 +1,11 @@ -/*! \file picloudserver.h - * \ingroup Cloud - * \~\brief - * \~english PICloud Server - * \~russian Сервер PICloud - */ +//! \file picloudserver.h +//! \ingroup Cloud +//! \brief +//! \~english PICloud Server +//! \~russian Сервер PICloud +//! \details +//! \~english Server implementation for accepting PICloud client connections over TCP. +//! \~russian Реализация сервера для приема подключений клиентов PICloud по TCP. /* PIP - Platform Independent Primitives PICloud Server @@ -36,25 +38,70 @@ class PIP_CLOUD_EXPORT PICloudServer PIIODEVICE(PICloudServer, ""); public: - //! PICloudServer + //! \brief + //! \~english Constructs PICloudServer + //! \~russian Создает PICloudServer explicit PICloudServer(const PIString & path = PIString(), PIIODevice::DeviceMode mode = PIIODevice::ReadWrite); + + //! \brief + //! \~english Destructor + //! \~russian Деструктор virtual ~PICloudServer(); + //! \brief Connected client representation + //! \~english Represents a client connected to the server + //! \~russian Представляет клиента, подключенного к серверу class Client: public PIIODevice { PIIODEVICE(PICloudServer::Client, ""); friend class PICloudServer; public: + //! \brief + //! \~english Constructs Client + //! \~russian Создает Client + //! \param srv Parent server / Родительский сервер + //! \param id Client ID / ID клиента Client(PICloudServer * srv = nullptr, uint id = 0); + + //! \brief + //! \~english Destructor + //! \~russian Деструктор virtual ~Client(); protected: + //! \brief + //! \~english Opens device + //! \~russian Открывает устройство bool openDevice() override; + + //! \brief + //! \~english Closes device + //! \~russian Закрывает устройство bool closeDevice() override; + + //! \brief + //! \~english Reads data from device + //! \~russian Читает данные из устройства ssize_t readDevice(void * read_to, ssize_t max_size) override; + + //! \brief + //! \~english Writes data to device + //! \~russian Записывает данные в устройство ssize_t writeDevice(const void * data, ssize_t size) override; + + //! \brief + //! \~english Returns device info flags + //! \~russian Возвращает флаги информации об устройстве DeviceInfoFlags deviceInfoFlags() const override { return PIIODevice::Reliable; } + + //! \brief + //! \~english Returns number of bytes available + //! \~russian Возвращает количество доступных байт ssize_t bytesAvailable() const override { return buff.size(); } + + //! \brief + //! \~english Interrupts connection + //! \~russian Прерывает соединение void interrupt() override; private: @@ -67,17 +114,45 @@ public: std::atomic_bool is_connected; }; + //! \brief + //! \~english Sets server name + //! \~russian Устанавливает имя сервера void setServerName(const PIString & server_name); + //! \brief + //! \~english Returns list of connected clients + //! \~russian Возвращает список подключенных клиентов PIVector clients() const; + //! \brief + //! \~english Raised when new client connects + //! \~russian Вызывается при подключении нового клиента EVENT1(newConnection, PICloudServer::Client *, client); protected: + //! \brief + //! \~english Opens device + //! \~russian Открывает устройство bool openDevice() override; + + //! \brief + //! \~english Closes device + //! \~russian Закрывает устройство bool closeDevice() override; + + //! \brief + //! \~english Reads data from device + //! \~russian Читает данные из устройства ssize_t readDevice(void * read_to, ssize_t max_size) override; + + //! \brief + //! \~english Writes data to device + //! \~russian Записывает данные в устройство ssize_t writeDevice(const void * data, ssize_t max_size) override; + + //! \brief + //! \~english Interrupts connection + //! \~russian Прерывает соединение void interrupt() override; private: diff --git a/libs/main/cloud/picloudtcp.h b/libs/main/cloud/picloudtcp.h index 43756ec4..1120b84d 100644 --- a/libs/main/cloud/picloudtcp.h +++ b/libs/main/cloud/picloudtcp.h @@ -1,9 +1,11 @@ -/*! \file picloudtcp.h - * \ingroup Cloud - * \~\brief - * \~english PICloud TCP transport - * \~russian TCP слой PICloud - */ +//! \file picloudtcp.h +//! \ingroup Cloud +//! \brief +//! \~english PICloud TCP transport +//! \~russian TCP слой PICloud +//! \details +//! \~english Low-level TCP protocol implementation for PICloud communication. +//! \~russian Реализация низкоуровневого TCP-протокола для коммуникации PICloud. /* PIP - Platform Independent Primitives PICloud TCP transport @@ -36,45 +38,118 @@ class PIStreamPacker; namespace PICloud { +//! \brief TCP transport protocol +//! \~english TCP transport protocol for cloud communication +//! \~russian TCP транспортный протокол для облачной коммуникации class PIP_CLOUD_EXPORT TCP { public: + //! \brief Protocol version enum Version { - Version_1 = 1, - Version_2 = 2, + Version_1 = 1, //!< Version 1 / Версия 1 + Version_2 = 2, //!< Version 2 / Версия 2 }; + //! \brief Connection role enum Role { - InvalidRole = 0, - Server = 1, - Client = 2, + InvalidRole = 0, //!< Invalid role / Неверная роль + Server = 1, //!< Server role / Роль сервера + Client = 2, //!< Client role / Роль клиента }; + //! \brief Message type enum Type { - InvalidType = 0, - Connect = 1, - Disconnect = 2, - Data = 3, - Ping = 4, + InvalidType = 0, //!< Invalid type / Неверный тип + Connect = 1, //!< Connect message / Сообщение о подключении + Disconnect = 2, //!< Disconnect message / Сообщение об отключении + Data = 3, //!< Data message / Сообщение с данными + Ping = 4, //!< Ping message / Сообщение ping }; + //! \brief + //! \~english Constructs TCP transport + //! \~russian Создает TCP транспорт + //! \param s Stream packer instance / Экземпляр стримового упаковщика TCP(PIStreamPacker * s); + + //! \brief + //! \~english Sets connection role + //! \~russian Устанавливает роль соединения void setRole(Role r); + + //! \brief + //! \~english Returns connection role + //! \~russian Возвращает роль соединения Role role() const { return (Role)header.role; } + + //! \brief + //! \~english Sets server name + //! \~russian Устанавливает имя сервера void setServerName(const PIString & server_name_); + + //! \brief + //! \~english Returns server name + //! \~russian Возвращает имя сервера PIString serverName() const; + //! \brief + //! \~english Sends start message + //! \~russian Отправляет сообщение о старте void sendStart(); + + //! \brief + //! \~english Sends connected message + //! \~russian Отправляет сообщение о подключении void sendConnected(uint client_id); + + //! \brief + //! \~english Sends disconnected message + //! \~russian Отправляет сообщение об отключении void sendDisconnected(uint client_id); + + //! \brief + //! \~english Sends data to all clients + //! \~russian Отправляет данные всем клиентам int sendData(const PIByteArray & data); + + //! \brief + //! \~english Sends data to specific client + //! \~russian Отправляет данные конкретному клиенту int sendData(const PIByteArray & data, uint client_id); + + //! \brief + //! \~english Sends ping message + //! \~russian Отправляет сообщение ping void sendPing(); + + //! \brief + //! \~english Parses header from buffer + //! \~russian Парсит заголовок из буфера PIPair parseHeader(PIByteArray & ba); + + //! \brief + //! \~english Checks if data can be parsed + //! \~russian Проверяет возможность парсинга данных bool canParseData(PIByteArray & ba); + + //! \brief + //! \~english Parses data for server + //! \~russian Парсит данные для сервера PIPair parseDataServer(PIByteArray & ba); + + //! \brief + //! \~english Parses connect data + //! \~russian Парсит данные подключения PIByteArray parseConnect_d(PIByteArray & ba); + + //! \brief + //! \~english Parses connect message + //! \~russian Парсит сообщение подключения uint parseConnect(PIByteArray & ba); + + //! \brief + //! \~english Parses disconnect message + //! \~russian Парсит сообщение отключения uint parseDisconnect(PIByteArray & ba); private: diff --git a/libs/main/console/pikbdlistener.h b/libs/main/console/pikbdlistener.h index 6ca61042..5d13e493 100644 --- a/libs/main/console/pikbdlistener.h +++ b/libs/main/console/pikbdlistener.h @@ -29,12 +29,12 @@ #include "pithread.h" #include "pitime.h" -#define WAIT_FOR_EXIT \ - while (!PIKbdListener::exiting) \ - piMSleep(PIP_MIN_MSLEEP * 5); \ - if (PIKbdListener::instance()) { \ - if (!PIKbdListener::instance()->stopAndWait(PISystemTime::fromSeconds(1))) PIKbdListener::instance()->terminate(); \ - } +#define WAIT_FOR_EXIT \ + while (!PIKbdListener::exiting) \ + piMSleep(PIP_MIN_MSLEEP * 5); \ + if (PIKbdListener::instance()) { \ + if (!PIKbdListener::instance()->stopAndWait(PISystemTime::fromSeconds(1))) PIKbdListener::instance()->terminate(); \ + } class PIP_EXPORT PIKbdListener: public PIThread { diff --git a/libs/main/console/piscreen.h b/libs/main/console/piscreen.h index d9d50187..012ccb10 100644 --- a/libs/main/console/piscreen.h +++ b/libs/main/console/piscreen.h @@ -1,9 +1,11 @@ -/*! \file piscreen.h - * \ingroup Console - * \~\brief - * \~english Console tiling manager - * \~russian Консольный тайловый менеджер - */ +//! \file piscreen.h +//! \ingroup Console +//! \brief +//! \~english Console tiling manager +//! \~russian Консольный тайловый менеджер +//! \details +//! \~english Main console screen manager providing tile-based UI rendering and keyboard input. +//! \~russian Основной менеджер консольного экрана, обеспечивающий отрисовку UI на основе тайлов и ввод с клавиатуры. /* PIP - Platform Independent Primitives Console GUI @@ -38,46 +40,126 @@ class PIP_CONSOLE_EXPORT PIScreen class SystemConsole; public: - //! Constructs %PIScreen with key handler "slot" and if "startNow" start it + //! \brief + //! \~english Constructs PIScreen + //! \~russian Создает PIScreen + //! \param startNow Start immediately / Запустить немедленно + //! \param slot Keyboard handler function / Обработчик клавиатуры PIScreen(bool startNow = true, PIKbdListener::KBFunc slot = 0); + //! \brief + //! \~english Destructor + //! \~russian Деструктор ~PIScreen(); - //! Directly call function from \a PIKbdListener + //! \brief + //! \~english Enables exit capture with key + //! \~russian Включает захват выхода по клавише void enableExitCapture(int key = 'Q') { listener->enableExitCapture(key); } - //! Directly call function from \a PIKbdListener + //! \brief + //! \~english Disables exit capture + //! \~russian Отключает захват выхода void disableExitCapture() { listener->disableExitCapture(); } - //! Directly call function from \a PIKbdListener + //! \brief + //! \~english Checks if exit is captured + //! \~russian Проверяет, захвачен ли выход bool exitCaptured() const { return listener->exitCaptured(); } - //! Directly call function from \a PIKbdListener + //! \brief + //! \~english Returns exit key + //! \~russian Возвращает клавишу выхода int exitKey() const { return listener->exitKey(); } + //! \brief + //! \~english Returns window width + //! \~russian Возвращает ширину окна int windowWidth() const { return console.width; } + + //! \brief + //! \~english Returns window height + //! \~russian Возвращает высоту окна int windowHeight() const { return console.height; } + //! \brief + //! \~english Checks if mouse is enabled + //! \~russian Проверяет, включена ли мышь bool isMouseEnabled() const { return mouse_; } + + //! \brief + //! \~english Sets mouse enabled state + //! \~russian Устанавливает состояние мыши void setMouseEnabled(bool on); + //! \brief + //! \~english Returns root tile + //! \~russian Возвращает корневой тайл PIScreenTile * rootTile() { return &root; } + + //! \brief + //! \~english Finds tile by name + //! \~russian Находит тайл по имени PIScreenTile * tileByName(const PIString & name); + //! \brief + //! \~english Sets dialog tile + //! \~russian Устанавливает диалоговый тайл void setDialogTile(PIScreenTile * t); + + //! \brief + //! \~english Returns current dialog tile + //! \~russian Возвращает текущий диалоговый тайл PIScreenTile * dialogTile() const { return tile_dialog; } + //! \brief + //! \~english Returns screen drawer + //! \~russian Возвращает отрисовщик экрана PIScreenDrawer * drawer() { return &drawer_; } + + //! \brief + //! \~english Clears the screen + //! \~russian Очищает экран void clear() { drawer_.clear(); } + + //! \brief + //! \~english Resizes screen + //! \~russian Изменяет размер экрана void resize(int w, int h) { console.resize(w, h); } + //! \brief + //! \~english Waits for finish + //! \~russian Ожидает завершения EVENT_HANDLER0(void, waitForFinish); + + //! \brief + //! \~english Starts screen + //! \~russian Запускает экран EVENT_HANDLER0(void, start) { start(false); } + + //! \brief + //! \~english Starts screen + //! \~russian Запускает экран EVENT_HANDLER1(void, start, bool, wait); + + //! \brief + //! \~english Stops screen + //! \~russian Останавливает экран EVENT_HANDLER0(void, stop) { stop(false); } + + //! \brief + //! \~english Stops screen + //! \~russian Останавливает экран EVENT_HANDLER1(void, stop, bool, clear); + //! \brief + //! \~english Raised on key pressed + //! \~russian Вызывается при нажатии клавиши EVENT2(keyPressed, PIKbdListener::KeyEvent, key, void *, data); + + //! \brief + //! \~english Raised on tile event + //! \~russian Вызывается при событии тайла EVENT2(tileEvent, PIScreenTile *, tile, PIScreenTypes::TileEvent, e); //! \handlers diff --git a/libs/main/console/piscreenconsole.h b/libs/main/console/piscreenconsole.h index ad2f7d6c..8eae162d 100644 --- a/libs/main/console/piscreenconsole.h +++ b/libs/main/console/piscreenconsole.h @@ -1,9 +1,11 @@ -/*! \file piscreenconsole.h - * \ingroup Console - * \~\brief - * \~english Tile for PIScreen with PIConsole API - * \~russian Тайл для PIScreen с API PIConsole - */ +//! \file piscreenconsole.h +//! \ingroup Console +//! \brief +//! \~english Tile for PIScreen with PIConsole API +//! \~russian Тайл для PIScreen с API PIConsole +//! \details +//! \~english Provides tiles for displaying variable data and console-like content. +//! \~russian Обеспечивает тайлы для отображения данных переменных и консольного контента. /* PIP - Platform Independent Primitives Tile for PIScreen with PIConsole API @@ -32,17 +34,30 @@ /// NOTE: incomplete class /// TODO: write TileVars +//! \brief +//! \~english Tile for displaying variable data +//! \~russian Тайл для отображения данных переменных + class PIP_CONSOLE_EXPORT TileVars: public PIScreenTile { public: + //! \brief + //! \~english Constructs TileVars + //! \~russian Создает TileVars + //! \param n Tile name / Имя тайла TileVars(const PIString & n = PIString()); protected: + //! \brief Variable data structure struct PIP_CONSOLE_EXPORT Variable { Variable() { nx = ny = type = offset = bitFrom = bitCount = size = 0; format = PIScreenTypes::CellFormat(); ptr = 0; } + + //! \brief + //! \~english Checks if variable is empty + //! \~russian Проверяет, пустая ли переменная bool isEmpty() const { return (ptr == 0); } PIString name; PIScreenTypes::CellFormat format; @@ -67,15 +82,34 @@ protected: ptr = src.ptr; }*/ }; + + //! \brief + //! \~english Returns variables + //! \~russian Возвращает переменные PIVector variables; PIScreenTypes::Alignment alignment; + + //! \brief + //! \~english Calculates tile size hint + //! \~russian Вычисляет рекомендуемый размер тайла void sizeHint(int & w, int & h) const override; + + //! \brief + //! \~english Draws tile content + //! \~russian Рисует содержимое тайла void drawEvent(PIScreenDrawer * d) override; }; +//! \brief +//! \~english Console-style tile for PIScreen +//! \~russian Консольный тайл для PIScreen + class PIP_CONSOLE_EXPORT PIScreenConsoleTile: public PIScreenTile { public: + //! \brief + //! \~english Constructs PIScreenConsoleTile + //! \~russian Создает PIScreenConsoleTile PIScreenConsoleTile(); }; diff --git a/libs/main/console/piscreendrawer.h b/libs/main/console/piscreendrawer.h index 81b7c91a..ba415155 100644 --- a/libs/main/console/piscreendrawer.h +++ b/libs/main/console/piscreendrawer.h @@ -1,9 +1,11 @@ -/*! \file piscreendrawer.h - * \ingroup Console - * \~\brief - * \~english Drawer for PIScreen - * \~russian Отрисовщик для PIScreen - */ +//! \file piscreendrawer.h +//! \ingroup Console +//! \brief +//! \~english Drawer for PIScreen +//! \~russian Отрисовщик для PIScreen +//! \details +//! \~english Provides drawing primitives for console screen rendering. +//! \~russian Обеспечивает примитивы отрисовки для рендеринга консольного экрана. /* PIP - Platform Independent Primitives Drawer for PIScreen @@ -30,31 +32,51 @@ #include "piscreentypes.h" #include "pistring.h" +//! \brief Screen drawer for console rendering +//! \~english Console screen drawer for rendering graphics +//! \~russian Отрисовщик консольного экрана для рендеринга графики + class PIP_CONSOLE_EXPORT PIScreenDrawer { friend class PIScreen; PIScreenDrawer(PIVector> & c); public: + //! \brief ASCII art characters enum ArtChar { - LineVertical = 1, - LineHorizontal, - Cross, - CornerTopLeft, - CornerTopRight, - CornerBottomLeft, - CornerBottomRight, - Unchecked, - Checked + LineVertical = 1, //!< Vertical line / Вертикальная линия + LineHorizontal, //!< Horizontal line / Горизонтальная линия + Cross, //!< Cross / Крест + CornerTopLeft, //!< Top-left corner / Угол сверху-слева + CornerTopRight, //!< Top-right corner / Угол сверху-справа + CornerBottomLeft, //!< Bottom-left corner / Угол снизу-слева + CornerBottomRight, //!< Bottom-right corner / Угол снизу-справа + Unchecked, //!< Unchecked box / Неотмеченная клетка + Checked //!< Checked box / Отмеченная клетка }; + //! \brief + //! \~english Clears the screen + //! \~russian Очищает экран void clear(); + + //! \brief + //! \~english Clears rectangle + //! \~russian Очищает прямоугольник void clearRect(int x0, int y0, int x1, int y1) { fillRect(x0, y0, x1, y1, ' '); } + + //! \brief + //! \~english Draws pixel + //! \~russian Рисует пиксель void drawPixel(int x, int y, const PIChar & c, PIScreenTypes::Color col_char = PIScreenTypes::Default, PIScreenTypes::Color col_back = PIScreenTypes::Default, PIScreenTypes::CharFlags flags_char = 0); + + //! \brief + //! \~english Draws line + //! \~russian Рисует линию void drawLine(int x0, int y0, int x1, @@ -63,6 +85,10 @@ public: PIScreenTypes::Color col_char = PIScreenTypes::Default, PIScreenTypes::Color col_back = PIScreenTypes::Default, PIScreenTypes::CharFlags flags_char = 0); + + //! \brief + //! \~english Draws rectangle + //! \~russian Рисует прямоугольник void drawRect(int x0, int y0, int x1, @@ -71,6 +97,10 @@ public: PIScreenTypes::Color col_char = PIScreenTypes::Default, PIScreenTypes::Color col_back = PIScreenTypes::Default, PIScreenTypes::CharFlags flags_char = 0); + + //! \brief + //! \~english Draws frame + //! \~russian Рисует рамку void drawFrame(int x0, int y0, int x1, @@ -78,12 +108,20 @@ public: PIScreenTypes::Color col_char = PIScreenTypes::Default, PIScreenTypes::Color col_back = PIScreenTypes::Default, PIScreenTypes::CharFlags flags_char = 0); + + //! \brief + //! \~english Draws text + //! \~russian Рисует текст void drawText(int x, int y, const PIString & s, PIScreenTypes::Color col_char = PIScreenTypes::Default, PIScreenTypes::Color col_back = PIScreenTypes::Transparent, PIScreenTypes::CharFlags flags_char = 0); + + //! \brief + //! \~english Fills rectangle + //! \~russian Заполняет прямоугольник void fillRect(int x0, int y0, int x1, @@ -92,10 +130,20 @@ public: PIScreenTypes::Color col_char = PIScreenTypes::Default, PIScreenTypes::Color col_back = PIScreenTypes::Default, PIScreenTypes::CharFlags flags_char = 0); + + //! \brief + //! \~english Fills rectangle with content + //! \~russian Заполняет прямоугольник содержимым void fillRect(int x0, int y0, int x1, int y1, PIVector> & content); + //! \brief + //! \~english Returns art character by type + //! \~russian Возвращает символ искусства по типу PIChar artChar(const ArtChar type) const { return arts_.value(type, PIChar(' ')); } + //! \brief + //! \~english Clears cell matrix + //! \~russian Очищает матрицу ячеек static void clear(PIVector> & cells); private: diff --git a/libs/main/console/piscreentile.h b/libs/main/console/piscreentile.h index be420e18..58d55cc3 100644 --- a/libs/main/console/piscreentile.h +++ b/libs/main/console/piscreentile.h @@ -1,9 +1,11 @@ -/*! \file piscreentile.h - * \ingroup Console - * \~\brief - * \~english Basic PIScreen tile - * \~russian Базовый тайл для PIScreen - */ +//! \file piscreentile.h +//! \ingroup Console +//! \brief +//! \~english Basic PIScreen tile +//! \~russian Базовый тайл для PIScreen +//! \details +//! \~english Base class for all screen tiles providing layout and event handling. +//! \~russian Базовый класс для всех экранных тайлов, обеспечивающий компоновку и обработку событий. /* PIP - Platform Independent Primitives Basic PIScreen tile @@ -32,27 +34,89 @@ class PIScreenDrawer; +//! \brief +//! \~english Base tile class for console screen +//! \~russian Базовый класс тайла для консольного экрана + class PIP_CONSOLE_EXPORT PIScreenTile: public PIObject { friend class PIScreen; PIOBJECT_SUBCLASS(PIScreenTile, PIObject); public: + //! \brief + //! \~english Constructs PIScreenTile + //! \~russian Создает PIScreenTile + //! \param n Tile name / Имя тайла + //! \param d Layout direction / Направление компоновки + //! \param p Size policy / Политика размера PIScreenTile(const PIString & n = PIString(), PIScreenTypes::Direction d = PIScreenTypes::Vertical, PIScreenTypes::SizePolicy p = PIScreenTypes::Preferred); + + //! \brief + //! \~english Destructor + //! \~russian Деструктор virtual ~PIScreenTile(); + //! \brief + //! \~english Adds child tile + //! \~russian Добавляет дочерний тайл void addTile(PIScreenTile * t); + + //! \brief + //! \~english Takes ownership of tile + //! \~russian Забирает владение тайла void takeTile(PIScreenTile * t); + + //! \brief + //! \~english Removes child tile + //! \~russian Удаляет дочерний тайл void removeTile(PIScreenTile * t); + + //! \brief + //! \~english Returns parent tile + //! \~russian Возвращает родительский тайл PIScreenTile * parentTile() const { return parent; } + + //! \brief + //! \~english Returns child tiles + //! \~russian Возвращает дочерние тайлы + //! \param only_visible Only visible tiles / Только видимые тайлы PIVector children(bool only_visible = false); + + //! \brief + //! \~english Returns child under mouse position + //! \~russian Возвращает тайл под мышью PIScreenTile * childUnderMouse(int x, int y); + + //! \brief + //! \~english Shows tile + //! \~russian Показывает тайл void show() { visible = true; } + + //! \brief + //! \~english Hides tile + //! \~russian Скрывает тайл void hide() { visible = false; } + + //! \brief + //! \~english Sets focus to this tile + //! \~russian Устанавливает фокус на этот тайл void setFocus(); + + //! \brief + //! \~english Checks if tile has focus + //! \~russian Проверяет, имеет ли тайл фокус bool hasFocus() const { return has_focus; } + + //! \brief + //! \~english Sets all margins + //! \~russian Устанавливает все отступы void setMargins(int m) { marginLeft = marginRight = marginTop = marginBottom = m; } + + //! \brief + //! \~english Sets individual margins + //! \~russian Устанавливает отдельные отступы void setMargins(int l, int r, int t, int b) { marginLeft = l; marginRight = r; @@ -60,9 +124,24 @@ public: marginBottom = b; } + //! \brief + //! \~english Returns tile X position + //! \~russian Возвращает позицию X тайла int x() const { return x_; } + + //! \brief + //! \~english Returns tile Y position + //! \~russian Возвращает позицию Y тайла int y() const { return y_; } + + //! \brief + //! \~english Returns tile width + //! \~russian Возвращает ширину тайла int width() const { return width_; } + + //! \brief + //! \~english Returns tile height + //! \~russian Возвращает высоту тайла int height() const { return height_; } PIScreenTypes::Direction direction; @@ -77,29 +156,64 @@ public: bool visible; protected: - //! Returns desired tile size in "w" and "h" + //! \brief + //! \~english Returns desired tile size in "w" and "h" + //! \~russian Возвращает желаемый размер тайла в "w" и "h" virtual void sizeHint(int & w, int & h) const; - //! Tile has been resized to "w"x"h" + //! \brief + //! \~english Tile has been resized to "w"x"h" + //! \~russian Тайл был изменен на "w"x"h" virtual void resizeEvent(int w, int h) {} - //! Draw tile with drawer "d" in world-space coordinates + //! \brief + //! \~english Draw tile with drawer "d" in world-space coordinates + //! \~russian Рисует тайл отрисовщиком "d" в мировых координатах virtual void drawEvent(PIScreenDrawer * d) {} - //! Return "true" if you process key + //! \brief + //! \~english Return "true" if you process key + //! \~russian Возвращает "true" если вы обрабатываете клавишу virtual bool keyEvent(PIKbdListener::KeyEvent key) { return false; } - //! Return "true" if you process event + //! \brief + //! \~english Return "true" if you process event + //! \~russian Возвращает "true" если вы обрабатываете событие virtual bool mouseEvent(PIKbdListener::MouseEvent me) { return false; } - //! Return "true" if you process wheel + //! \brief + //! \~english Return "true" if you process wheel + //! \~russian Возвращает "true" если вы обрабатываете колесо virtual bool wheelEvent(PIKbdListener::WheelEvent we) { return false; } + //! \brief + //! \~english Raises tile event + //! \~russian Вызывает событие тайла void raiseEvent(PIScreenTypes::TileEvent e); + + //! \brief + //! \~english Sets screen reference + //! \~russian Устанавливает ссылку на экран void setScreen(PIScreenTypes::PIScreenBase * s); + + //! \brief + //! \~english Deletes all children + //! \~russian Удаляет всех потомков void deleteChildren(); + + //! \brief + //! \~english Internal draw event + //! \~russian Внутреннее событие отрисовки void drawEventInternal(PIScreenDrawer * d); + + //! \brief + //! \~english Performs layout + //! \~russian Выполняет компоновку void layout(); + + //! \brief + //! \~english Checks if layout is needed + //! \~russian Проверяет, нужна ли компоновка bool needLayout() { return size_policy != PIScreenTypes::Ignore; } PIVector tiles; diff --git a/libs/main/console/piscreentiles.h b/libs/main/console/piscreentiles.h index 51dbde43..15239060 100644 --- a/libs/main/console/piscreentiles.h +++ b/libs/main/console/piscreentiles.h @@ -1,9 +1,11 @@ -/*! \file piscreentiles.h - * \ingroup Console - * \~\brief - * \~english Various tiles for PIScreen - * \~russian Различные тайлы для PIScreen - */ +//! \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 @@ -30,125 +32,326 @@ #include "piscreentile.h" +//! \brief +//! \~english Tile for displaying simple text content +//! \~russian Тайл для отображения простого текстового контента class PIP_CONSOLE_EXPORT TileSimple: public PIScreenTile { PIOBJECT_SUBCLASS(TileSimple, PIScreenTile); public: + //! \brief Row type typedef PIPair Row; + + //! \brief + //! \~english Constructs TileSimple + //! \~russian Создает TileSimple + //! \param n Tile name / Имя тайла TileSimple(const PIString & n = PIString()); + + //! \brief + //! \~english Constructs TileSimple with row + //! \~russian Создает TileSimple со строкой + //! \param r Row content / Содержимое строки TileSimple(const Row & r); + + //! \brief + //! \~english Destructor + //! \~russian Деструктор virtual ~TileSimple() {} + + //! \brief Tile content rows PIVector content; + + //! \brief Text alignment PIScreenTypes::Alignment alignment; protected: + //! \brief + //! \~english Calculates tile size hint + //! \~russian Вычисляет рекомендуемый размер тайла void sizeHint(int & w, int & h) const override; + + //! \brief + //! \~english Draws tile content + //! \~russian Рисует содержимое тайла void drawEvent(PIScreenDrawer * d) override; }; class TileList; +//! \brief +//! \~english Scrollbar for list containers +//! \~russian Полоса прокрутки для списков class PIP_CONSOLE_EXPORT TileScrollBar: public PIScreenTile { PIOBJECT_SUBCLASS(TileScrollBar, PIScreenTile); friend class TileList; public: + //! \brief + //! \~english Constructs TileScrollBar + //! \~russian Создает TileScrollBar + //! \param n Tile name / Имя тайла TileScrollBar(const PIString & n = PIString()); + + //! \brief + //! \~english Destructor + //! \~russian Деструктор virtual ~TileScrollBar() {} + + //! \brief + //! \~english Sets minimum value + //! \~russian Устанавливает минимальное значение void setMinimum(int v); + + //! \brief + //! \~english Sets maximum value + //! \~russian Устанавливает максимальное значение void setMaximum(int v); + + //! \brief + //! \~english Sets current value + //! \~russian Устанавливает текущее значение void setValue(int v); + + //! \brief + //! \~english Returns minimum value + //! \~russian Возвращает минимальное значение int minimum() const { return minimum_; } + + //! \brief + //! \~english Returns maximum value + //! \~russian Возвращает максимальное значение int maximum() const { return maximum_; } + + //! \brief + //! \~english Returns current value + //! \~russian Возвращает текущее значение int value() const { return value_; } + + //! \brief Scrollbar thickness int thickness; protected: + //! \brief Validates scrollbar state + //! \~english Validates scrollbar state + //! \~russian Проверяет состояние полосы прокрутки void _check(); + + //! \brief + //! \~english Calculates tile size hint + //! \~russian Вычисляет рекомендуемый размер тайла void sizeHint(int & w, int & h) const override; + + //! \brief + //! \~english Draws tile content + //! \~russian Рисует содержимое тайла void drawEvent(PIScreenDrawer * d) override; + + //! \brief + //! \~english Handles mouse events + //! \~russian Обрабатывает события мыши bool mouseEvent(PIKbdListener::MouseEvent me) override; int minimum_, maximum_, value_; PIChar line_char; }; +//! \brief +//! \~english Scrollable list tile +//! \~russian Прокручиваемый список class PIP_CONSOLE_EXPORT TileList: public PIScreenTile { PIOBJECT_SUBCLASS(TileList, PIScreenTile); public: + //! \brief Selection mode enum SelectionMode { - NoSelection, - SingleSelection, - MultiSelection - }; - enum EventType { - SelectionChanged, - RowPressed + NoSelection, //!< No selection / Без выделения + SingleSelection, //!< Single item selection / Выделение одного элемента + MultiSelection //!< Multiple items selection / Выделение нескольких элементов }; + //! \brief Event type + enum EventType { + SelectionChanged, //!< Selection changed / Выделение изменено + RowPressed //!< Row pressed / Строка нажата + }; + + //! \brief + //! \~english Constructs TileList + //! \~russian Создает TileList + //! \param n Tile name / Имя тайла + //! \param sm Selection mode / Режим выделения TileList(const PIString & n = PIString(), SelectionMode sm = NoSelection); + + //! \brief + //! \~english Destructor + //! \~russian Деструктор virtual ~TileList() {} + //! \brief Row type typedef PIPair Row; + + //! \brief List content PIDeque content; + + //! \brief Text alignment PIScreenTypes::Alignment alignment; + + //! \brief Selection mode SelectionMode selection_mode; + + //! \brief Selected indices PISet selected; + + //! \brief Line height int lhei, cur, offset; protected: + //! \brief + //! \~english Calculates tile size hint + //! \~russian Вычисляет рекомендуемый размер тайла void sizeHint(int & w, int & h) const override; + + //! \brief + //! \~english Called when resized + //! \~russian Вызывается при изменении размера void resizeEvent(int w, int h) override; + + //! \brief + //! \~english Draws tile content + //! \~russian Рисует содержимое тайла void drawEvent(PIScreenDrawer * d) override; + + //! \brief + //! \~english Handles key events + //! \~russian Обрабатывает события клавиатуры bool keyEvent(PIKbdListener::KeyEvent key) override; + + //! \brief + //! \~english Handles mouse events + //! \~russian Обрабатывает события мыши bool mouseEvent(PIKbdListener::MouseEvent me) override; + + //! \brief + //! \~english Handles wheel events + //! \~russian Обрабатывает события колеса bool wheelEvent(PIKbdListener::WheelEvent we) override; TileScrollBar * scroll; bool mouse_sel; }; +//! \brief +//! \~english Clickable button tile +//! \~russian Кликабельная кнопка class PIP_CONSOLE_EXPORT TileButton: public PIScreenTile { PIOBJECT_SUBCLASS(TileButton, PIScreenTile); public: + //! \brief + //! \~english Constructs TileButton + //! \~russian Создает TileButton + //! \param n Tile name / Имя тайла TileButton(const PIString & n = PIString()); + + //! \brief + //! \~english Destructor + //! \~russian Деструктор virtual ~TileButton() {} + + //! \brief Event type enum EventType { - ButtonClicked + ButtonClicked //!< Button clicked / Кнопка нажата }; + + //! \brief Button format PIScreenTypes::CellFormat format; + + //! \brief Button text PIString text; protected: + //! \brief + //! \~english Calculates tile size hint + //! \~russian Вычисляет рекомендуемый размер тайла void sizeHint(int & w, int & h) const override; + + //! \brief + //! \~english Draws tile content + //! \~russian Рисует содержимое тайла void drawEvent(PIScreenDrawer * d) override; + + //! \brief + //! \~english Handles key events + //! \~russian Обрабатывает события клавиатуры bool keyEvent(PIKbdListener::KeyEvent key) override; + + //! \brief + //! \~english Handles mouse events + //! \~russian Обрабатывает события мыши bool mouseEvent(PIKbdListener::MouseEvent me) override; }; +//! \brief +//! \~english Group of buttons with selection +//! \~russian Группа кнопок с выбором + class PIP_CONSOLE_EXPORT TileButtons: public PIScreenTile { PIOBJECT_SUBCLASS(TileButtons, PIScreenTile); public: + //! \brief + //! \~english Constructs TileButtons + //! \~russian Создает TileButtons + //! \param n Tile name / Имя тайла TileButtons(const PIString & n = PIString()); + + //! \brief + //! \~english Destructor + //! \~russian Деструктор virtual ~TileButtons() {} + + //! \brief Event type enum EventType { - ButtonSelected + ButtonSelected //!< Button selected / Кнопка выбрана }; + + //! \brief Button type typedef PIPair Button; + + //! \brief Button alignment PIScreenTypes::Alignment alignment; + + //! \brief Button content PIVector