Add main toolbar service boundary

This commit is contained in:
2026-06-03 12:42:23 +02:00
parent 62561624ed
commit fb111dcdc9
5 changed files with 218 additions and 32 deletions

View File

@@ -43,6 +43,20 @@ struct MainToolbarPlan {
bool no_op = false;
};
class MainToolbarServices {
public:
virtual ~MainToolbarServices() = default;
virtual void show_open_dialog() = 0;
virtual void show_save_dialog() = 0;
virtual void invoke_undo() = 0;
virtual void invoke_redo() = 0;
virtual void clear_history() = 0;
virtual void clear_canvas() = 0;
virtual void show_message_box() = 0;
virtual void show_settings_dialog() = 0;
};
[[nodiscard]] inline pp::foundation::Result<MainToolbarPlan> plan_main_toolbar_command(
MainToolbarCommand command,
int undo_count = 0,
@@ -143,4 +157,40 @@ struct MainToolbarPlan {
pp::foundation::Status::invalid_argument("unknown main toolbar command"));
}
[[nodiscard]] inline pp::foundation::Status execute_main_toolbar_plan(
const MainToolbarPlan& plan,
MainToolbarServices& services)
{
switch (plan.action) {
case MainToolbarAction::show_open_dialog:
services.show_open_dialog();
return pp::foundation::Status::success();
case MainToolbarAction::show_save_dialog:
services.show_save_dialog();
return pp::foundation::Status::success();
case MainToolbarAction::invoke_undo:
services.invoke_undo();
return pp::foundation::Status::success();
case MainToolbarAction::invoke_redo:
services.invoke_redo();
return pp::foundation::Status::success();
case MainToolbarAction::clear_history:
services.clear_history();
return pp::foundation::Status::success();
case MainToolbarAction::clear_canvas:
services.clear_canvas();
return pp::foundation::Status::success();
case MainToolbarAction::show_message_box:
services.show_message_box();
return pp::foundation::Status::success();
case MainToolbarAction::show_settings_dialog:
services.show_settings_dialog();
return pp::foundation::Status::success();
case MainToolbarAction::no_op_unavailable:
return pp::foundation::Status::success();
}
return pp::foundation::Status::invalid_argument("unknown main toolbar action");
}
} // namespace pp::app