Covellite++  Version: 2.3.0 Revision: 2580 Platform: x64 Build: 15:23 16.10.2020
Кроссплатформенный фреймворк для разработки приложений на С++
Создание кода панелей GUI

Создать классы отдельных экранов программы.

  • Создать класс главного окна программы.

Создание .rcss и .rml файлов описания отдельных экранов программы

Как это делается см. в документации/примерах библиотеки.

Доступные css свойства.

Заметки
Внешний вид элементов управления можно задавать при помощи либо стилей css, либо изображений из заранее подготовленной текстуры - во втором случае .rml файл грузится быстрее.

Все файлы (.rml, .rcss, .png) следует поместить в папку (Windows - корневая папка программы, Android - папка assets проекта Packaging), пути к этим файлам в программе задаются относительно этой папки, а в самом файле - относительно папки расположения этого файла.

Файлы .rml могут содержать в качестве текста не ASCII символы, но в этом случае их следует сохранять как utf8, а используемые шрифты должны поддерживать соответствующие Unicode символы.

Предупреждения
Файлы .rcss не должны сохраняться как utf8, т.к. они включаются целиком в состав файлов .rml при парсинге, что приводит к появлению Assert'ов при запуске Debug версии программы.

Создать классы отдельных экранов программы

Для каждого экрана программы необходимо создать класс-наследник от класса covellite::rocket::Layer, передав ему в качестве второго параметра конструктора путь к соответствующему .rml файлу.

class MainScreen final :
{
MainScreen::MainScreen(IWindowGui_t & _Window) :
Layer(_Window, "Data/main.rml")
{

Если необходим экран с заголовком, содержащим текст, заданный в заголовке .rml файла, создать класс наследник слоя, в конструкторе которого передать базовому классу идентификатор заголовка из его объявления в .rml файле.

Необходимо сделать:
Добавить пример использования панели с заголовком.

Создание класса главного окна программы

Класс главного окна программы отвечает за переключение пользовательских экранов и обработку пользовательского ввода.

Создать класс-наследник от класса covellite::app::IWindow, в конструкторе котрого установить набор строк для локализации приложения, добавить стартовый экран программы и подписаться на требующие обработки на уровне окна приложения события.

ExampleWindow::ExampleWindow(WindowGui_t & _WindowGui) :
m_WindowGui(_WindowGui),
m_Events(_WindowGui)
{
// Набор строк локализации приложения в данном случае используется для
// вывода различного текста на различных платформах).
m_WindowGui.Set(
{
# if BOOST_OS_WINDOWS
{ u8"[BACK]", u8"ALT + LEFT" },
{ u8"[EXIT]", u8"кнопку закрытия окна программы" },
# elif BOOST_PLAT_ANDROID
{ u8"[BACK]", u8"кнопку BACK устройства" },
{ u8"[EXIT]", u8"кнопку HOME устройства" },
# endif
});
// Экран, который будет отображаться при старте программы.
m_WindowGui.PushLayer<::layers::MainScreen>();
m_LayerCount++;
// Подписка на события перехода к другим слоям (события объекта Button
// активируются в классе layers::MainScreen при нажатии на соответствующую
// кнопку).
m_Events[::layers::Button.Help]
.Connect([&](void)
{
m_WindowGui.PushLayer<::layers::Description>();
m_LayerCount++;
});
m_Events[::layers::Button.Controls]
.Connect([&](void)
{
m_WindowGui.PushLayer<::layers::Controls>();
m_LayerCount++;
});
m_Events[::layers::Button.Text]
.Connect([&](void)
{
m_WindowGui.PushLayer<::layers::Text>();
m_LayerCount++;
});
m_Events[::layers::Button.Draw3DObject]
.Connect([&](void)
{
m_WindowGui.PushLayer<::layers::Draw3DObject>();
m_LayerCount++;
// 17 Март 2019 10:57 (unicornum.verum@gmail.com)
TODO("Событие создания basement::Simple3DObject должно генерироваться здесь.");
});
m_Events[::layers::Button.Simple2DGame]
.Connect([&](void)
{
m_WindowGui.PushLayer<::layers::Simple2DGame>();
m_LayerCount++;
m_Events[::events::Simple2DGame.Start]();
});
m_Events[::layers::Button.Demo]
.Connect([&](void)
{
m_WindowGui.PushLayer<::layers::Demo>();
m_LayerCount++;
m_Events[::events::Demo.Start]();
});
m_Events[::layers::Button.Back]
.Connect([&](const bool & _IsStopBasement)
{
m_WindowGui.Back();
m_LayerCount--;
if (_IsStopBasement)
{
m_Events[::events::Basement.Stop]();
}
});
m_Events[::covellite::events::Key.Up]
.Connect([&](const ::covellite::events::Key_t::Code & _Code)
{
static const auto WindowsEscKeyCode = 0x1B;
if (_Code == WindowsEscKeyCode && m_LayerCount == 1)
{
m_Events[::covellite::events::Application.Exit]();
}
});
}
Заметки
  • Идентификаторы элементов управления передаются в функцию-обработчик события Click_t в нижнем регистре независимо от того, каким образом они были заданы в .rml файле.
  • Цвет фона можно задавать как поле background-color для body в .rcss файле, но в этом случае для заполнения всего окна следует в стилях rml и body поставить
    rml,
    body
    {
    top: 0px;
    left: 0px;
    width: 100%;
    height: 100%;
    }
    body
    {
    background-color: blue;
    ...

В классе окна событие Click_t будет вызываться для всех элементов управления всех активных пользовательских экранов, при этом здесь имеет смысл обрабатывать события, непосредственно связанные с работой окна (переход к другому слою или выход из программы).

События, которые может обрабатывать окно.

layers::Text
Класс входит в проект Example Класс слоя вывода текста в разных форматах.
Definition: Text.hpp:25
layers::MainScreen
Класс входит в проект Example Класс главного экрана программы.
Definition: MainScreen.hpp:26
covellite::gui::Layer
Класс входит в проект Covellite.Gui Класс одного слоя (пользовательского экрана) программы.
Definition: Layer.hpp:39
layers::Draw3DObject
Класс входит в проект Example Класс слоя отображения 3D объектов.
Definition: Draw3DObject.hpp:25
layers::Demo
Класс входит в проект Example Класс GUI панели демонстрационного режима.
Definition: Demo.hpp:60
layers::Controls
Класс входит в проект Example Окно примера работы с элементами управления.
Definition: Controls.hpp:26
layers::Description
Класс входит в проект Example Класс окна описания слоя.
Definition: Description.hpp:43
ExampleWindow::ExampleWindow
ExampleWindow(WindowGui_t &)
[Constructor main window]
Definition: ExampleWindow.cpp:14
layers::Simple2DGame
Класс входит в проект Example Класс слоя простой 2D игры.
Definition: Example2DGame.hpp:25