117 lines
3.7 KiB
C++
117 lines
3.7 KiB
C++
#include "pch.h"
|
|
|
|
#include "legacy_document_open_services.h"
|
|
|
|
#include "app.h"
|
|
#include "legacy_brush_package_import_services.h"
|
|
#include "legacy_canvas_view_services.h"
|
|
#include "legacy_history_services.h"
|
|
#include "log.h"
|
|
#include "node_panel_brush.h"
|
|
#include "node_panel_layer.h"
|
|
|
|
namespace pp::panopainter {
|
|
namespace {
|
|
|
|
void open_legacy_project(App& app, const pp::app::DocumentOpenRoute& route)
|
|
{
|
|
app.doc_name = route.name;
|
|
app.doc_dir = route.directory;
|
|
app.doc_path = route.path;
|
|
const auto reset_status = execute_legacy_canvas_camera_reset(app);
|
|
if (!reset_status.ok())
|
|
LOG("Project open camera reset failed: %s", reset_status.message);
|
|
app.layers->clear();
|
|
app.canvas->m_canvas->project_open(route.path, [&app](bool success) {
|
|
if (success)
|
|
{
|
|
app.title_update();
|
|
for (std::size_t layer_index = 0; layer_index < app.canvas->m_canvas->m_layers.size(); ++layer_index)
|
|
{
|
|
auto layer = app.layers->add_layer(app.canvas->m_canvas->m_layers[layer_index]->m_name.c_str(), false);
|
|
layer->m_visibility->set_value(app.canvas->m_canvas->m_layers[layer_index]->m_visible);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
app.message_box(
|
|
"Open Document Error",
|
|
"There was an error opening the document.\n"
|
|
"It may be inaccessible or corrupted.");
|
|
}
|
|
});
|
|
pp::panopainter::clear_legacy_history();
|
|
}
|
|
|
|
class LegacyDocumentOpenServices final : public pp::app::DocumentOpenServices {
|
|
public:
|
|
explicit LegacyDocumentOpenServices(App& app) noexcept
|
|
: app_(app)
|
|
{
|
|
}
|
|
|
|
void prompt_import_abr(const pp::app::DocumentOpenRoute& route) override
|
|
{
|
|
auto* app = &app_;
|
|
auto mb = app_.message_box("Import ABR", "Would you like to import the brushes?", true);
|
|
mb->on_submit = [app, path = route.path](Node* target) {
|
|
const auto status = pp::panopainter::execute_legacy_brush_package_import(
|
|
*app,
|
|
pp::app::BrushPackageImportKind::abr,
|
|
path);
|
|
if (!status.ok())
|
|
LOG("ABR import failed: %s", status.message);
|
|
target->destroy();
|
|
};
|
|
}
|
|
|
|
void prompt_import_ppbr(const pp::app::DocumentOpenRoute& route) override
|
|
{
|
|
auto* app = &app_;
|
|
auto mb = app_.message_box("Import PPBR", "Would you like to import the brushes?", true);
|
|
mb->on_submit = [app, path = route.path](Node* target) {
|
|
const auto status = pp::panopainter::execute_legacy_brush_package_import(
|
|
*app,
|
|
pp::app::BrushPackageImportKind::ppbr,
|
|
path);
|
|
if (!status.ok())
|
|
LOG("PPBR import failed: %s", status.message);
|
|
target->destroy();
|
|
};
|
|
}
|
|
|
|
void open_project_now(const pp::app::DocumentOpenRoute& route) override
|
|
{
|
|
open_legacy_project(app_, route);
|
|
}
|
|
|
|
void prompt_discard_unsaved_project(const pp::app::DocumentOpenRoute& route) override
|
|
{
|
|
auto* app = &app_;
|
|
auto mb = app_.message_box(
|
|
"Unsaved document",
|
|
"Do you want to close the unsaved document before opening the file?",
|
|
true);
|
|
mb->on_submit = [app, route](Node* target) {
|
|
open_legacy_project(*app, route);
|
|
target->destroy();
|
|
};
|
|
}
|
|
|
|
private:
|
|
App& app_;
|
|
};
|
|
|
|
} // namespace
|
|
|
|
pp::foundation::Status execute_legacy_document_open_plan(
|
|
App& app,
|
|
pp::app::DocumentOpenPlanAction action,
|
|
const pp::app::DocumentOpenRoute& route)
|
|
{
|
|
LegacyDocumentOpenServices services(app);
|
|
return pp::app::execute_document_open_plan(action, route, services);
|
|
}
|
|
|
|
} // namespace pp::panopainter
|