Add layer menu service boundary

This commit is contained in:
2026-06-03 12:56:25 +02:00
parent ea96f38875
commit defa9fc212
5 changed files with 204 additions and 17 deletions

View File

@@ -78,6 +78,16 @@ struct DocumentLayerMenuPlan {
int to_index = 0;
};
class DocumentLayerMenuServices {
public:
virtual ~DocumentLayerMenuServices() = default;
virtual void clear_current_layer() = 0;
virtual void show_rename_dialog() = 0;
virtual void merge_with_lower_layer(int from_index, int to_index) = 0;
virtual void show_merge_animated_not_supported() = 0;
};
[[nodiscard]] inline pp::foundation::Status validate_layer_index(
int layer_count,
int index) noexcept
@@ -410,4 +420,29 @@ struct DocumentLayerMenuPlan {
return pp::foundation::Result<DocumentLayerMenuPlan>::success(std::move(plan));
}
[[nodiscard]] inline pp::foundation::Status execute_document_layer_menu_plan(
const DocumentLayerMenuPlan& plan,
DocumentLayerMenuServices& services)
{
switch (plan.action) {
case DocumentLayerMenuAction::clear_current_layer:
services.clear_current_layer();
return pp::foundation::Status::success();
case DocumentLayerMenuAction::show_rename_dialog:
services.show_rename_dialog();
return pp::foundation::Status::success();
case DocumentLayerMenuAction::merge_with_lower_layer:
services.merge_with_lower_layer(plan.from_index, plan.to_index);
return pp::foundation::Status::success();
case DocumentLayerMenuAction::show_merge_animated_not_supported:
services.show_merge_animated_not_supported();
return pp::foundation::Status::success();
case DocumentLayerMenuAction::no_op_select_layer:
case DocumentLayerMenuAction::no_op_select_upper_layer:
return pp::foundation::Status::success();
}
return pp::foundation::Status::invalid_argument("unknown document layer menu action");
}
}