Skip to content

Диалог сообщения (message)

Класс message предоставляет модальные диалоги для отображения сообщений пользователю.

Быстрый старт

#include <wui/control/message.hpp>

// Простое информационное сообщение
auto msg = std::make_shared<wui::message>(main_window);
msg->show(
    "Operation completed successfully",
    "Information",
    wui::message_icon::information,
    wui::message_button::ok,
    [](wui::message_result result) {
        if (result == wui::message_result::ok) {
            // Пользователь нажал OK
        }
    }
);

Типы иконок

enum class message_icon
{
    information,  // Информация (i)
    question,     // Вопрос (?)
    alert,        // Предупреждение (!)
    stop          // Ошибка (X)
};

Типы кнопок

enum class message_button
{
    ok,                // [OK]
    ok_cancel,         // [OK] [Cancel]
    abort_retry_ignore,// [Abort] [Retry] [Ignore]
    yes_no,            // [Yes] [No]
    yes_no_cancel,     // [Yes] [No] [Cancel]
    retry_cancel,      // [Retry] [Cancel]
    cancel_try_continue// [Cancel] [Try] [Continue]
};

Результаты

enum class message_result
{
    undef,
    ok, cancel, yes, no,
    abort, retry, ignore,
    try_, continue_
};

Диалог сообщения WUI

API

Конструктор

message(std::shared_ptr<window> transient_window_,
        bool docked_ = true,
        std::shared_ptr<i_theme> theme_ = nullptr);

Параметры: - transient_window_ — родительское окно - docked_ — прикреплено ли к окну - theme_ — тема

Методы

void show(std::string_view message_,
          std::string_view title_,
          message_icon icon_,
          message_button button_,
          std::function<void(message_result)> result_callback = [](message_result) {});

message_result get_result() const;

Примеры

Информационное сообщение

auto msg = std::make_shared<wui::message>(window);
msg->show(
    "File saved successfully",
    "Save",
    wui::message_icon::information,
    wui::message_button::ok
);

Подтверждение действия

auto msg = std::make_shared<wui::message>(window);
msg->show(
    "Are you sure you want to delete this file?",
    "Confirm Delete",
    wui::message_icon::question,
    wui::message_button::yes_no,
    [](wui::message_result result) {
        if (result == wui::message_result::yes) {
            delete_file();
        }
    }
);

Сообщение об ошибке

auto msg = std::make_shared<wui::message>(window);
msg->show(
    "Failed to connect to server.\nPlease check your network connection.",
    "Connection Error",
    wui::message_icon::stop,
    wui::message_button::ok_cancel,
    [](wui::message_result result) {
        if (result == wui::message_result::ok) {
            retry_connection();
        }
    }
);

Предупреждение

auto msg = std::make_shared<wui::message>(window);
msg->show(
    "The file has been modified by another program.\nReload?",
    "File Changed",
    wui::message_icon::alert,
    wui::message_button::yes_no_cancel,
    [](wui::message_result result) {
        switch (result) {
            case wui::message_result::yes:
                reload_file();
                break;
            case wui::message_result::no:
                ignore_changes();
                break;
            case wui::message_result::cancel:
                // Отмена
                break;
        }
    }
);

Синхронный вызов

auto msg = std::make_shared<wui::message>(window);
msg->show(
    "Continue?",
    "Confirm",
    wui::message_icon::question,
    wui::message_button::yes_no
);

if (msg->get_result() == wui::message_result::yes) {
    // Пользователь согласился
    proceed();
}

Темизация

Сообщение использует темы для следующих контролов:

{
  "type": "message",
  "background": "#ffffff",
  "text": "#000000",
  "button": "button",
  "icon_information": "res/info.png",
  "icon_question": "res/question.png",
  "icon_alert": "res/alert.png",
  "icon_stop": "res/stop.png"
}

См. также