Skip to content

Все контролы

Библиотека 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"
  }
}

Подробнее о темах

См. также