/* === M E T H O D S ======================================================= */
-ValueBase::ValueBase():type(TYPE_NIL),data(0),ref_count(0),loop_(0)
+ValueBase::ValueBase():type(TYPE_NIL),data(0),ref_count(0),loop_(0),static_(0)
{
}
ValueBase::ValueBase(Type x):
type(x),
data(0),
- loop_(0)
+ loop_(0),
+ static_(0)
{
switch(type)
{
etl::reference_counter ref_count;
//! For Values with loop option like TYPE_LIST
bool loop_;
+ //! For Values of Constant Value Nodes or Layer parameters
+ bool static_;
/*
-- ** -- C O N S T R U C T O R S -----------------------------------
//! Template constructor for any type
template <typename T>
- ValueBase(const T &x, bool loop_=false):
- type(TYPE_NIL),data(0),ref_count(0),loop_(loop_)
+ ValueBase(const T &x, bool loop_=false, bool static_=false):
+ type(TYPE_NIL),data(0),ref_count(0),loop_(loop_), static_(static_)
{ set(x); }
//! Copy constructor. The data is not copied, just the type.
//! Sets the loop option.
void set_loop(bool x) { loop_=x; }
+ //! Gets the static option.
+ bool get_static()const { return static_; }
+
+ //! Sets the static option.
+ void set_static(bool x) { static_=x; }
+
//! True if the Value is not valid or is type LIST and is empty
bool empty()const;
String
ValueNode_Const::get_name()const
{
- return "constant";
+ return get_static()?"static":"constant";
}
String
ValueNode_Const::get_local_name()const
{
- return _("Constant");
+ return get_static()?_("Static"):_("Constant");
}
void ValueNode_Const::get_times_vfunc(Node::time_set &/*set*/) const
ValueBase &get_value();
void set_value(const ValueBase &data);
-
+ bool get_static()const {return get_value().get_static();}
+ void set_static(bool x) { get_value().set_static(x); }
virtual String get_name()const;
virtual String get_local_name()const;
if(column==model.type.index())
{
synfigapp::ValueDesc value_desc((*iter)[model.value_desc]);
+ String stype, lname;
Glib::Value<Glib::ustring> x;
g_value_init(x.gobj(),x.value_type());
}
else
{
- if(!value_desc.is_value_node() || value_desc.get_value_node()->get_name()=="constant")
- {
- x.set(ValueBase::type_local_name(value_desc.get_value_type()));
- }
- else
- {
- x.set(value_desc.get_value_node()->get_local_name());
- }
+ stype=ValueBase::type_local_name(value_desc.get_value_type());
+ if(value_desc.get_value_node())
+ {
+ lname=value_desc.get_value_node()->get_name();
+ if (lname=="animated" || lname=="static")
+ stype+=" (" + value_desc.get_value_node()->get_local_name() + ")";
+ }
+ else if(value_desc.parent_is_layer_param())
+ {
+ if(value_desc.get_value().get_static())
+ stype+=_(" (Static)");
+ }
}
-
+ x.set(stype.c_str());
g_value_init(value.gobj(),x.value_type());
g_value_copy(x.gobj(),value.gobj());
}
VALUENODE_ACTION_HH = \
actions/valuenodeadd.h \
actions/valuenodeconstset.h \
+ actions/valuenodeconstsetstatic.h\
+ actions/valuenodeconstunsetstatic.h\
actions/valuenodedynamiclistinsert.h \
actions/valuenodedynamiclistinsertsmart.h \
actions/valuenodedynamiclistloop.h \
VALUENODE_ACTION_CC = \
actions/valuenodeadd.cpp \
actions/valuenodeconstset.cpp \
+ actions/valuenodeconstsetstatic.cpp\
+ actions/valuenodeconstunsetstatic.cpp\
actions/valuenodedynamiclistinsert.cpp \
actions/valuenodedynamiclistinsertsmart.cpp \
actions/valuenodedynamiclistloop.cpp \
#include "actions/layersetdesc.h"
#include "actions/valuenodeconstset.h"
+#include "actions/valuenodeconstsetstatic.h"
+#include "actions/valuenodeconstunsetstatic.h"
#include "actions/valuenodeadd.h"
#include "actions/valuenodereplace.h"
#include "actions/valuenodelinkconnect.h"
ADD_ACTION(Action::LayerSetDesc);
ADD_ACTION(Action::ValueNodeConstSet);
+ ADD_ACTION(Action::ValueNodeConstSetStatic);
+ ADD_ACTION(Action::ValueNodeConstUnSetStatic);
ADD_ACTION(Action::ValueNodeAdd);
ADD_ACTION(Action::ValueNodeReplace);
ADD_ACTION(Action::ValueNodeLinkConnect);
--- /dev/null
+/* === S Y N F I G ========================================================= */
+/*! \file valuenodeconstsetstatic.cpp
+** \brief Template File
+**
+** $Id$
+**
+** \legal
+** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+** Copyright (c) 2010 Carlos López
+**
+** 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.
+**
+** 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
+*/
+/* ========================================================================= */
+
+/* === H E A D E R S ======================================================= */
+
+#ifdef USING_PCH
+# include "pch.h"
+#else
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "valuenodeconstsetstatic.h"
+#include <synfigapp/canvasinterface.h>
+
+#include <synfigapp/general.h>
+
+#endif
+
+using namespace std;
+using namespace etl;
+using namespace synfig;
+using namespace synfigapp;
+using namespace Action;
+
+/* === M A C R O S ========================================================= */
+
+ACTION_INIT(Action::ValueNodeConstSetStatic);
+ACTION_SET_NAME(Action::ValueNodeConstSetStatic,"ValueNodeConstSetStatic");
+ACTION_SET_LOCAL_NAME(Action::ValueNodeConstSetStatic,N_("Set Static"));
+ACTION_SET_TASK(Action::ValueNodeConstSetStatic,"setstatic");
+ACTION_SET_CATEGORY(Action::ValueNodeConstSetStatic,Action::CATEGORY_VALUEDESC|Action::CATEGORY_VALUENODE);
+ACTION_SET_PRIORITY(Action::ValueNodeConstSetStatic,0);
+ACTION_SET_VERSION(Action::ValueNodeConstSetStatic,"0.0");
+ACTION_SET_CVS_ID(Action::ValueNodeConstSetStatic,"$Id$");
+
+/* === G L O B A L S ======================================================= */
+
+/* === P R O C E D U R E S ================================================= */
+
+/* === M E T H O D S ======================================================= */
+
+Action::ValueNodeConstSetStatic::ValueNodeConstSetStatic()
+{
+}
+
+Action::ParamVocab
+Action::ValueNodeConstSetStatic::get_param_vocab()
+{
+ ParamVocab ret(Action::CanvasSpecific::get_param_vocab());
+
+ ret.push_back(ParamDesc("value_node",Param::TYPE_VALUENODE)
+ .set_local_name(_("ValueNode"))
+ );
+
+ return ret;
+}
+
+bool
+Action::ValueNodeConstSetStatic::is_candidate(const ParamList &x)
+{
+ if (!candidate_check(get_param_vocab(),x))
+ return false;
+
+ ValueNode::Handle value_node;
+ ValueDesc value_desc(x.find("value_desc")->second.get_value_desc());
+
+ if(value_desc.parent_is_value_node())
+ value_node = value_desc.get_parent_value_node();
+ else
+ value_node = x.find("value_node")->second.get_value_node();
+
+ // We need a constant value node or a constant layer param.
+ return (
+ (ValueNode_Const::Handle::cast_dynamic(value_node) &&
+ // We need the constant value node to be not static.
+ !ValueNode_Const::Handle::cast_dynamic(value_node)->get_static())
+ );
+}
+
+bool
+Action::ValueNodeConstSetStatic::set_param(const synfig::String& name, const Action::Param ¶m)
+{
+ if(!value_node && name=="value_desc" && param.get_type()==Param::TYPE_VALUEDESC)
+ {
+ ValueDesc value_desc(param.get_value_desc());
+ if(!value_desc.parent_is_value_node())
+ return false;
+
+ value_node=ValueNode_Const::Handle::cast_dynamic(value_desc.get_parent_value_node());
+
+ if(!value_node)
+ return false;
+
+ return true;
+ }
+
+ if(!value_node && name=="value_node" && param.get_type()==Param::TYPE_VALUENODE)
+ {
+ value_node=ValueNode_Const::Handle::cast_dynamic(param.get_value_node());
+
+ if(!value_node)
+ return false;
+
+ return true;
+ }
+
+ return Action::CanvasSpecific::set_param(name,param);
+}
+
+bool
+Action::ValueNodeConstSetStatic::is_ready()const
+{
+ if(!value_node)
+ return false;
+ return Action::CanvasSpecific::is_ready();
+}
+
+void
+Action::ValueNodeConstSetStatic::perform()
+{
+ old_static_value=value_node->get_static();
+
+ if(old_static_value==true)
+ {
+ set_dirty(false);
+ return;
+ }
+ set_dirty(true);
+ value_node->set_static(true);
+
+ value_node->changed();
+}
+
+void
+Action::ValueNodeConstSetStatic::undo()
+{
+ if(old_static_value==value_node->get_static())
+ {
+ set_dirty(false);
+ return;
+ }
+
+ set_dirty(true);
+ value_node->set_static(old_static_value);
+
+ value_node->changed();
+
+}
--- /dev/null
+/* === S Y N F I G ========================================================= */
+/*! \file valuenodeconstsetstatic.h
+** \brief Template File
+**
+** $Id$
+**
+** \legal
+** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+** Copyright (c) 2010 Carlos López
+**
+** 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.
+**
+** 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
+*/
+/* ========================================================================= */
+
+/* === S T A R T =========================================================== */
+
+#ifndef __SYNFIG_APP_ACTION_VALUENODECONSTSETSTATIC_H
+#define __SYNFIG_APP_ACTION_VALUENODECONSTSETSTATIC_H
+
+/* === H E A D E R S ======================================================= */
+
+#include <synfigapp/action.h>
+#include <synfig/valuenode_const.h>
+
+/* === M A C R O S ========================================================= */
+
+/* === T Y P E D E F S ===================================================== */
+
+/* === C L A S S E S & S T R U C T S ======================================= */
+
+namespace synfigapp {
+
+class Instance;
+
+namespace Action {
+
+class ValueNodeConstSetStatic :
+ public Undoable,
+ public CanvasSpecific
+{
+private:
+
+ synfig::ValueNode_Const::Handle value_node;
+ bool old_static_value;
+
+
+public:
+
+ ValueNodeConstSetStatic();
+
+ static ParamVocab get_param_vocab();
+ static bool is_candidate(const ParamList &x);
+
+ virtual bool set_param(const synfig::String& name, const Param &);
+ virtual bool is_ready()const;
+
+ virtual void perform();
+ virtual void undo();
+
+ ACTION_MODULE_EXT
+};
+
+}; // END of namespace action
+}; // END of namespace studio
+
+/* === E N D =============================================================== */
+
+#endif
--- /dev/null
+/* === S Y N F I G ========================================================= */
+/*! \file valuenodeconstunsetstatic.cpp
+** \brief Template File
+**
+** $Id$
+**
+** \legal
+** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+** Copyright (c) 2010 Carlos López
+**
+** 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.
+**
+** 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
+*/
+/* ========================================================================= */
+
+/* === H E A D E R S ======================================================= */
+
+#ifdef USING_PCH
+# include "pch.h"
+#else
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "valuenodeconstunsetstatic.h"
+#include <synfigapp/canvasinterface.h>
+
+#include <synfigapp/general.h>
+
+#endif
+
+using namespace std;
+using namespace etl;
+using namespace synfig;
+using namespace synfigapp;
+using namespace Action;
+
+/* === M A C R O S ========================================================= */
+
+ACTION_INIT(Action::ValueNodeConstUnSetStatic);
+ACTION_SET_NAME(Action::ValueNodeConstUnSetStatic,"ValueNodeConstUnSetStatic");
+ACTION_SET_LOCAL_NAME(Action::ValueNodeConstUnSetStatic,N_("UnSet Static"));
+ACTION_SET_TASK(Action::ValueNodeConstUnSetStatic,"unsetstatic");
+ACTION_SET_CATEGORY(Action::ValueNodeConstUnSetStatic,Action::CATEGORY_VALUEDESC|Action::CATEGORY_VALUENODE);
+ACTION_SET_PRIORITY(Action::ValueNodeConstUnSetStatic,0);
+ACTION_SET_VERSION(Action::ValueNodeConstUnSetStatic,"0.0");
+ACTION_SET_CVS_ID(Action::ValueNodeConstUnSetStatic,"$Id$");
+
+/* === G L O B A L S ======================================================= */
+
+/* === P R O C E D U R E S ================================================= */
+
+/* === M E T H O D S ======================================================= */
+
+Action::ValueNodeConstUnSetStatic::ValueNodeConstUnSetStatic()
+{
+}
+
+Action::ParamVocab
+Action::ValueNodeConstUnSetStatic::get_param_vocab()
+{
+ ParamVocab ret(Action::CanvasSpecific::get_param_vocab());
+
+ ret.push_back(ParamDesc("value_node",Param::TYPE_VALUENODE)
+ .set_local_name(_("ValueNode"))
+ );
+
+ return ret;
+}
+
+bool
+Action::ValueNodeConstUnSetStatic::is_candidate(const ParamList &x)
+{
+ if (!candidate_check(get_param_vocab(),x))
+ return false;
+
+ ValueNode::Handle value_node;
+ ValueDesc value_desc(x.find("value_desc")->second.get_value_desc());
+
+ if(value_desc.parent_is_value_node())
+ value_node = value_desc.get_parent_value_node();
+ else
+ value_node = x.find("value_node")->second.get_value_node();
+
+ // We need a constant value node or a constant layer param.
+ return (
+ (ValueNode_Const::Handle::cast_dynamic(value_node) &&
+ // We need the constant value node to be static.
+ ValueNode_Const::Handle::cast_dynamic(value_node)->get_static())
+ );
+}
+
+bool
+Action::ValueNodeConstUnSetStatic::set_param(const synfig::String& name, const Action::Param ¶m)
+{
+ if(!value_node && name=="value_desc" && param.get_type()==Param::TYPE_VALUEDESC)
+ {
+ ValueDesc value_desc(param.get_value_desc());
+ if(!value_desc.parent_is_value_node())
+ return false;
+
+ value_node=ValueNode_Const::Handle::cast_dynamic(value_desc.get_parent_value_node());
+
+ if(!value_node)
+ return false;
+
+ return true;
+ }
+
+ if(!value_node && name=="value_node" && param.get_type()==Param::TYPE_VALUENODE)
+ {
+ value_node=ValueNode_Const::Handle::cast_dynamic(param.get_value_node());
+
+ if(!value_node)
+ return false;
+
+ return true;
+ }
+
+ return Action::CanvasSpecific::set_param(name,param);
+}
+
+bool
+Action::ValueNodeConstUnSetStatic::is_ready()const
+{
+ if(!value_node)
+ return false;
+ return Action::CanvasSpecific::is_ready();
+}
+
+void
+Action::ValueNodeConstUnSetStatic::perform()
+{
+ old_static_value=value_node->get_static();
+
+ if(old_static_value==false)
+ {
+ set_dirty(false);
+ return;
+ }
+ set_dirty(true);
+ value_node->set_static(false);
+
+ value_node->changed();
+}
+
+void
+Action::ValueNodeConstUnSetStatic::undo()
+{
+ if(old_static_value==value_node->get_static())
+ {
+ set_dirty(false);
+ return;
+ }
+
+ set_dirty(true);
+ value_node->set_static(old_static_value);
+
+ value_node->changed();
+
+}
--- /dev/null
+/* === S Y N F I G ========================================================= */
+/*! \file valuenodeconstunsetstatic.h
+** \brief Template File
+**
+** $Id$
+**
+** \legal
+** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+** Copyright (c) 2010 Carlos López
+**
+** 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.
+**
+** 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
+*/
+/* ========================================================================= */
+
+/* === S T A R T =========================================================== */
+
+#ifndef __SYNFIG_APP_ACTION_VALUENODECONSTUNSETSTATIC_H
+#define __SYNFIG_APP_ACTION_VALUENODECONSTUNSETSTATIC_H
+
+/* === H E A D E R S ======================================================= */
+
+#include <synfigapp/action.h>
+#include <synfig/valuenode_const.h>
+
+/* === M A C R O S ========================================================= */
+
+/* === T Y P E D E F S ===================================================== */
+
+/* === C L A S S E S & S T R U C T S ======================================= */
+
+namespace synfigapp {
+
+class Instance;
+
+namespace Action {
+
+class ValueNodeConstUnSetStatic :
+ public Undoable,
+ public CanvasSpecific
+{
+private:
+
+ synfig::ValueNode_Const::Handle value_node;
+ bool old_static_value;
+
+
+public:
+
+ ValueNodeConstUnSetStatic();
+
+ static ParamVocab get_param_vocab();
+ static bool is_candidate(const ParamList &x);
+
+ virtual bool set_param(const synfig::String& name, const Param &);
+ virtual bool is_ready()const;
+
+ virtual void perform();
+ virtual void undo();
+
+ ACTION_MODULE_EXT
+};
+
+}; // END of namespace action
+}; // END of namespace studio
+
+/* === E N D =============================================================== */
+
+#endif