X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Finstance.cpp;h=65c63d8f4fa3eba10079c9f60bcb2d481b394cb4;hb=5cc3e6061bf5e9f75405cfbf99219b776580e4d1;hp=2d4ecdb918f2a185c136cb14b9f869e5f615efb7;hpb=9fc17cc46bd63a7508b82c967801a09be882fe57;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/instance.cpp b/synfig-studio/trunk/src/gtkmm/instance.cpp index 2d4ecdb..65c63d8 100644 --- a/synfig-studio/trunk/src/gtkmm/instance.cpp +++ b/synfig-studio/trunk/src/gtkmm/instance.cpp @@ -53,6 +53,7 @@ #include "widget_waypointmodel.h" #include #include "iconcontroller.h" +#include "workarea.h" #include #include #include @@ -199,7 +200,7 @@ studio::Instance::save_as(const synfig::String &file_name) list >::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(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(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(¶mmenu, param_list,synfigapp::Action::CATEGORY_VALUEDESC|synfigapp::Action::CATEGORY_VALUENODE); + add_actions_to_menu(¶mmenu, param_list,categories); else - add_actions_to_menu(¶mmenu, param_list2,param_list,synfigapp::Action::CATEGORY_VALUEDESC|synfigapp::Action::CATEGORY_VALUENODE); + add_actions_to_menu(¶mmenu, 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())) {