add save dialog to specify file name

This commit is contained in:
2017-08-11 00:04:54 +01:00
parent 178c944df1
commit 9be2e8e147
5 changed files with 88 additions and 9 deletions

View File

@@ -218,6 +218,27 @@
</border> </border>
</border> </border>
</layout> </layout>
<!-- Save Dialog Popup -->
<layout id="dialog-save">
<border positioning="absolute" position="0 0" color=".4 .4 .4 .8" width="100%" height="100%" align="center" justify="center">
<border thickness="1" border-color=".2" pad="3">
<border width="400" height="30" color=".2 .2 .2 .9" dir="row" align="center" justify="center">
<text text="Save Pano Project" font-face="arial" font-size="11"></text>
</border>
<border width="400" color="0 0 0 .9" pad="10" dir="col">
<node dir="row">
<text text="Project name: " font-face="arial" font-size="11"/>
<text-input id="txt-input" width="100" height="20" color=".3"/>
</node>
<node height="40" grow="1" dir="row" align="flex-end" justify="flex-end">
<button id="btn-ok" text="Save Project" width="100" height="30" margin="0 10 0 0"/>
<button id="btn-cancel" text="Cancel" width="60" height="30" pad="10"/>
</node>
</border>
</border>
</border>
</layout>
<!--settings window--> <!--settings window-->
<layout id="settings"> <layout id="settings">

View File

@@ -283,7 +283,20 @@ void App::initLayout()
button->on_click = [this,button](Node*) { button->on_click = [this,button](Node*) {
if (canvas) if (canvas)
{ {
canvas->m_canvas->project_save(data_path); auto dialog = std::make_shared<NodeDialogSave>();
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();
};
} }
}; };
} }

View File

@@ -1000,12 +1000,12 @@ void ui::Canvas::export_anim(std::string data_path)
void ui::Canvas::project_save(std::string data_path) void ui::Canvas::project_save(std::string data_path)
{ {
static char name[128]; // static char name[128];
sprintf(name, "%s/latlong.pano", data_path.c_str()); // sprintf(name, "%s/latlong.pano", data_path.c_str());
FILE* fp = fopen(name, "wb"); FILE* fp = fopen(data_path.c_str(), "wb");
if (!fp) if (!fp)
{ {
LOG("cannot write project to %s", name); LOG("cannot write project to %s", data_path.c_str());
return; return;
} }
@@ -1059,7 +1059,7 @@ void ui::Canvas::project_save(std::string data_path)
} }
} }
fclose(fp); 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) void ui::Canvas::project_open(std::string data_path)

View File

@@ -66,9 +66,6 @@ void NodeDialogOpen::init_controls()
void NodeDialogOpen::loaded() void NodeDialogOpen::loaded()
{ {
// ui::Image thumb = ui::Canvas::I->thumbnail_read(data_path);
// auto image_tex = find<NodeImageTexture>("thumb-tex");
// image_tex->tex.create(thumb);
} }
////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////
@@ -126,4 +123,37 @@ kEventResult NodeDialogOpenItem::handle_event(Event* e)
break; break;
} }
return kEventResult::Consumed; return kEventResult::Consumed;
}
//////////////////////////////////////////////////////////////////
Node* NodeDialogSave::clone_instantiate() const
{
return new NodeDialogSave;
}
void NodeDialogSave::clone_finalize(Node* dest) const
{
NodeDialogSave* n = static_cast<NodeDialogSave*>(dest);
n->init_controls();
}
void NodeDialogSave::init()
{
auto tpl = static_cast<const NodeBorder*>(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<NodeButton>("btn-ok");
btn_cancel = find<NodeButton>("btn-cancel");
btn_cancel->on_click = [this](Node*) {
destroy();
};
input = find<NodeTextInput>("txt-input");
}
void NodeDialogSave::loaded()
{
} }

View File

@@ -3,6 +3,7 @@
#include "node_button.h" #include "node_button.h"
#include "node_image_texture.h" #include "node_image_texture.h"
#include "node_text.h" #include "node_text.h"
#include "node_text_input.h"
class NodeDialogOpenItem : public NodeBorder class NodeDialogOpenItem : public NodeBorder
{ {
@@ -38,3 +39,17 @@ public:
void init_controls(); void init_controls();
virtual void loaded() override; 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;
};