167 lines
4.8 KiB
C++
167 lines
4.8 KiB
C++
#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<NodePopupMenu> 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 : "<null>", 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<NodeButtonCustom>("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<NodeButtonCustom>("about-doc"),
|
|
pp::app::AboutMenuCommand::help_guide,
|
|
version_major,
|
|
version_minor,
|
|
version_fix,
|
|
has_canvas);
|
|
|
|
if (auto item = popup->find<NodeButtonCustom>("about-news")) {
|
|
if (auto text = item->find<NodeText>("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<NodeButtonCustom>("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<NodeButtonCustom>("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
|