X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Fsrc%2Fsynfig%2Fvaluenode.h;h=830cd304024834c48360b084093512674968f56c;hb=dbc88fd05c8d29849d2e6227d23605508eb188ae;hp=c681b5d0e2fb243cc14c4e43fbb76c74041569b5;hpb=ed87e08cbcd778f84e570a981ae61aa1178c82ff;p=synfig.git diff --git a/synfig-core/src/synfig/valuenode.h b/synfig-core/src/synfig/valuenode.h index c681b5d..830cd30 100644 --- a/synfig-core/src/synfig/valuenode.h +++ b/synfig-core/src/synfig/valuenode.h @@ -39,6 +39,7 @@ #include #include "guid.h" #include +#include "paramdesc.h" #include "node.h" @@ -77,6 +78,7 @@ namespace synfig { class Canvas; class LinkableValueNode; class Layer; +class ParamVocab; /*! \class ValueNode ** \brief Base class for all Value Nodes @@ -110,9 +112,15 @@ public: */ private: + //! The type of the Value Node + //! \see ValueBase ValueBase::Type type; + //! The name of the Value Node. This is the string that is used in the + //! sif file to define the value type: i.e. String name; + //! The canvas this Value Node belongs to etl::loose_handle canvas_; + //! The root canvas this Value Node belongs to etl::loose_handle root_canvas_; /* @@ -242,7 +250,12 @@ protected: }; // END of class ValueNode /*! \class PlaceholderValueNode -** \todo writeme +** Seems to be a Place to hold a Value Node temporarly. +* +* Doesn't seem to implement any functionality. Seems to be used when the +* value node cannot be created using the Const, Animated or Linkable +* Value Nodes. +* */ class PlaceholderValueNode : public ValueNode { @@ -324,10 +337,20 @@ public: */ typedef std::map Book; + //! The vocabulary of the children + /*! \see synfig::Paramdesc + */ + typedef ParamVocab Vocab; + static Book& book(); + //! Creates a Linkable Value Node based on the name and the returned + //! value type. Returns a valid Handle if both (name and type) match static Handle create(const String &name, const ValueBase& x); + //! Each derived Linkable Value Node has to implement this fucntion and + //! should return true only if the type matches. \name is the name of + //! the linked value node and \x is the returned value type static bool check_type(const String &name, ValueBase::Type x); public: @@ -335,23 +358,28 @@ public: ValueNode(type) { } protected: + //! Stores the Value Node \x in the sub parameter i after check if the + //! type is the same. + //! It has to be defined by the derived class. virtual bool set_link_vfunc(int i,ValueNode::Handle x)=0; + //! Frees all the subparameters of the Linkable Value Node. + //! Used by the derived classed destructors. void unlink_all(); public: //! Returns the number of linked Value Nodes - virtual int link_count()const=0; + virtual int link_count()const; //! Returns the local name of the 'i' linked Value Node - virtual String link_local_name(int i)const=0; + virtual String link_local_name(int i)const; //! Returns the name of the 'i' linked Value Node - virtual String link_name(int i)const=0; + virtual String link_name(int i)const; //! Returns the child index Value Node based on the name - virtual int get_link_index_from_name(const String &name)const=0; + virtual int get_link_index_from_name(const String &name)const; //! Clones a Value Node virtual ValueNode* clone(const GUID& deriv_guid=GUID())const; @@ -368,7 +396,12 @@ public: //! Return a full description of the linked ValueNode given by the index String get_description(int index = -1, bool show_exported_name = true)const; + //! Gets the children vocabulary for linkable value nodes + virtual Vocab get_children_vocab()const; + protected: + //! Member to store the children vocabulary + Vocab children_vocab; //! Sets the type of the ValueNode void set_type(ValueBase::Type t) { ValueNode::set_type(t); } @@ -380,6 +413,12 @@ protected: //! Returns the cached times values for all the children (linked Value Nodes) virtual void get_times_vfunc(Node::time_set &set) const; + + //! Pure Virtual member to get the children vocabulary + virtual Vocab get_children_vocab_vfunc()const=0; + + //! Virtual memebr to set the children vocabulary to a given value + virtual void set_children_vocab(Vocab& rvocab); }; // END of class LinkableValueNode /*! \class ValueNodeList