When prompting for 'Save As...', show the name of the root canvas being saved in...
[synfig.git] / synfig-studio / trunk / src / gtkmm / instance.cpp
index 3c10dae..da88e80 100644 (file)
@@ -1,8 +1,8 @@
 /* === S Y N F I G ========================================================= */
-/*!    \file instance.cpp
+/*!    \file gtkmm/instance.cpp
 **     \brief writeme
 **
-**     $Id: instance.cpp,v 1.2 2005/01/13 18:37:30 darco Exp $
+**     $Id$
 **
 **     \legal
 **     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
@@ -50,6 +50,8 @@
 #include "widget_waypointmodel.h"
 #include <gtkmm/actiongroup.h>
 #include "iconcontroler.h"
+#include <sys/stat.h>
+#include <errno.h>
 
 #endif
 
@@ -250,7 +252,13 @@ studio::Instance::dialog_save_as()
                }
        }
 
-       while(App::dialog_saveas_file("SaveAs", filename))
+       // show the canvas' name if it has one, else its ID
+       while(App::dialog_saveas_file(_("Choose a Filename to Save As") +
+                                                                 String(" (") +
+                                                                 (canvas->get_name().empty()
+                                                                  ? canvas->get_id()
+                                                                  : canvas->get_name()) +
+                                                                 ") ...", filename))
        {
                // If the filename still has wildcards, then we should
                // continue looking for the file we want
@@ -274,6 +282,19 @@ studio::Instance::dialog_save_as()
                        continue;
                }
 
+               {
+                       struct stat     s;
+                       // if stat() succeeds, or it fails with something other than 'file doesn't exist', the file exists
+                       // if the file exists and the user doesn't want to overwrite it, keep prompting for a filename
+                       if ((stat(filename.c_str(), &s) != -1 || errno != ENOENT) &&
+                               !App::dialog_yes_no("File exists",
+                                                                       "A file named '" +
+                                                                       filename +
+                                                                       "' already exists.\n\n"
+                                                                       "Do you want to replace it with the file you are saving?"))
+                               continue;
+               }
+
                if(save_as(filename))
                        break;
 
@@ -574,7 +595,7 @@ Instance::_revert(Instance *instance)
        if(canvas->count()!=1)
        {
                one_moment.hide();
-               App::dialog_error_blocking(_("Error: Revert Failed"),_("The revert operation has failed. This can be due to it being\nreferenced by another composition that is already open, or\nbecause of an internal error in SYNFIG Studio. Try closing any\ncompositions that might reference this composition and try\nagain, or restart SYNFIG studio."));
+               App::dialog_error_blocking(_("Error: Revert Failed"),_("The revert operation has failed. This can be due to it being\nreferenced by another composition that is already open, or\nbecause of an internal error in Synfig Studio. Try closing any\ncompositions that might reference this composition and try\nagain, or restart Synfig Studio."));
                one_moment.show();
        }
        canvas=0;