From f2ab0fa1527c64eacc741d3726de7458b5df9b3a Mon Sep 17 00:00:00 2001 From: kidproto Date: Tue, 22 Aug 2006 21:24:21 +0000 Subject: [PATCH] I added Johan's badass patch for save a copy with the features I requested. Now it all works quite well! Great! --- src/extension/output.cpp | 29 +---------------------------- src/extension/output.h | 2 ++ src/extension/system.cpp | 21 +++++++++++++++------ src/file.cpp | 14 +++++++++++--- src/file.h | 3 ++- src/ui/dialog/filedialog.cpp | 9 +++++++++ src/ui/dialog/filedialog.h | 6 ++++++ src/verbs.cpp | 2 ++ src/verbs.h | 3 +++ 9 files changed, 51 insertions(+), 38 deletions(-) diff --git a/src/extension/output.cpp b/src/extension/output.cpp index b0f254a9c..3f8c17fb1 100644 --- a/src/extension/output.cpp +++ b/src/extension/output.cpp @@ -2,6 +2,7 @@ * Authors: * Ted Gould * + * Copyright (C) 2006 Johan Engelen * Copyright (C) 2002-2004 Authors * * Released under GNU GPL, read the file 'COPYING' for more information @@ -206,45 +207,17 @@ Output::prefs (void) only used at runtime and shouldn't be saved. One that may surprise people is the output extension. This is not saved so that the IDs could be changed, and old files will still work properly. - - After the file is saved by the implmentation the output_extension - and dataloss variables are recreated. The output_extension is set - to this extension so that future saves use this extension. Dataloss - is set so that a warning will occur on closing the document that - there may be some dataloss from this extension. */ void Output::save (SPDocument * doc, const gchar * uri) { - bool modified = false; - Inkscape::XML::Node * repr = sp_document_repr_root(doc); - - gboolean saved = sp_document_get_undo_sensitive(doc); - sp_document_set_undo_sensitive (doc, FALSE); - //repr->setAttribute("inkscape:output_extension", NULL); - repr->setAttribute("inkscape:dataloss", NULL); - if (repr->attribute("sodipodi:modified") != NULL) - modified = true; - repr->setAttribute("sodipodi:modified", NULL); - sp_document_set_undo_sensitive (doc, saved); - try { imp->save(this, doc, uri); } catch (...) { - if (modified) - repr->setAttribute("sodipodi:modified", "true"); throw; } - saved = sp_document_get_undo_sensitive(doc); - sp_document_set_undo_sensitive (doc, FALSE); - //repr->setAttribute("inkscape:output_extension", get_id()); - if (dataloss) { - repr->setAttribute("inkscape:dataloss", "true"); - } - sp_document_set_undo_sensitive (doc, saved); - return; } diff --git a/src/extension/output.h b/src/extension/output.h index 41bca6a7b..f6f16fb85 100644 --- a/src/extension/output.h +++ b/src/extension/output.h @@ -2,6 +2,7 @@ * Authors: * Ted Gould * + * Copyright (C) 2006 Johan Engelen * Copyright (C) 2002-2004 Authors * * Released under GNU GPL, read the file 'COPYING' for more information @@ -41,6 +42,7 @@ public: gchar * get_extension(void); gchar * get_filetypename(void); gchar * get_filetypetooltip(void); + bool causes_dataloss(void) { return dataloss; }; }; } } /* namespace Inkscape, Extension */ diff --git a/src/extension/system.cpp b/src/extension/system.cpp index 3a8a54214..41d6e7513 100644 --- a/src/extension/system.cpp +++ b/src/extension/system.cpp @@ -7,6 +7,7 @@ * Authors: * Ted Gould * + * Copyright (C) 2006 Johan Engelen * Copyright (C) 2002-2004 Authors * * Released under GNU GPL, read the file 'COPYING' for more information @@ -244,17 +245,25 @@ save(Extension *key, SPDocument *doc, gchar const *filename, bool setextension, throw Output::no_overwrite(); } - // if 'official' save the filename and extension for future saves. + omod->save(doc, fileName); + if (official) { // save the filename for next use sp_document_set_uri(doc, fileName); - // also save the extension for next use - Inkscape::XML::Node *repr = sp_document_repr_root(doc); - repr->setAttribute("inkscape:output_extension", omod->get_id()); + gboolean saved = sp_document_get_undo_sensitive(doc); + // also save the extension for next use + Inkscape::XML::Node *repr = sp_document_repr_root(doc); + sp_document_set_undo_sensitive (doc, FALSE); + repr->setAttribute("inkscape:output_extension", omod->get_id()); + // set the "dataloss" attribute if the chosen extension is lossy + repr->setAttribute("inkscape:dataloss", NULL); + if ( omod->causes_dataloss() ) { + repr->setAttribute("inkscape:dataloss", "true"); + } + repr->setAttribute("sodipodi:modified", NULL); + sp_document_set_undo_sensitive (doc, saved); } - omod->save(doc, fileName); - g_free(fileName); return; } diff --git a/src/file.cpp b/src/file.cpp index 4bb5763b6..de8ab2b5d 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -8,9 +8,10 @@ * Chema Celorio * bulia byak * + * Copyright (C) 2006 Johan Engelen * Copyright (C) 1999-2005 Authors - * Copyright (C) 2001-2002 Ximian, Inc. * Copyright (C) 2004 David Turner + * Copyright (C) 2001-2002 Ximian, Inc. * * Released under GNU GPL, read the file 'COPYING' for more information */ @@ -600,15 +601,22 @@ sp_file_save_dialog(SPDocument *doc, bool is_copy) save_loc = save_loc_local; //# Show the SaveAs dialog + char const * dialog_title; + if (is_copy) { + dialog_title = (char const *) _("Select file to save a copy to"); + } else { + dialog_title = (char const *) _("Select file to save to"); + } if (!saveDialogInstance) saveDialogInstance = Inkscape::UI::Dialog::FileSaveDialog::create( save_loc, Inkscape::UI::Dialog::SVG_TYPES, - is_copy ? (char const *) _("Select file to save copy to") : (char const *) _("Select file to save to"), + (char const *) _("Select file to save to"), default_extension ); - + saveDialogInstance->change_title(dialog_title); + bool success = saveDialogInstance->show(); if (!success) return success; diff --git a/src/file.h b/src/file.h index 4e128f161..18e4068a1 100644 --- a/src/file.h +++ b/src/file.h @@ -8,8 +8,9 @@ * Lauris Kaplinski * Chema Celorio * - * Copyright (C) 1999-2002 Authors + * Copyright (C) 2006 Johan Engelen * Copyright (C) 2001-2002 Ximian, Inc. + * Copyright (C) 1999-2002 Authors * * Released under GNU GPL, read the file 'COPYING' for more information */ diff --git a/src/ui/dialog/filedialog.cpp b/src/ui/dialog/filedialog.cpp index 0e8a8a07b..3417ba06c 100644 --- a/src/ui/dialog/filedialog.cpp +++ b/src/ui/dialog/filedialog.cpp @@ -5,6 +5,7 @@ * Bob Jamison * Other dudes from The Inkscape Organization * + * Copyright (C) 2006 Johan Engelen * Copyright (C) 2004-2006 The Inkscape Organization * * Released under GNU GPL, read the file 'COPYING' for more information @@ -1136,6 +1137,8 @@ public: Glib::ustring getFilename(); + void change_title(const Glib::ustring& title); + private: @@ -1510,6 +1513,12 @@ FileSaveDialogImpl::getFilename() } +void +FileSaveDialogImpl::change_title(const Glib::ustring& title) +{ + this->set_title(title); +} + diff --git a/src/ui/dialog/filedialog.h b/src/ui/dialog/filedialog.h index ace336177..daefc9387 100644 --- a/src/ui/dialog/filedialog.h +++ b/src/ui/dialog/filedialog.h @@ -8,6 +8,7 @@ * Bob Jamison * Inkscape Guys * + * Copyright (C) 2006 Johan Engelen * Copyright (C) 2004-2006, Inkscape Authors * * Released under GNU GPL, read the file 'COPYING' for more information @@ -166,6 +167,11 @@ public: virtual Glib::ustring getFilename () =0; + /** + * Change the window title. + */ + virtual void change_title(const Glib::ustring& title) =0; + }; //FileSaveDialog diff --git a/src/verbs.cpp b/src/verbs.cpp index d30cba2b9..e32727d2d 100644 --- a/src/verbs.cpp +++ b/src/verbs.cpp @@ -17,6 +17,8 @@ * David Turner * bulia byak * + * Copyright (C) 2006 Johan Engelen + * Copyright (C) (date unspecified) Authors * This code is in public domain. */ diff --git a/src/verbs.h b/src/verbs.h index dacb3ec51..2055ac2ee 100644 --- a/src/verbs.h +++ b/src/verbs.h @@ -9,6 +9,9 @@ * Ted Gould * David Yip * + * Copyright (C) 2006 Johan Engelen + * Copyright (C) (date unspecified) Authors + * This code is in public domain if done by Lauris * This code is GPL if done by Ted or David */ -- 2.30.2