1 /* === S Y N F I G ========================================================= */
2 /*! \file layerparamdisconnect.cpp
3 ** \brief Template File
5 ** $Id: layerparamdisconnect.cpp,v 1.1.1.1 2005/01/07 03:34:37 darco Exp $
8 ** Copyright (c) 2002 Robert B. Quattlebaum Jr.
10 ** This software and associated documentation
11 ** are CONFIDENTIAL and PROPRIETARY property of
12 ** the above-mentioned copyright holder.
14 ** You may not copy, print, publish, or in any
15 ** other way distribute this software without
16 ** a prior written agreement with
17 ** the copyright holder.
20 /* ========================================================================= */
22 /* === H E A D E R S ======================================================= */
31 #include "layerparamdisconnect.h"
32 #include <synfigapp/canvasinterface.h>
33 #include <synfig/valuenode_dynamiclist.h>
39 using namespace synfig;
40 using namespace synfigapp;
41 using namespace Action;
43 /* === M A C R O S ========================================================= */
45 ACTION_INIT(Action::LayerParamDisconnect);
46 ACTION_SET_NAME(Action::LayerParamDisconnect,"layer_param_disconnect");
47 ACTION_SET_LOCAL_NAME(Action::LayerParamDisconnect,_("Disconnect Layer Parameter"));
48 ACTION_SET_TASK(Action::LayerParamDisconnect,"disconnect");
49 ACTION_SET_CATEGORY(Action::LayerParamDisconnect,Action::CATEGORY_LAYER|Action::CATEGORY_VALUENODE);
50 ACTION_SET_PRIORITY(Action::LayerParamDisconnect,0);
51 ACTION_SET_VERSION(Action::LayerParamDisconnect,"0.0");
52 ACTION_SET_CVS_ID(Action::LayerParamDisconnect,"$Id: layerparamdisconnect.cpp,v 1.1.1.1 2005/01/07 03:34:37 darco Exp $");
54 /* === G L O B A L S ======================================================= */
56 /* === P R O C E D U R E S ================================================= */
58 /* === M E T H O D S ======================================================= */
60 Action::LayerParamDisconnect::LayerParamDisconnect():
67 Action::LayerParamDisconnect::get_param_vocab()
69 ParamVocab ret(Action::CanvasSpecific::get_param_vocab());
71 ret.push_back(ParamDesc("layer",Param::TYPE_LAYER)
72 .set_local_name(_("Layer"))
75 ret.push_back(ParamDesc("param",Param::TYPE_STRING)
76 .set_local_name(_("Param"))
79 ret.push_back(ParamDesc("time",Param::TYPE_STRING)
80 .set_local_name(_("Time"))
88 Action::LayerParamDisconnect::is_canidate(const ParamList &x)
90 return canidate_check(get_param_vocab(),x);
94 Action::LayerParamDisconnect::set_param(const synfig::String& name, const Action::Param ¶m)
96 if(name=="layer" && param.get_type()==Param::TYPE_LAYER)
98 layer=param.get_layer();
103 if(name=="param" && param.get_type()==Param::TYPE_STRING)
105 param_name=param.get_string();
110 if(name=="time" && param.get_type()==Param::TYPE_TIME)
112 time=param.get_time();
117 return Action::CanvasSpecific::set_param(name,param);
121 Action::LayerParamDisconnect::is_ready()const
123 if(!layer || param_name.empty())
125 return Action::CanvasSpecific::is_ready();
129 Action::LayerParamDisconnect::perform()
131 if(!layer->dynamic_param_list().count(param_name))
132 throw Error(_("Layer Parameter is not connected to anything"));
134 old_value_node=layer->dynamic_param_list().find(param_name)->second;
135 layer->disconnect_dynamic_param(param_name);
137 if(new_value_node || ValueNode_DynamicList::Handle::cast_dynamic(old_value_node))
140 new_value_node=old_value_node.clone();
141 layer->connect_dynamic_param(param_name,new_value_node);
144 layer->set_param(param_name,(*old_value_node)(time));
147 old_value_node->changed();
151 if(get_canvas_interface())
153 get_canvas_interface()->signal_layer_param_changed()(layer,param_name);
158 Action::LayerParamDisconnect::undo()
160 layer->connect_dynamic_param(param_name,old_value_node);
162 /* if(layer->active() && get_canvas()->get_time()!=time)
168 old_value_node->changed();
172 if(get_canvas_interface())
174 get_canvas_interface()->signal_layer_param_changed()(layer,param_name);