X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Flayeractionmanager.cpp;h=34d7f205265510e1324400eeaac00d73f08d60bd;hb=a1373cb0b813709f46c5d688b554ef5db7ea59ff;hp=954b85814267ff93b2411089a7767d45b3561af9;hpb=6058f1f8af684257c314a78cc0a24ced57bf3168;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/layeractionmanager.cpp b/synfig-studio/trunk/src/gtkmm/layeractionmanager.cpp index 954b858..34d7f20 100644 --- a/synfig-studio/trunk/src/gtkmm/layeractionmanager.cpp +++ b/synfig-studio/trunk/src/gtkmm/layeractionmanager.cpp @@ -32,6 +32,7 @@ #include "layeractionmanager.h" #include "layertree.h" +#include #include #include "instance.h" #include @@ -288,16 +289,11 @@ LayerActionManager::refresh() action_group_->add(Gtk::Action::create( "select-all-child-layers", Gtk::StockID("synfig-select_all_child_layers"), - _("Select All Child Layers") - ), - sigc::bind( - sigc::mem_fun( - *layer_tree_, - &studio::LayerTree::select_all_children_layers - ), - Layer::LooseHandle(layer) - ) - ); + _("Select All Child Layers"), + _("Select All Child Layers")), + sigc::bind(sigc::mem_fun(*layer_tree_, + &studio::LayerTree::select_all_children_layers), + Layer::LooseHandle(layer))); ui_info+=""; ui_toolbar_info+=""; } @@ -430,26 +426,59 @@ LayerActionManager::paste() depth++; // automatically export the Index parameter of Duplicate layers when pasting - if (layer->get_name() == "duplicate") - for (int i = 1; ; i++) - { - String name = strprintf(_("Index %d"), i); - try - { - canvas->find_value_node(name); - } - catch (Exception::IDNotFound x) - { - get_canvas_interface()->add_value_node(layer->dynamic_param_list().find("index")->second, name); - break; - } - } + int index = 1; + export_dup_nodes(layer, canvas, index); } get_canvas_interface()->get_selection_manager()->clear_selected_layers(); get_canvas_interface()->get_selection_manager()->set_selected_layers(layer_selection); } void +LayerActionManager::export_dup_nodes(synfig::Layer::Handle layer, Canvas::Handle canvas, int &index) +{ + // automatically export the Index parameter of Duplicate layers when pasting + if (layer->get_name() == "duplicate") + while (true) + { + String name = strprintf(_("Index %d"), index++); + try + { + canvas->find_value_node(name); + } + catch (Exception::IDNotFound x) + { + get_canvas_interface()->add_value_node(layer->dynamic_param_list().find("index")->second, name); + break; + } + } + else + { + Layer::ParamList param_list(layer->get_param_list()); + for (Layer::ParamList::const_iterator iter(param_list.begin()) + ; iter != param_list.end() + ; iter++) + if (layer->dynamic_param_list().count(iter->first)==0 && iter->second.get_type()==ValueBase::TYPE_CANVAS) + { + Canvas::Handle subcanvas(iter->second.get(Canvas::Handle())); + if (subcanvas && subcanvas->is_inline()) + for (Context iter = subcanvas->get_context(); iter != subcanvas->end(); iter++) + export_dup_nodes(*iter, canvas, index); + } + + for (Layer::DynamicParamList::const_iterator iter(layer->dynamic_param_list().begin()) + ; iter != layer->dynamic_param_list().end() + ; iter++) + if (iter->second->get_type()==ValueBase::TYPE_CANVAS) + { + Canvas::Handle canvas((*iter->second)(0).get(Canvas::Handle())); + if (canvas->is_inline()) + //! \todo do we need to implement this? and if so, shouldn't we check all canvases, not just the one at t=0s? + warning("%s:%d not yet implemented - do we need to export duplicate valuenodes in dynamic canvas parameters?", __FILE__, __LINE__); + } + } +} + +void LayerActionManager::amount_inc() { float adjust(0.1);