summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/file.cpp77
-rw-r--r--src/file.h4
-rw-r--r--src/ui/dialog/save-template-dialog.cpp26
3 files changed, 83 insertions, 24 deletions
diff --git a/src/file.cpp b/src/file.cpp
index 958d2b620..47385c53e 100644
--- a/src/file.cpp
+++ b/src/file.cpp
@@ -1011,14 +1011,83 @@ sp_file_save_a_copy(Gtk::Window &parentWindow, gpointer /*object*/, gpointer /*d
* Save a copy of a document as template.
*/
void
-sp_file_save_template(Gtk::Window &parentWindow)
+sp_file_save_template(Gtk::Window &parentWindow, Glib::ustring name,
+ Glib::ustring author, Glib::ustring description, Glib::ustring keywords,
+ bool isDefault)
{
+
if (!SP_ACTIVE_DOCUMENT)
return;
- ///auto filename = Inkscape::IO::Resource::get_filename(TEMPLATES, "default.svg");
- auto filename = Inkscape::IO::Resource::get_path_ustring(USER, TEMPLATES, "default.svg");
- file_save(parentWindow, SP_ACTIVE_DOCUMENT, filename, Inkscape::Extension::db.get(".svg"), false, false, Inkscape::Extension::FILE_SAVE_METHOD_INKSCAPE_SVG);
+ auto document = SP_ACTIVE_DOCUMENT;
+
+ DocumentUndo::setUndoSensitive(document, false);
+
+ auto root = document->getReprRoot();
+ auto xml_doc = document->getReprDoc();
+
+ auto templateinfo_node = xml_doc->createElement("inkscape:_templateinfo");
+ Inkscape::GC::release(templateinfo_node);
+
+ auto element_node = xml_doc->createElement("inkscape:_name");
+ Inkscape::GC::release(element_node);
+
+ element_node->appendChild(xml_doc->createTextNode(name.c_str()));
+ templateinfo_node->appendChild(element_node);
+
+ element_node = xml_doc->createElement("inkscape:author");
+ Inkscape::GC::release(element_node);
+
+ element_node->appendChild(xml_doc->createTextNode(author.c_str()));
+ templateinfo_node->appendChild(element_node);
+
+ element_node = xml_doc->createElement("inkscape:_shortdesc");
+ Inkscape::GC::release(element_node);
+
+ element_node->appendChild(xml_doc->createTextNode(description.c_str()));
+ templateinfo_node->appendChild(element_node);
+
+ element_node = xml_doc->createElement("inkscape:date");
+ Inkscape::GC::release(element_node);
+
+ element_node->appendChild(xml_doc->createTextNode(
+ Glib::DateTime::create_now_local().format("%F").c_str()));
+ templateinfo_node->appendChild(element_node);
+
+ element_node = xml_doc->createElement("inkscape:_keywords");
+ Inkscape::GC::release(element_node);
+
+ element_node->appendChild(xml_doc->createTextNode(keywords.c_str()));
+ templateinfo_node->appendChild(element_node);
+
+ root->appendChild(templateinfo_node);
+
+ if (isDefault) {
+
+ auto filename = Inkscape::IO::Resource::get_path_ustring(USER,
+ TEMPLATES, "default.svg");
+ file_save(parentWindow, document, filename,
+ Inkscape::Extension::db.get(".svg"), false, false,
+ Inkscape::Extension::FILE_SAVE_METHOD_INKSCAPE_SVG);
+ }
+
+ name += ".svg";
+
+ auto filename = Inkscape::IO::Resource::get_path_ustring(USER, TEMPLATES,
+ name.c_str());
+ file_save(parentWindow, document, filename,
+ Inkscape::Extension::db.get(".svg"), false, false,
+ Inkscape::Extension::FILE_SAVE_METHOD_INKSCAPE_SVG);
+
+ auto nodeToRemove = sp_repr_lookup_name(root, "inkscape:_templateinfo");
+
+ if (nodeToRemove != NULL){
+
+ sp_repr_unparent(nodeToRemove);
+ delete nodeToRemove;
+ }
+
+ DocumentUndo::setUndoSensitive(document, true);
}
diff --git a/src/file.h b/src/file.h
index 010bff94f..9cd22d744 100644
--- a/src/file.h
+++ b/src/file.h
@@ -114,7 +114,9 @@ bool sp_file_save_a_copy (Gtk::Window &parentWindow, void* object, void* data);
* Save a copy of a document as template.
*/
void
-sp_file_save_template(Gtk::Window &parentWindow);
+sp_file_save_template(Gtk::Window &parentWindow, Glib::ustring name,
+ Glib::ustring author, Glib::ustring description, Glib::ustring keywords,
+ bool isDefault);
/**
* Saves the given document. Displays a file select dialog
diff --git a/src/ui/dialog/save-template-dialog.cpp b/src/ui/dialog/save-template-dialog.cpp
index e60648fd5..cf37feb3b 100644
--- a/src/ui/dialog/save-template-dialog.cpp
+++ b/src/ui/dialog/save-template-dialog.cpp
@@ -14,7 +14,8 @@ namespace UI {
namespace Dialog {
//TODO: Tooltips
- //TODO: Save data
+//TODO: Sanitize filename
+//TODO: Check empty fields
SaveTemplate::SaveTemplate() :
Gtk::Dialog(_("Save Document as Template")),
@@ -72,15 +73,9 @@ void SaveTemplate::on_name_changed() {
void SaveTemplate::save_template(Gtk::Window &parentWindow) {
- // std::cout
- // << "Save template: "
- // << name_text.get_text() << " "
- // << author_text.get_text() << " "
- // << description_text.get_text() << " "
- // << keywords_text.get_text() << " "
- // << is_default_template.get_active() << std::endl;
-
- sp_file_save_template(parentWindow);
+ sp_file_save_template(parentWindow, name_text.get_text(),
+ author_text.get_text(), description_text.get_text(),
+ keywords_text.get_text(), is_default_template.get_active());
}
void SaveTemplate::save_document_as_template(Gtk::Window &parentWindow) {
@@ -89,17 +84,10 @@ void SaveTemplate::save_document_as_template(Gtk::Window &parentWindow) {
auto result = dialog.run();
- switch (result) {
-
- case Gtk::RESPONSE_OK:
+ if (result == Gtk::RESPONSE_OK){
- dialog.save_template(parentWindow);
- break;
-
- default:
- break;
+ dialog.save_template(parentWindow);
}
-
}
}