#include "pch.h" #include "legacy_about_menu_binding_services.h" #include "app.h" #include "legacy_app_shell_services.h" #include "legacy_ui_overlay_services.h" #include "node_button_custom.h" #include "node_popup_menu.h" #include "node_text.h" namespace pp::panopainter { namespace { std::shared_ptr add_menu_popup( App& app, const char* template_id, glm::vec2 position, float rtl_anchor_width) { const auto popup = pp::panopainter::add_legacy_popup_menu( app, template_id, position.x, position.y, rtl_anchor_width); if (!popup) { LOG("Popup menu '%s' failed: %s", template_id ? template_id : "", popup.status().message); return nullptr; } return popup.value(); } void close_legacy_overlay_handle_ignoring_status( Node& anchor, pp::ui::NodeHandle overlay) noexcept { (void)pp::panopainter::close_legacy_overlay_node(anchor, overlay); } void bind_about_menu_action( App& app, Node& popup_root, pp::ui::NodeHandle popup_handle, NodeButtonCustom& button, pp::app::AboutMenuCommand command, int version_major, int version_minor, int version_fix, bool has_canvas) noexcept { button.on_click = [&app, &popup_root, popup_handle, command, version_major, version_minor, version_fix, has_canvas](Node*) { const auto plan = pp::app::plan_about_menu_command( command, version_major, version_minor, version_fix, true, has_canvas); execute_legacy_about_menu_plan(app, plan); if (plan.closes_root_popup) { close_legacy_overlay_handle_ignoring_status(popup_root, popup_handle); } }; } } // namespace void bind_legacy_about_menu_popup( App& app, Node& popup_root, NodeButtonCustom& trigger_button, int version_major, int version_minor, int version_fix, bool has_canvas) noexcept { trigger_button.on_click = [&app, &popup_root, &trigger_button, version_major, version_minor, version_fix, has_canvas](Node*) { const glm::vec2 pos = trigger_button.m_pos + glm::vec2(0, trigger_button.m_size.y); auto popup = add_menu_popup(app, "about-menu", pos, trigger_button.m_size.x); if (!popup) { return; } detach_legacy_node_from_parent(*popup); auto popup_overlay = pp::panopainter::open_legacy_overlay_node_with_handle(popup_root, popup); if (!popup_overlay) { pp::panopainter::destroy_legacy_node(*popup); return; } const auto popup_handle = popup_overlay.value(); bind_about_menu_action( app, popup_root, popup_handle, *popup->find("about-app"), pp::app::AboutMenuCommand::about_app, version_major, version_minor, version_fix, has_canvas); bind_about_menu_action( app, popup_root, popup_handle, *popup->find("about-doc"), pp::app::AboutMenuCommand::help_guide, version_major, version_minor, version_fix, has_canvas); if (auto item = popup->find("about-news")) { if (auto text = item->find("menu-label")) { const auto plan = pp::app::plan_about_menu_command( pp::app::AboutMenuCommand::whats_new, version_major, version_minor, version_fix); text->set_text(plan.label.c_str()); } bind_about_menu_action( app, popup_root, popup_handle, *item, pp::app::AboutMenuCommand::whats_new, version_major, version_minor, version_fix, has_canvas); } if (auto b = popup->find("about-crash")) { bind_about_menu_action( app, popup_root, popup_handle, *b, pp::app::AboutMenuCommand::induce_crash, version_major, version_minor, version_fix, has_canvas); } if (auto b = popup->find("about-perf")) { bind_about_menu_action( app, popup_root, popup_handle, *b, pp::app::AboutMenuCommand::performance_test, version_major, version_minor, version_fix, has_canvas); } }; } } // namespace pp::panopainter