From: dooglus Date: Sat, 13 Oct 2007 13:00:26 +0000 (+0000) Subject: Add the 'Switch' valuenode. X-Git-Url: https://git.pterodactylus.net/?a=commitdiff_plain;h=4ad59d2413eccb35b0964a5b908807a4a213d26f;p=synfig.git Add the 'Switch' valuenode. git-svn-id: http://svn.voria.com/code@923 1f10aa63-cdf2-0310-b900-c93c546f37ac --- diff --git a/synfig-core/trunk/src/synfig/valuenode.cpp b/synfig-core/trunk/src/synfig/valuenode.cpp index 4461740..6ef7c9a 100644 --- a/synfig-core/trunk/src/synfig/valuenode.cpp +++ b/synfig-core/trunk/src/synfig/valuenode.cpp @@ -60,6 +60,7 @@ #include "valuenode_gradientrotate.h" #include "valuenode_sine.h" #include "valuenode_exp.h" +#include "valuenode_switch.h" #include "layer.h" @@ -126,6 +127,7 @@ ValueNode::subsys_init() ADD_VALUENODE(ValueNode_GradientRotate, "gradient_rotate", _("Gradient Rotate") ); ADD_VALUENODE(ValueNode_Sine, "sine", _("Sine") ); ADD_VALUENODE(ValueNode_Exp, "exp", _("Exponential") ); + ADD_VALUENODE(ValueNode_Switch, "switch", _("Switch") ); #undef ADD_VALUENODE #undef ADD_VALUENODE2 diff --git a/synfig-core/trunk/src/synfig/valuenode_switch.cpp b/synfig-core/trunk/src/synfig/valuenode_switch.cpp new file mode 100644 index 0000000..022e832 --- /dev/null +++ b/synfig-core/trunk/src/synfig/valuenode_switch.cpp @@ -0,0 +1,187 @@ +/* === S Y N F I G ========================================================= */ +/*! \file valuenode_switch.cpp +** \brief Template File +** +** $Id$ +** +** \legal +** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** +** 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 +#endif + +#include "valuenode_switch.h" +#include "valuenode_const.h" +#include "general.h" + +#endif + +/* === U S I N G =========================================================== */ + +using namespace std; +using namespace etl; +using namespace synfig; + +/* === M A C R O S ========================================================= */ + +/* === G L O B A L S ======================================================= */ + +/* === P R O C E D U R E S ================================================= */ + +/* === M E T H O D S ======================================================= */ + +ValueNode_Switch::ValueNode_Switch(const ValueBase::Type &x): + LinkableValueNode(x) +{ +} + +ValueNode_Switch::ValueNode_Switch(const ValueNode::Handle &x): + LinkableValueNode(x->get_type()) +{ + set_link("link_off",x); + set_link("link_on",x); + set_link("switch",ValueNode_Const::create(bool(false))); +} + +ValueNode_Switch* +ValueNode_Switch::create(const ValueBase &x) +{ + return new ValueNode_Switch(ValueNode_Const::create(x)); +} + +LinkableValueNode* +ValueNode_Switch::create_new()const +{ + return new ValueNode_Switch(get_type()); +} + +ValueNode_Switch::~ValueNode_Switch() +{ + unlink_all(); +} + +bool +ValueNode_Switch::set_link_vfunc(int i,ValueNode::Handle x) +{ + assert(i>=0 && iget_type()!=get_type() && !PlaceholderValueNode::Handle::cast_dynamic(x)) + return false; + link_off_=x; + signal_child_changed()(i);signal_value_changed()(); + return true; + case 1: + if(x->get_type()!=get_type() && !PlaceholderValueNode::Handle::cast_dynamic(x)) + return false; + link_on_=x; + signal_child_changed()(i);signal_value_changed()(); + return true; + case 2: + switch_=x; + signal_child_changed()(i);signal_value_changed()(); + return true; + } + return true; +} + +ValueNode::LooseHandle +ValueNode_Switch::get_link_vfunc(int i)const +{ + assert(i>=0 && i=0 && i=0 && i Handle; + typedef etl::handle ConstHandle; + + ValueNode_Switch(const ValueBase::Type &x); + + ValueNode_Switch(const ValueNode::Handle &x); + +// static Handle create(const ValueBase::Type &x); +// static Handle create(const ValueNode::Handle &x); + + + virtual ValueNode::LooseHandle get_link_vfunc(int i)const; + + virtual int link_count()const; + + virtual String link_name(int i)const; + + virtual String link_local_name(int i)const; + virtual int get_link_index_from_name(const String &name)const; + + virtual ValueBase operator()(Time t)const; + + virtual ~ValueNode_Switch(); + + virtual String get_name()const; + + virtual String get_local_name()const; + +protected: + virtual bool set_link_vfunc(int i,ValueNode::Handle x); + + LinkableValueNode* create_new()const; + +public: + using synfig::LinkableValueNode::set_link_vfunc; + static bool check_type(ValueBase::Type type); + static ValueNode_Switch* create(const ValueBase &x); +}; // END of class ValueNode_Switch + +}; // END of namespace synfig + +/* === E N D =============================================================== */ + +#endif