Working on 1796971: Make dialog_save_as() return a bool saying whether it saved anyth...
[synfig.git] / synfig-studio / trunk / src / gtkmm / instance.cpp
index 58ef103..fc45528 100644 (file)
@@ -185,17 +185,6 @@ Instance::set_redo_status(bool x)
 }
 
 bool
-studio::Instance::save_as(const synfig::String &file_name)const
-{
-       if(synfigapp::Instance::save_as(file_name))
-       {
-               App::add_recent_file(file_name);
-               return true;
-       }
-       return false;
-}
-
-bool
 studio::Instance::save_as(const synfig::String &file_name)
 {
        if(synfigapp::Instance::save_as(file_name))
@@ -209,21 +198,19 @@ studio::Instance::save_as(const synfig::String &file_name)
 bool
 studio::Instance::save()
 {
-       if(basename(get_file_name()).find("untitled")==0)
-       {
-               dialog_save_as();
-               return true;
-       }
+       // the filename will be set to "Synfig Animation 1" or some such when first created
+       // and will be changed to an absolute path once it has been saved
+       // so if it still begins with "Synfig Animation " then we need to ask where to save it
+       if(get_file_name().find(DEFAULT_FILENAME_PREFIX)==0)
+               return dialog_save_as();
 
        return synfigapp::Instance::save();
-
 }
 
-void
+bool
 studio::Instance::dialog_save_as()
 {
-       string filename="*.sif";
-
+       string filename=basename(get_file_name());
        Canvas::Handle canvas(get_canvas());
 
        {
@@ -244,7 +231,7 @@ studio::Instance::dialog_save_as()
                                                "other files first before trying to use \"SaveAs\"."
                                        );
 
-                                       return;
+                                       return false;
                                }
                                if(parent_layer)
                                        break;
@@ -252,15 +239,22 @@ 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_save_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
                if(find(filename.begin(),filename.end(),'*')!=filename.end())
                        continue;
 
-               if(find(filename.begin(),filename.end(),'.')==filename.end())
-                       filename+=".sif";
+               std::string base = basename(filename);
+               if(find(base.begin(),base.end(),'.')==base.end())
+                       filename+=".sifz";
 
                try
                {
@@ -290,10 +284,12 @@ studio::Instance::dialog_save_as()
                }
 
                if(save_as(filename))
-                       break;
+                       return true;
 
                App::dialog_error_blocking("SaveAs - Error","Unable to save file");
        }
+
+       return false;
 }
 
 void
@@ -617,7 +613,7 @@ bool
 Instance::safe_revert()
 {
        if(synfigapp::Instance::get_action_count())
-               if(!App::dialog_yes_no(_("Revert to saved"), _("You will loose any changes you have made since your last save.\nAre you sure?")))
+               if(!App::dialog_yes_no(_("Revert to saved"), _("You will lose any changes you have made since your last save.\nAre you sure?")))
                        return false;
        revert();
        return true;