Extract main toolbar action planning

This commit is contained in:
2026-06-03 12:37:32 +02:00
parent b5bd6d42f7
commit 62561624ed
8 changed files with 536 additions and 15 deletions

View File

@@ -17,6 +17,7 @@
#include "app_core/file_menu.h"
#include "app_core/app_status.h"
#include "app_core/history_ui.h"
#include "app_core/main_toolbar.h"
#include "app_core/tools_menu.h"
#include "settings.h"
#include "serializer.h"
@@ -281,39 +282,51 @@ void App::init_toolbar_main()
if (auto* button = layout[main_id]->find<NodeButton>("btn-open"))
{
button->on_click = [this, button](Node*) {
dialog_open();
const auto plan = pp::app::plan_main_toolbar_command(
pp::app::MainToolbarCommand::open_document);
if (plan && plan.value().action == pp::app::MainToolbarAction::show_open_dialog)
dialog_open();
};
}
if (auto* button = layout[main_id]->find<NodeButton>("btn-save"))
{
button->on_click = [this, button](Node*) {
dialog_save();
const auto plan = pp::app::plan_main_toolbar_command(
pp::app::MainToolbarCommand::save_document);
if (plan && plan.value().action == pp::app::MainToolbarAction::show_save_dialog)
dialog_save();
};
}
if (auto* button = layout[main_id]->find<NodeButtonCustom>("btn-undo"))
{
button->on_click = [this, button](Node*) {
const auto plan = pp::app::plan_history_undo(static_cast<int>(ActionManager::I.m_actions.size()));
if (plan && plan.value().invokes_undo)
const auto plan = pp::app::plan_main_toolbar_command(
pp::app::MainToolbarCommand::undo,
static_cast<int>(ActionManager::I.m_actions.size()));
if (plan && plan.value().action == pp::app::MainToolbarAction::invoke_undo)
ActionManager::undo();
};
}
if (auto* button = layout[main_id]->find<NodeButtonCustom>("btn-redo"))
{
button->on_click = [this, button](Node*) {
const auto plan = pp::app::plan_history_redo(static_cast<int>(ActionManager::I.m_redos.size()));
if (plan && plan.value().invokes_redo)
const auto plan = pp::app::plan_main_toolbar_command(
pp::app::MainToolbarCommand::redo,
0,
static_cast<int>(ActionManager::I.m_redos.size()));
if (plan && plan.value().action == pp::app::MainToolbarAction::invoke_redo)
ActionManager::redo();
};
}
if (auto* button = layout[main_id]->find<NodeButtonCustom>("btn-clean-memory"))
{
button->on_click = [this](Node*) {
const auto plan = pp::app::plan_history_clear(
const auto plan = pp::app::plan_main_toolbar_command(
pp::app::MainToolbarCommand::clear_history,
static_cast<int>(ActionManager::I.m_actions.size()),
static_cast<int>(ActionManager::I.m_redos.size()),
static_cast<int>(ActionManager::I.m_memory));
if (plan && plan.value().clears_history)
if (plan && plan.value().action == pp::app::MainToolbarAction::clear_history)
ActionManager::clear();
};
}
@@ -321,18 +334,27 @@ void App::init_toolbar_main()
{
button->on_click = [this](Node*) {
//exit(0);
const auto plan = pp::app::plan_document_canvas_clear(static_cast<bool>(canvas));
if (plan && plan.value().clears_canvas)
const auto plan = pp::app::plan_main_toolbar_command(
pp::app::MainToolbarCommand::clear_canvas,
0,
0,
0,
static_cast<bool>(canvas));
if (plan && plan.value().action == pp::app::MainToolbarAction::clear_canvas)
canvas->m_canvas->clear({
plan.value().r,
plan.value().g,
plan.value().b,
plan.value().a });
0.0F,
0.0F,
0.0F,
0.0F });
};
}
if (auto* button = layout[main_id]->find<NodeButton>("btn-popup"))
{
button->on_click = [this](Node*) {
const auto plan = pp::app::plan_main_toolbar_command(
pp::app::MainToolbarCommand::show_message_box);
if (!plan || plan.value().action != pp::app::MainToolbarAction::show_message_box)
return;
msgbox = new NodeMessageBox();
msgbox->set_manager(&layout);
msgbox->init();
@@ -342,6 +364,10 @@ void App::init_toolbar_main()
if (auto* button = layout[main_id]->find<NodeButtonCustom>("btn-settings"))
{
button->on_click = [this](Node*) {
const auto plan = pp::app::plan_main_toolbar_command(
pp::app::MainToolbarCommand::show_settings);
if (!plan || plan.value().action != pp::app::MainToolbarAction::show_settings_dialog)
return;
settings = new NodeSettings();
settings->set_manager(&layout);
settings->init();