diff --git a/data/layout.xml b/data/layout.xml
index d5a7b0b..7acc790 100644
--- a/data/layout.xml
+++ b/data/layout.xml
@@ -218,6 +218,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/engine/app_layout.cpp b/engine/app_layout.cpp
index a7aba30..50866bd 100644
--- a/engine/app_layout.cpp
+++ b/engine/app_layout.cpp
@@ -283,7 +283,20 @@ void App::initLayout()
button->on_click = [this,button](Node*) {
if (canvas)
{
- canvas->m_canvas->project_save(data_path);
+ auto dialog = std::make_shared();
+ dialog->m_manager = &layout;
+ dialog->init();
+ dialog->create();
+ dialog->loaded();
+
+ layout[main_id]->add_child(dialog);
+ layout[main_id]->update();
+
+ dialog->btn_ok->on_click = [this, dialog](Node*)
+ {
+ canvas->m_canvas->project_save(data_path + "/" + dialog->input->m_string + ".pano");
+ dialog->destroy();
+ };
}
};
}
diff --git a/engine/canvas.cpp b/engine/canvas.cpp
index 5553980..3f12561 100644
--- a/engine/canvas.cpp
+++ b/engine/canvas.cpp
@@ -1000,12 +1000,12 @@ void ui::Canvas::export_anim(std::string data_path)
void ui::Canvas::project_save(std::string data_path)
{
- static char name[128];
- sprintf(name, "%s/latlong.pano", data_path.c_str());
- FILE* fp = fopen(name, "wb");
+// static char name[128];
+// sprintf(name, "%s/latlong.pano", data_path.c_str());
+ FILE* fp = fopen(data_path.c_str(), "wb");
if (!fp)
{
- LOG("cannot write project to %s", name);
+ LOG("cannot write project to %s", data_path.c_str());
return;
}
@@ -1059,7 +1059,7 @@ void ui::Canvas::project_save(std::string data_path)
}
}
fclose(fp);
- LOG("project saved to %s", name);
+ LOG("project saved to %s", data_path.c_str());
}
void ui::Canvas::project_open(std::string data_path)
diff --git a/engine/node_dialog_open.cpp b/engine/node_dialog_open.cpp
index 6811d48..ab35ebb 100644
--- a/engine/node_dialog_open.cpp
+++ b/engine/node_dialog_open.cpp
@@ -66,9 +66,6 @@ void NodeDialogOpen::init_controls()
void NodeDialogOpen::loaded()
{
-// ui::Image thumb = ui::Canvas::I->thumbnail_read(data_path);
-// auto image_tex = find("thumb-tex");
-// image_tex->tex.create(thumb);
}
//////////////////////////////////////////////////////////////////
@@ -126,4 +123,37 @@ kEventResult NodeDialogOpenItem::handle_event(Event* e)
break;
}
return kEventResult::Consumed;
+}
+
+//////////////////////////////////////////////////////////////////
+
+Node* NodeDialogSave::clone_instantiate() const
+{
+ return new NodeDialogSave;
+}
+void NodeDialogSave::clone_finalize(Node* dest) const
+{
+ NodeDialogSave* n = static_cast(dest);
+ n->init_controls();
+}
+void NodeDialogSave::init()
+{
+ auto tpl = static_cast(init_template("dialog-save"));
+ m_color = tpl->m_color;
+ m_border_color = tpl->m_border_color;
+ m_thinkness = tpl->m_thinkness;
+ init_controls();
+}
+void NodeDialogSave::init_controls()
+{
+ btn_ok = find("btn-ok");
+ btn_cancel = find("btn-cancel");
+ btn_cancel->on_click = [this](Node*) {
+ destroy();
+ };
+ input = find("txt-input");
+}
+void NodeDialogSave::loaded()
+{
+
}
\ No newline at end of file
diff --git a/engine/node_dialog_open.h b/engine/node_dialog_open.h
index e3c7326..d04eb46 100644
--- a/engine/node_dialog_open.h
+++ b/engine/node_dialog_open.h
@@ -3,6 +3,7 @@
#include "node_button.h"
#include "node_image_texture.h"
#include "node_text.h"
+#include "node_text_input.h"
class NodeDialogOpenItem : public NodeBorder
{
@@ -38,3 +39,17 @@ public:
void init_controls();
virtual void loaded() override;
};
+
+class NodeDialogSave : public NodeBorder
+{
+public:
+ NodeButton* btn_cancel;
+ NodeButton* btn_ok;
+ NodeTextInput* input;
+ std::string selected_path;
+ virtual Node* clone_instantiate() const override;
+ virtual void clone_finalize(Node* dest) const override;
+ virtual void init() override;
+ void init_controls();
+ virtual void loaded() override;
+};