Extract layer rename dialog and brush preset registry shells
This commit is contained in:
@@ -1,11 +1,8 @@
|
||||
#include "pch.h"
|
||||
#include "app.h"
|
||||
#include "app_core/app_dialog.h"
|
||||
#include "app_core/document_layer.h"
|
||||
#include "legacy_app_dialog_services.h"
|
||||
#include "legacy_document_layer_services.h"
|
||||
#include "legacy_ui_overlay_services.h"
|
||||
#include "node_dialog_layer_rename.h"
|
||||
|
||||
#ifdef __QUEST__
|
||||
#include "oculus_vr.h"
|
||||
@@ -25,6 +22,7 @@ void open_changelog_dialog(App& app);
|
||||
void open_about_dialog(App& app);
|
||||
void open_whatsnew_dialog(App& app, bool force_show);
|
||||
void open_shortcuts_dialog(App& app);
|
||||
void open_legacy_document_layer_rename_dialog(App& app);
|
||||
}
|
||||
|
||||
std::shared_ptr<NodeProgressBar> App::show_progress(const std::string& title, int total /*= 0*/)
|
||||
@@ -95,46 +93,7 @@ void App::dialog_export_cube_faces()
|
||||
|
||||
void App::dialog_layer_rename()
|
||||
{
|
||||
auto* overlay_anchor = layout[main_id];
|
||||
if (!overlay_anchor) {
|
||||
LOG("Layer rename dialog open failed: main layout anchor is missing");
|
||||
return;
|
||||
}
|
||||
|
||||
auto dialog = pp::panopainter::make_legacy_overlay_node<NodeDialogLayerRename>(*this);
|
||||
dialog->input->set_text(layers->m_current_layer->m_label_text);
|
||||
|
||||
App::I->showKeyboard();
|
||||
|
||||
const auto overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*overlay_anchor, dialog);
|
||||
if (!overlay) {
|
||||
App::I->hideKeyboard();
|
||||
LOG("Layer rename dialog open failed: %s", overlay.status().message);
|
||||
return;
|
||||
}
|
||||
const auto overlay_handle = overlay.value();
|
||||
|
||||
const auto close_dialog = [this, overlay_anchor, overlay_handle]() {
|
||||
const auto close_status =
|
||||
pp::panopainter::close_legacy_overlay_node(*overlay_anchor, overlay_handle);
|
||||
(void)close_status;
|
||||
App::I->hideKeyboard();
|
||||
};
|
||||
|
||||
dialog->btn_ok->on_click = [this,dialog](Node*)
|
||||
{
|
||||
const auto old_name = layers->m_current_layer->m_label_text;
|
||||
const auto plan = pp::app::plan_document_layer_rename(old_name, dialog->get_name());
|
||||
if (!plan)
|
||||
return;
|
||||
const auto status = pp::panopainter::execute_legacy_document_layer_rename_plan(*this, plan.value(), dialog);
|
||||
if (!status.ok())
|
||||
LOG("Layer rename failed: %s", status.message);
|
||||
};
|
||||
dialog->btn_cancel->on_click = [close_dialog](Node*)
|
||||
{
|
||||
close_dialog();
|
||||
};
|
||||
pp::panopainter::open_legacy_document_layer_rename_dialog(*this);
|
||||
}
|
||||
|
||||
void App::dialog_preset_download()
|
||||
|
||||
@@ -7,6 +7,27 @@
|
||||
|
||||
namespace pp::panopainter {
|
||||
|
||||
namespace {
|
||||
std::vector<NodePanelBrushPreset*> s_legacy_brush_preset_panels;
|
||||
}
|
||||
|
||||
void register_legacy_brush_preset_panel(NodePanelBrushPreset& panel)
|
||||
{
|
||||
s_legacy_brush_preset_panels.push_back(&panel);
|
||||
}
|
||||
|
||||
void unregister_legacy_brush_preset_panel(NodePanelBrushPreset& panel)
|
||||
{
|
||||
s_legacy_brush_preset_panels.erase(
|
||||
std::remove(s_legacy_brush_preset_panels.begin(), s_legacy_brush_preset_panels.end(), &panel),
|
||||
s_legacy_brush_preset_panels.end());
|
||||
}
|
||||
|
||||
const std::vector<NodePanelBrushPreset*>& legacy_brush_preset_panels()
|
||||
{
|
||||
return s_legacy_brush_preset_panels;
|
||||
}
|
||||
|
||||
LegacyBrushPresetListServices::LegacyBrushPresetListServices(NodePanelBrushPreset& owner)
|
||||
: owner_(owner)
|
||||
{
|
||||
@@ -21,7 +42,7 @@ pp::foundation::Status LegacyBrushPresetListServices::add_current_brush_preset(i
|
||||
return pp::foundation::Status::invalid_argument("current brush must be available to add a preset");
|
||||
}
|
||||
|
||||
for (auto p : NodePanelBrushPreset::s_panels) {
|
||||
for (auto p : legacy_brush_preset_panels()) {
|
||||
p->add_brush(std::make_shared<Brush>(*Canvas::I->m_current_brush));
|
||||
}
|
||||
return pp::foundation::Status::success();
|
||||
@@ -33,7 +54,7 @@ void LegacyBrushPresetListServices::remove_brush_preset(
|
||||
bool selects_target,
|
||||
bool clears_selection)
|
||||
{
|
||||
for (auto p : NodePanelBrushPreset::s_panels) {
|
||||
for (auto p : legacy_brush_preset_panels()) {
|
||||
if (current_index < 0 || current_index >= static_cast<int>(p->m_container->m_children.size())) {
|
||||
continue;
|
||||
}
|
||||
@@ -51,7 +72,7 @@ void LegacyBrushPresetListServices::remove_brush_preset(
|
||||
|
||||
void LegacyBrushPresetListServices::move_brush_preset(int from_index, int to_index)
|
||||
{
|
||||
for (auto p : NodePanelBrushPreset::s_panels) {
|
||||
for (auto p : legacy_brush_preset_panels()) {
|
||||
if (from_index >= 0 && from_index < static_cast<int>(p->m_container->m_children.size())) {
|
||||
p->m_container->move_child(p->m_container->m_children[from_index].get(), to_index);
|
||||
}
|
||||
@@ -60,7 +81,7 @@ void LegacyBrushPresetListServices::move_brush_preset(int from_index, int to_ind
|
||||
|
||||
void LegacyBrushPresetListServices::select_brush_preset(int index, bool notify_brush_changed)
|
||||
{
|
||||
for (auto p : NodePanelBrushPreset::s_panels) {
|
||||
for (auto p : legacy_brush_preset_panels()) {
|
||||
if (p->m_current) {
|
||||
p->m_current->m_selected = false;
|
||||
}
|
||||
@@ -75,7 +96,7 @@ void LegacyBrushPresetListServices::select_brush_preset(int index, bool notify_b
|
||||
|
||||
void LegacyBrushPresetListServices::clear_brush_presets(bool clears_selection)
|
||||
{
|
||||
for (auto p : NodePanelBrushPreset::s_panels) {
|
||||
for (auto p : legacy_brush_preset_panels()) {
|
||||
p->m_container->remove_all_children();
|
||||
if (clears_selection) {
|
||||
p->m_current = nullptr;
|
||||
@@ -85,7 +106,7 @@ void LegacyBrushPresetListServices::clear_brush_presets(bool clears_selection)
|
||||
|
||||
void LegacyBrushPresetListServices::update_preset_empty_notification()
|
||||
{
|
||||
for (auto p : NodePanelBrushPreset::s_panels) {
|
||||
for (auto p : legacy_brush_preset_panels()) {
|
||||
p->m_notification->SetVisibility(p->m_container->m_children.size() == 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
|
||||
namespace pp::panopainter {
|
||||
|
||||
void register_legacy_brush_preset_panel(NodePanelBrushPreset& panel);
|
||||
void unregister_legacy_brush_preset_panel(NodePanelBrushPreset& panel);
|
||||
const std::vector<NodePanelBrushPreset*>& legacy_brush_preset_panels();
|
||||
|
||||
class LegacyBrushPresetListServices final : public pp::app::BrushPresetListServices {
|
||||
public:
|
||||
explicit LegacyBrushPresetListServices(NodePanelBrushPreset& owner);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "pch.h"
|
||||
|
||||
#include "legacy_brush_preset_services.h"
|
||||
#include "legacy_brush_preset_list_services.h"
|
||||
|
||||
#include "abr.h"
|
||||
#include "app.h"
|
||||
@@ -84,6 +85,7 @@ bool LegacyBrushPresetServices::restore()
|
||||
owner_.add_brush(b);
|
||||
}
|
||||
}
|
||||
owner_.m_notification->SetVisibility(owner_.m_container->m_children.size() == 0);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -350,7 +352,7 @@ bool LegacyBrushPresetServices::import_ppbr(const std::string& path)
|
||||
App::I->ui_task([owner, brushes_to_add = std::move(brushes_to_add), pb]() mutable {
|
||||
for (const auto& b : brushes_to_add)
|
||||
{
|
||||
for (auto p : NodePanelBrushPreset::s_panels)
|
||||
for (auto p : legacy_brush_preset_panels())
|
||||
p->add_brush(b);
|
||||
}
|
||||
|
||||
@@ -439,7 +441,7 @@ bool LegacyBrushPresetServices::import_abr(const std::string& path)
|
||||
if (b->valid())
|
||||
{
|
||||
LOG("add preset %s", b->m_name.c_str());
|
||||
for (auto p : NodePanelBrushPreset::s_panels)
|
||||
for (auto p : legacy_brush_preset_panels())
|
||||
p->add_brush(b);
|
||||
}
|
||||
pb->increment();
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "app.h"
|
||||
#include "legacy_document_canvas_services.h"
|
||||
#include "legacy_ui_overlay_services.h"
|
||||
#include "node_dialog_layer_rename.h"
|
||||
|
||||
namespace pp::panopainter {
|
||||
namespace {
|
||||
@@ -313,6 +314,50 @@ pp::foundation::Status execute_legacy_document_layer_rename_plan(
|
||||
return pp::app::execute_document_layer_rename_plan(plan, services);
|
||||
}
|
||||
|
||||
void open_legacy_document_layer_rename_dialog(App& app)
|
||||
{
|
||||
auto* overlay_anchor = app.layout[app.main_id];
|
||||
if (!overlay_anchor) {
|
||||
LOG("Layer rename dialog open failed: main layout anchor is missing");
|
||||
return;
|
||||
}
|
||||
|
||||
auto dialog = pp::panopainter::make_legacy_overlay_node<NodeDialogLayerRename>(app);
|
||||
dialog->input->set_text(app.layers->m_current_layer->m_label_text);
|
||||
|
||||
app.showKeyboard();
|
||||
|
||||
const auto overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*overlay_anchor, dialog);
|
||||
if (!overlay) {
|
||||
app.hideKeyboard();
|
||||
LOG("Layer rename dialog open failed: %s", overlay.status().message);
|
||||
return;
|
||||
}
|
||||
const auto overlay_handle = overlay.value();
|
||||
|
||||
const auto close_dialog = [&app, overlay_anchor, overlay_handle]() {
|
||||
const auto close_status =
|
||||
pp::panopainter::close_legacy_overlay_node(*overlay_anchor, overlay_handle);
|
||||
(void)close_status;
|
||||
app.hideKeyboard();
|
||||
};
|
||||
|
||||
dialog->btn_ok->on_click = [&app, dialog](Node*)
|
||||
{
|
||||
const auto old_name = app.layers->m_current_layer->m_label_text;
|
||||
const auto plan = pp::app::plan_document_layer_rename(old_name, dialog->get_name());
|
||||
if (!plan)
|
||||
return;
|
||||
const auto status = pp::panopainter::execute_legacy_document_layer_rename_plan(app, plan.value(), dialog);
|
||||
if (!status.ok())
|
||||
LOG("Layer rename failed: %s", status.message);
|
||||
};
|
||||
dialog->btn_cancel->on_click = [close_dialog](Node*)
|
||||
{
|
||||
close_dialog();
|
||||
};
|
||||
}
|
||||
|
||||
pp::foundation::Status execute_legacy_document_layer_menu_plan(
|
||||
App& app,
|
||||
const pp::app::DocumentLayerMenuPlan& plan)
|
||||
|
||||
@@ -15,6 +15,7 @@ namespace pp::panopainter {
|
||||
App& app,
|
||||
const pp::app::DocumentLayerRenamePlan& plan,
|
||||
const std::shared_ptr<NodeDialogLayerRename>& dialog);
|
||||
void open_legacy_document_layer_rename_dialog(App& app);
|
||||
[[nodiscard]] pp::foundation::Status execute_legacy_document_layer_menu_plan(
|
||||
App& app,
|
||||
const pp::app::DocumentLayerMenuPlan& plan);
|
||||
|
||||
@@ -116,8 +116,6 @@ void NodePanelBrush::added(Node* parent)
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
std::vector<NodePanelBrushPreset*> NodePanelBrushPreset::s_panels;
|
||||
|
||||
Node* NodeBrushPresetItem::clone_instantiate() const
|
||||
{
|
||||
return pp::panopainter::clone_legacy_brush_preset_item(*this);
|
||||
@@ -135,12 +133,12 @@ void NodeBrushPresetItem::draw()
|
||||
|
||||
NodePanelBrushPreset::NodePanelBrushPreset()
|
||||
{
|
||||
s_panels.push_back(this);
|
||||
pp::panopainter::register_legacy_brush_preset_panel(*this);
|
||||
}
|
||||
|
||||
NodePanelBrushPreset::~NodePanelBrushPreset()
|
||||
{
|
||||
s_panels.erase(std::remove(s_panels.begin(), s_panels.end(), this));
|
||||
pp::panopainter::unregister_legacy_brush_preset_panel(*this);
|
||||
}
|
||||
|
||||
//---
|
||||
@@ -150,9 +148,6 @@ Node* NodePanelBrushPreset::clone_instantiate() const
|
||||
return new NodePanelBrushPreset();
|
||||
}
|
||||
|
||||
namespace pp::panopainter {
|
||||
} // namespace pp::panopainter
|
||||
|
||||
void NodePanelBrushPreset::execute_preset_list_plan(const pp::app::BrushPresetListPlan& plan)
|
||||
{
|
||||
pp::panopainter::LegacyBrushPresetListServices services(*this);
|
||||
@@ -184,11 +179,7 @@ bool NodePanelBrushPreset::save()
|
||||
|
||||
bool NodePanelBrushPreset::restore()
|
||||
{
|
||||
const auto ok = pp::panopainter::LegacyBrushPresetServices(*this).restore();
|
||||
if (ok) {
|
||||
m_notification->SetVisibility(m_container->m_children.size() == 0);
|
||||
}
|
||||
return ok;
|
||||
return pp::panopainter::LegacyBrushPresetServices(*this).restore();
|
||||
}
|
||||
|
||||
void NodePanelBrushPreset::add_brush(std::shared_ptr<Brush> brush)
|
||||
|
||||
@@ -96,8 +96,6 @@ class NodePanelBrushPreset : public Node
|
||||
friend class pp::panopainter::LegacyBrushPresetPanelUi;
|
||||
friend class pp::panopainter::LegacyBrushPresetListServices;
|
||||
friend class pp::panopainter::LegacyBrushPresetServices;
|
||||
|
||||
static std::vector<NodePanelBrushPreset*> s_panels;
|
||||
bool m_interacted = false;
|
||||
NodeBrushPresetItem* m_current = nullptr;
|
||||
NodeButtonCustom* m_btn_add;
|
||||
|
||||
Reference in New Issue
Block a user