#include "pch.h" #include "legacy_app_dialog_services.h" #include "app.h" #include "legacy_ui_overlay_services.h" #include "node_input_box.h" #include "node_message_box.h" #include "node_progress_bar.h" namespace pp::panopainter { namespace { class LegacyAppProgressDialog final : public pp::app::AppProgressDialog { public: explicit LegacyAppProgressDialog(std::shared_ptr node) noexcept : node_(std::move(node)) { } [[nodiscard]] pp::app::AppDialogKind kind() const noexcept override { return pp::app::AppDialogKind::progress; } [[nodiscard]] std::shared_ptr node() const noexcept { return node_; } private: std::shared_ptr node_; }; class LegacyAppMessageDialog final : public pp::app::AppMessageDialog { public: explicit LegacyAppMessageDialog(std::shared_ptr node) noexcept : node_(std::move(node)) { } [[nodiscard]] pp::app::AppDialogKind kind() const noexcept override { return pp::app::AppDialogKind::message; } [[nodiscard]] std::shared_ptr node() const noexcept { return node_; } private: std::shared_ptr node_; }; class LegacyAppInputDialog final : public pp::app::AppInputDialog { public: explicit LegacyAppInputDialog(std::shared_ptr node) noexcept : node_(std::move(node)) { } [[nodiscard]] pp::app::AppDialogKind kind() const noexcept override { return pp::app::AppDialogKind::input; } [[nodiscard]] std::shared_ptr node() const noexcept { return node_; } private: std::shared_ptr node_; }; class LegacyAppDialogFactory final : public pp::app::AppDialogFactory { public: explicit LegacyAppDialogFactory(App& app) noexcept : app_(app) { } [[nodiscard]] std::shared_ptr show_progress_dialog( const pp::app::AppProgressDialogPlan& plan) override { return std::make_shared( create_legacy_progress_dialog_overlay(app_, plan)); } [[nodiscard]] std::shared_ptr show_message_dialog( const pp::app::AppMessageDialogPlan& plan) override { return std::make_shared( create_legacy_message_dialog_overlay(app_, plan)); } [[nodiscard]] std::shared_ptr show_input_dialog( const pp::app::AppInputDialogPlan& plan) override { return std::make_shared( create_legacy_input_dialog_overlay(app_, plan)); } private: App& app_; }; } // namespace std::unique_ptr make_legacy_app_dialog_factory(App& app) { return std::make_unique(app); } std::shared_ptr create_legacy_app_progress_dialog( App& app, const pp::app::AppProgressDialogPlan& plan) { return legacy_progress_dialog_node(make_legacy_app_dialog_factory(app)->show_progress_dialog(plan)); } std::shared_ptr create_legacy_app_message_dialog( App& app, const pp::app::AppMessageDialogPlan& plan) { return legacy_message_dialog_node(make_legacy_app_dialog_factory(app)->show_message_dialog(plan)); } std::shared_ptr create_legacy_app_input_dialog( App& app, const pp::app::AppInputDialogPlan& plan) { return legacy_input_dialog_node(make_legacy_app_dialog_factory(app)->show_input_dialog(plan)); } std::shared_ptr legacy_progress_dialog_node( const std::shared_ptr& dialog) noexcept { auto legacy = std::dynamic_pointer_cast(dialog); return legacy ? legacy->node() : nullptr; } std::shared_ptr legacy_message_dialog_node( const std::shared_ptr& dialog) noexcept { auto legacy = std::dynamic_pointer_cast(dialog); return legacy ? legacy->node() : nullptr; } std::shared_ptr legacy_input_dialog_node( const std::shared_ptr& dialog) noexcept { auto legacy = std::dynamic_pointer_cast(dialog); return legacy ? legacy->node() : nullptr; } } // namespace pp::panopainter