Все контролы
Библиотека WUI предоставляет набор стандартных контролов для создания пользовательского интерфейса.
Стандартные контролы
| Контрол | Описание |
|---|---|
| Button | Кнопка для взаимодействия с пользователем. Поддерживает текст, изображения, переключатели |
| Image | Отображение изображений с поддержкой визуальных тем |
| Input | Текстовое поле ввода. Однострочное, многострочное, пароль, только чтение |
| List | Список элементов с поддержкой колонок, прокрутки и отрисовки |
| Menu | Контекстное меню с поддержкой вложенных пунктов и иконок |
| Message | Модальные диалоги для отображения сообщений пользователю |
| Panel | Контейнер для группировки элементов или пользовательской отрисовки |
| Progress | Индикатор прогресса (горизонтальный/вертикальный) |
| Select | Выпадающий список для выбора одного значения |
| Slider | Ползунок для выбора значения из диапазона |
| Splitter | Перетаскиваемый разделитель для изменения размера областей |
| Tooltip | Всплывающие подсказки для элементов интерфейса |
| Tray | Иконка в системном трее с уведомлениями |
Базовый интерфейс
Все контролы реализуют интерфейс i_control:
class i_control
{
public:
virtual void draw(graphic &gr, rect clip) = 0;
virtual void set_position(rect position) = 0;
virtual rect position() const = 0;
virtual void set_parent(std::shared_ptr<window> window_) = 0;
virtual std::weak_ptr<window> parent() const = 0;
virtual void clear_parent() = 0;
virtual void set_topmost(bool yes) = 0;
virtual bool topmost() const = 0;
virtual void show() = 0;
virtual void hide() = 0;
virtual bool showed() const = 0;
virtual void enable() = 0;
virtual void disable() = 0;
virtual bool enabled() const = 0;
virtual bool focused() const = 0;
virtual bool focusing() const = 0;
virtual error get_error() const = 0;
};
Добавление контрола на окно
// Создание контрола
auto button = std::make_shared<wui::button>("Click", []() {
std::cout << "Clicked!" << std::endl;
});
// Добавление на окно с позицией
window->add_control(button, {10, 10, 100, 30}); // left, top, right, bottom
Темизация
Все контролы поддерживают визуальные темы. Пример JSON темы:
{
"button": {
"calm": "#06a5df",
"active": "#1aafe9",
"disabled": "#a5a5a0"
},
"input": {
"background": "#ffffff",
"text": "#000000"
}
}