X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Flayeractionmanager.cpp;h=c8bddffd7b4cc665919fb7c860c12d2670f11a60;hb=07f61d6b9f347ae6e5651b6fc00d1f46b9ccdec1;hp=5f1c5da7bcc97edc71688d1edb0755a9550838e2;hpb=3a3c4bca3a17137bec5d7960560934b91ef4146e;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/layeractionmanager.cpp b/synfig-studio/trunk/src/gtkmm/layeractionmanager.cpp index 5f1c5da..c8bddff 100644 --- a/synfig-studio/trunk/src/gtkmm/layeractionmanager.cpp +++ b/synfig-studio/trunk/src/gtkmm/layeractionmanager.cpp @@ -1,20 +1,22 @@ -/* === S I N F G =========================================================== */ -/*! \file template.cpp +/* === S Y N F I G ========================================================= */ +/*! \file layeractionmanager.cpp ** \brief Template File ** -** $Id: layeractionmanager.cpp,v 1.1.1.1 2005/01/07 03:34:36 darco Exp $ +** $Id$ ** ** \legal -** Copyright (c) 2002 Robert B. Quattlebaum Jr. +** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2007 Chris Moore ** -** This software and associated documentation -** are CONFIDENTIAL and PROPRIETARY property of -** the above-mentioned copyright holder. +** This package is free software; you can redistribute it and/or +** modify it under the terms of the GNU General Public License as +** published by the Free Software Foundation; either version 2 of +** the License, or (at your option) any later version. ** -** You may not copy, print, publish, or in any -** other way distribute this software without -** a prior written agreement with -** the copyright holder. +** This package is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +** General Public License for more details. ** \endlegal */ /* ========================================================================= */ @@ -30,9 +32,11 @@ #include "layeractionmanager.h" #include "layertree.h" -#include +#include #include "instance.h" -#include +#include + +#include "general.h" #endif @@ -40,7 +44,7 @@ using namespace std; using namespace etl; -using namespace sinfg; +using namespace synfig; using namespace studio; static const guint no_prev_popup((guint)-1); @@ -57,8 +61,8 @@ static const guint no_prev_popup((guint)-1); LayerActionManager::LayerActionManager(): action_group_(Gtk::ActionGroup::create()), - action_group_copy_paste(Gtk::ActionGroup::create()), popup_id_(no_prev_popup), + action_group_copy_paste(Gtk::ActionGroup::create()), queued(false) { action_cut_=Gtk::Action::create( @@ -91,8 +95,8 @@ LayerActionManager::LayerActionManager(): &LayerActionManager::paste ) ); - - + + action_amount_inc_=Gtk::Action::create( "amount-inc", Gtk::StockID("gtk-add"), @@ -158,7 +162,7 @@ LayerActionManager::set_layer_tree(LayerTree* x) } void -LayerActionManager::set_canvas_interface(const etl::handle &x) +LayerActionManager::set_canvas_interface(const etl::handle &x) { canvas_interface_=x; } @@ -195,7 +199,7 @@ LayerActionManager::queue_refresh() { if(queued) return; - + //queue_refresh_connection.disconnect(); queue_refresh_connection=Glib::signal_idle().connect( sigc::bind_return( @@ -203,7 +207,7 @@ LayerActionManager::queue_refresh() false ) ); - + queued=true; } @@ -218,33 +222,33 @@ LayerActionManager::refresh() clear(); - + // Make sure we are ready if(!ui_manager_ || !layer_tree_ || !canvas_interface_) { - sinfg::error("LayerActionManager::refresh(): Not ready!"); + synfig::error("LayerActionManager::refresh(): Not ready!"); return; } - - + + String ui_info; action_paste_->set_sensitive(!clipboard_.empty()); action_group_->add(action_paste_); - + if(layer_tree_->get_selection()->count_selected_rows()!=0) { bool multiple_selected(layer_tree_->get_selection()->count_selected_rows()>1); Layer::Handle layer(layer_tree_->get_selected_layer()); - + { bool canvas_set(false); - sinfgapp::Action::ParamList param_list; + synfigapp::Action::ParamList param_list; param_list.add("time",get_canvas_interface()->get_time()); param_list.add("canvas_interface",get_canvas_interface()); { - sinfgapp::SelectionManager::LayerList layer_list(layer_tree_->get_selected_layers()); - sinfgapp::SelectionManager::LayerList::iterator iter; + synfigapp::SelectionManager::LayerList layer_list(layer_tree_->get_selected_layers()); + synfigapp::SelectionManager::LayerList::iterator iter; action_copy_->set_sensitive(!layer_list.empty()); action_cut_->set_sensitive(!layer_list.empty()); action_group_->add(action_copy_); @@ -256,7 +260,7 @@ LayerActionManager::refresh() action_group_->add(action_amount_inc_); action_group_->add(action_amount_dec_); action_group_->add(action_amount_); - + for(iter=layer_list.begin();iter!=layer_list.end();++iter) { update_connection_list.push_back( @@ -264,7 +268,7 @@ LayerActionManager::refresh() sigc::mem_fun(*this, &LayerActionManager::queue_refresh) ) ); - + if(!canvas_set) { param_list.add("canvas",Canvas::Handle((*iter)->get_canvas())); @@ -278,7 +282,7 @@ LayerActionManager::refresh() param_list.add("layer",Layer::Handle(*iter)); } } - + if(!multiple_selected && layer->get_name()=="PasteCanvas") { action_group_->add(Gtk::Action::create( @@ -296,17 +300,16 @@ LayerActionManager::refresh() ui_info+=""; } handle::cast_static(get_canvas_interface()->get_instance())-> - add_actions_to_group(action_group_, ui_info, param_list, sinfgapp::Action::CATEGORY_LAYER); + add_actions_to_group(action_group_, ui_info, param_list, synfigapp::Action::CATEGORY_LAYER); } } - - ui_info=""+ui_info+""; - popup_id_=get_ui_manager()->add_ui_from_string(ui_info); + + ui_info=""+ui_info+""; + popup_id_=get_ui_manager()->add_ui_from_string(ui_info); #ifdef ONE_ACTION_GROUP #else get_ui_manager()->insert_action_group(action_group_); #endif - DEBUGPOINT(); } void @@ -320,10 +323,10 @@ LayerActionManager::cut() void LayerActionManager::copy() { - sinfgapp::SelectionManager::LayerList layer_list(layer_tree_->get_selected_layers()); + synfigapp::SelectionManager::LayerList layer_list(layer_tree_->get_selected_layers()); clipboard_.clear(); - sinfg::GUID guid; - + synfig::GUID guid; + while(!layer_list.empty()) { clipboard_.push_back(layer_list.front()->clone(guid)); @@ -331,21 +334,21 @@ LayerActionManager::copy() } action_paste_->set_sensitive(!clipboard_.empty()); - + //queue_refresh(); } void LayerActionManager::paste() { - sinfg::GUID guid; + synfig::GUID guid; // Create the action group - sinfgapp::Action::PassiveGrouper group(get_canvas_interface()->get_instance().get(),_("Paste")); + synfigapp::Action::PassiveGrouper group(get_canvas_interface()->get_instance().get(),_("Paste")); Canvas::Handle canvas(get_canvas_interface()->get_canvas()); int depth(0); - + // we are temporarily using the layer to hold something Layer::Handle layer(layer_tree_->get_selected_layer()); if(layer) @@ -353,63 +356,79 @@ LayerActionManager::paste() depth=layer->get_depth(); canvas=layer->get_canvas(); } - - sinfgapp::SelectionManager::LayerList layer_selection; - - for(std::list::iterator iter=clipboard_.begin();iter!=clipboard_.end();++iter) + + synfigapp::SelectionManager::LayerList layer_selection; + + for(std::list::iterator iter=clipboard_.begin();iter!=clipboard_.end();++iter) { layer=(*iter)->clone(guid); layer_selection.push_back(layer); - sinfgapp::Action::Handle action(sinfgapp::Action::create("layer_add")); - + synfigapp::Action::Handle action(synfigapp::Action::create("layer_add")); + assert(action); if(!action) return; - + action->set_param("canvas",canvas); - action->set_param("canvas_interface",etl::loose_handle(get_canvas_interface())); + action->set_param("canvas_interface",etl::loose_handle(get_canvas_interface())); action->set_param("new",layer); - + if(!action->is_ready()) { return; } - + if(!get_instance()->perform_action(action)) { return; } - - sinfg::info("DEPTH=%d",depth); + + synfig::info("DEPTH=%d",depth); // Action to move the layer (if necessary) if(depth>0) { - sinfgapp::Action::Handle action(sinfgapp::Action::create("layer_move")); - + synfigapp::Action::Handle action(synfigapp::Action::create("layer_move")); + assert(action); if(!action) return; - + action->set_param("canvas",canvas); - action->set_param("canvas_interface",etl::loose_handle(get_canvas_interface())); + action->set_param("canvas_interface",etl::loose_handle(get_canvas_interface())); action->set_param("layer",layer); action->set_param("new_index",depth); - + if(!action->is_ready()) { - //get_ui_interface()->error(_("Move Action Not Ready")); + //get_ui_interface()->error(_("Move Action Not Ready")); //return 0; return; } - + if(!get_instance()->perform_action(action)) { - //get_ui_interface()->error(_("Move Action Not Ready")); + //get_ui_interface()->error(_("Move Action Not Ready")); //return 0; return; } - } + } 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; + } + } } get_canvas_interface()->get_selection_manager()->clear_selected_layers(); get_canvas_interface()->get_selection_manager()->set_selected_layers(layer_selection); @@ -419,21 +438,21 @@ void LayerActionManager::amount_inc() { float adjust(0.1); - + // Create the action group - sinfgapp::Action::PassiveGrouper group(get_canvas_interface()->get_instance().get(),_("Decrease Amount")); - + synfigapp::Action::PassiveGrouper group(get_canvas_interface()->get_instance().get(),_("Decrease Amount")); + if(adjust>0) group.set_name(_("Increase Amount")); - sinfgapp::SelectionManager::LayerList layer_list(layer_tree_->get_selected_layers()); + synfigapp::SelectionManager::LayerList layer_list(layer_tree_->get_selected_layers()); while(!layer_list.empty()) { ValueBase value(layer_list.front()->get_param("amount")); - if(value.same_as(Real())) + if(value.same_type_as(Real())) { - get_canvas_interface()->change_value(sinfgapp::ValueDesc(layer_list.front(),"amount"),value.get(Real())+adjust); + get_canvas_interface()->change_value(synfigapp::ValueDesc(layer_list.front(),"amount"),value.get(Real())+adjust); } layer_list.pop_front(); } @@ -443,21 +462,21 @@ void LayerActionManager::amount_dec() { float adjust(-0.1); - + // Create the action group - sinfgapp::Action::PassiveGrouper group(get_canvas_interface()->get_instance().get(),_("Decrease Amount")); - + synfigapp::Action::PassiveGrouper group(get_canvas_interface()->get_instance().get(),_("Decrease Amount")); + if(adjust>0) group.set_name(_("Increase Amount")); - sinfgapp::SelectionManager::LayerList layer_list(layer_tree_->get_selected_layers()); + synfigapp::SelectionManager::LayerList layer_list(layer_tree_->get_selected_layers()); while(!layer_list.empty()) { ValueBase value(layer_list.front()->get_param("amount")); - if(value.same_as(Real())) + if(value.same_type_as(Real())) { - get_canvas_interface()->change_value(sinfgapp::ValueDesc(layer_list.front(),"amount"),value.get(Real())+adjust); + get_canvas_interface()->change_value(synfigapp::ValueDesc(layer_list.front(),"amount"),value.get(Real())+adjust); } layer_list.pop_front(); }