Add file menu service boundary

This commit is contained in:
2026-06-03 13:00:22 +02:00
parent defa9fc212
commit e880f23040
5 changed files with 266 additions and 42 deletions

View File

@@ -127,18 +127,22 @@ bool apply_document_export_menu_plan(App& app, pp::app::DocumentExportMenuKind k
return false;
}
void apply_file_menu_plan(App& app, pp::app::FileMenuCommand command)
{
const auto plan = pp::app::plan_file_menu_command(command);
switch (plan.action)
class LegacyFileMenuServices final : public pp::app::FileMenuServices {
public:
explicit LegacyFileMenuServices(App& app) noexcept
: app_(app)
{
case pp::app::FileMenuAction::show_new_document_dialog:
app.dialog_newdoc();
break;
case pp::app::FileMenuAction::pick_image_for_import:
}
void show_new_document_dialog() override
{
auto* app_ptr = &app;
app.pick_image([app_ptr](std::string path) {
app_.dialog_newdoc();
}
void pick_image_for_import() override
{
auto* app_ptr = &app_;
app_.pick_image([app_ptr](std::string path) {
Image img;
img.load_file(path);
const auto import_plan = pp::app::plan_document_image_import(img.width, img.height);
@@ -157,40 +161,66 @@ void apply_file_menu_plan(App& app, pp::app::FileMenuCommand command)
Canvas::set_mode(kCanvasMode::Import);
}
});
break;
}
case pp::app::FileMenuAction::pick_project_file:
void pick_project_file() override
{
auto* app_ptr = &app;
app.pick_file({ "ppi" }, [app_ptr](std::string path) {
auto* app_ptr = &app_;
app_.pick_file({ "ppi" }, [app_ptr](std::string path) {
app_ptr->open_document(path);
});
break;
}
case pp::app::FileMenuAction::show_cloud_browser_dialog:
app.dialog_browse();
break;
case pp::app::FileMenuAction::save_document:
app.save_document(plan.save_intent);
break;
case pp::app::FileMenuAction::show_export_jpeg_dialog:
apply_document_export_menu_plan(app, plan.export_kind);
break;
case pp::app::FileMenuAction::show_export_submenu:
break;
case pp::app::FileMenuAction::share_document:
app.share_file(app.doc_path);
break;
case pp::app::FileMenuAction::show_resize_dialog:
app.dialog_resize();
break;
case pp::app::FileMenuAction::upload_to_cloud:
app.cloud_upload();
break;
case pp::app::FileMenuAction::browse_cloud_documents:
app.cloud_browse();
break;
void show_cloud_browser_dialog() override
{
app_.dialog_browse();
}
void save_document(pp::app::DocumentSaveIntent intent) override
{
app_.save_document(intent);
}
void show_export_jpeg_dialog(pp::app::DocumentExportMenuKind kind) override
{
apply_document_export_menu_plan(app_, kind);
}
void show_export_submenu() override
{
}
void share_document() override
{
app_.share_file(app_.doc_path);
}
void show_resize_dialog() override
{
app_.dialog_resize();
}
void upload_to_cloud() override
{
app_.cloud_upload();
}
void browse_cloud_documents() override
{
app_.cloud_browse();
}
private:
App& app_;
};
void apply_file_menu_plan(App& app, pp::app::FileMenuCommand command)
{
const auto plan = pp::app::plan_file_menu_command(command);
LegacyFileMenuServices services(app);
const auto status = pp::app::execute_file_menu_plan(plan, services);
if (!status.ok())
LOG("File menu action failed: %s", status.message);
}
pp::app::DocumentLayerMenuPlan make_layer_menu_plan(