Include "general.h" so the strings get translated properly.
[synfig.git] / synfig-studio / trunk / src / gtkmm / instance.cpp
index 2d4ecdb..65c63d8 100644 (file)
@@ -53,6 +53,7 @@
 #include "widget_waypointmodel.h"
 #include <gtkmm/actiongroup.h>
 #include "iconcontroller.h"
+#include "workarea.h"
 #include <sys/stat.h>
 #include <errno.h>
 #include <ETL/stringf>
@@ -199,7 +200,7 @@ studio::Instance::save_as(const synfig::String &file_name)
                list<handle<CanvasView> >::iterator iter;
                for(iter=canvas_view_list().begin();iter!=canvas_view_list().end();iter++)
                        (*iter)->render_settings.set_entry_filename();
-               App::add_recent_file(file_name);
+               App::add_recent_file(etl::handle<Instance>(this));
                return true;
        }
        return false;
@@ -214,10 +215,8 @@ studio::Instance::open()
 Instance::Status
 studio::Instance::save()
 {
-       // 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)
+       // if we don't have a real filename yet then we need to ask where to save it
+       if (!has_real_filename())
        {
                if (dialog_save_as())
                        return STATUS_OK;
@@ -226,12 +225,24 @@ studio::Instance::save()
        }
 
        if (synfigapp::Instance::save())
+       {
+               App::add_recent_file(etl::handle<Instance>(this));
                return STATUS_OK;
+       }
 
        App::dialog_error_blocking("Save - Error","Unable to save to '" + get_file_name() + "'");
        return STATUS_ERROR;
 }
 
+// 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 don't have a real filename yet
+bool
+studio::Instance::has_real_filename()
+{
+       return get_file_name().find(DEFAULT_FILENAME_PREFIX) != 0;
+}
+
 bool
 studio::Instance::dialog_save_as()
 {
@@ -264,7 +275,7 @@ studio::Instance::dialog_save_as()
                }
        }
 
-       if (get_file_name().find(DEFAULT_FILENAME_PREFIX) != 0)
+       if (has_real_filename())
                filename = absolute_path(filename);
 
        // show the canvas' name if it has one, else its ID
@@ -992,7 +1003,7 @@ Instance::process_action(synfig::String name, synfigapp::Action::ParamList param
 }
 
 void
-Instance::make_param_menu(Gtk::Menu *menu,synfig::Canvas::Handle canvas, synfigapp::ValueDesc value_desc, float location)
+Instance::make_param_menu(Gtk::Menu *menu,synfig::Canvas::Handle canvas, synfigapp::ValueDesc value_desc, float location, bool bezier)
 {
        Gtk::Menu& parammenu(*menu);
 
@@ -1055,10 +1066,24 @@ Instance::make_param_menu(Gtk::Menu *menu,synfig::Canvas::Handle canvas, synfiga
                parammenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::Stock::CONVERT,*convert_menu));
        }
 
+       synfigapp::Action::Category categories = synfigapp::Action::CATEGORY_VALUEDESC|synfigapp::Action::CATEGORY_VALUENODE;
+       if (bezier)
+       {
+               categories = categories|synfigapp::Action::CATEGORY_BEZIER;
+
+               const DuckList selected_ducks(find_canvas_view(canvas)->get_work_area()->get_selected_ducks());
+               for(DuckList::const_iterator iter=selected_ducks.begin();iter!=selected_ducks.end();++iter)
+               {
+                       synfigapp::ValueDesc value_desc((*iter)->get_value_desc());
+                       if(value_desc.is_valid())
+                               param_list.add("selected_value_desc",value_desc);
+               }
+       }
+
        if(param_list2.empty())
-               add_actions_to_menu(&parammenu, param_list,synfigapp::Action::CATEGORY_VALUEDESC|synfigapp::Action::CATEGORY_VALUENODE);
+               add_actions_to_menu(&parammenu, param_list,categories);
        else
-               add_actions_to_menu(&parammenu, param_list2,param_list,synfigapp::Action::CATEGORY_VALUEDESC|synfigapp::Action::CATEGORY_VALUENODE);
+               add_actions_to_menu(&parammenu, param_list2,param_list,categories);
 
        if(value_desc.get_value_type()==ValueBase::TYPE_BLINEPOINT && value_desc.is_value_node() && ValueNode_Composite::Handle::cast_dynamic(value_desc.get_value_node()))
        {