1 /* === S Y N F I G ========================================================= */
3 ** \brief Template Header
5 ** $Id: value_desc.h,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 /* === S T A R T =========================================================== */
24 #ifndef __SYNFIG_APP_VALUE_DESC_H
25 #define __SYNFIG_APP_VALUE_DESC_H
27 /* === H E A D E R S ======================================================= */
29 #include <synfig/valuenode.h>
30 #include <synfig/string.h>
31 #include <synfig/layer.h>
32 #include <synfig/value.h>
33 #include <synfig/valuenode_const.h>
34 #include <synfig/canvas.h>
36 /* === M A C R O S ========================================================= */
38 /* === T Y P E D E F S ===================================================== */
40 /* === C L A S S E S & S T R U C T S ======================================= */
46 // Info for Layer parent
47 synfig::Layer::Handle layer;
50 // Info for ValueNode parent
51 synfig::ValueNode::Handle parent_value_node;
54 // Info for exported ValueNode
55 synfig::Canvas::Handle canvas;
58 bool operator==(const ValueDesc &rhs)const
60 if((layer||rhs.layer) && layer!=rhs.layer)
62 if((!name.empty()||!rhs.name.empty()) && name!=rhs.name)
66 if((canvas||rhs.canvas) && canvas!=rhs.canvas)
68 if((parent_value_node||rhs.parent_value_node) && parent_value_node!=rhs.parent_value_node)
70 if((index>-1||rhs.index>-1) && index!=rhs.index)
74 bool operator!=(const ValueDesc &rhs)const
76 return !operator==(rhs);
80 ValueDesc(synfig::Layer::Handle layer,const synfig::String& param_name):
84 ValueDesc(synfig::Layer::LooseHandle layer,const synfig::String& param_name):
88 ValueDesc(synfig::LinkableValueNode::Handle parent_value_node,int index):
89 parent_value_node(parent_value_node),
92 // ValueDesc(synfig::LinkableValueNode::Handle parent_value_node,const synfig::String& param_name):
93 // parent_value_node(parent_value_node),
94 // index(parent_value_node->get_link_index_from_name(param_name)) { }
96 ValueDesc(synfig::Canvas::Handle canvas,const synfig::String& name):
100 ValueDesc(synfig::ValueNode_Const::Handle parent_value_node):
101 parent_value_node(parent_value_node),
106 bool is_valid()const { return layer || parent_value_node || canvas; }
107 operator bool()const { return is_valid(); }
109 bool parent_is_layer_param()const { return (bool)layer; }
110 bool parent_is_value_node()const { return (bool)parent_value_node; }
111 bool parent_is_linkable_value_node()const { return parent_is_value_node() && index>=0; }
112 bool parent_is_value_node_const()const { return parent_is_value_node() && index==-1; }
113 bool parent_is_canvas()const { return (bool)canvas; }
115 bool is_value_node()const { return parent_is_value_node() || parent_is_canvas() || (parent_is_layer_param() && (bool)layer->dynamic_param_list().count(name)); }
116 bool is_const()const { return (parent_is_layer_param() && !layer->dynamic_param_list().count(name)) || parent_is_value_node_const(); }
118 synfig::Layer::Handle get_layer()const { assert(parent_is_layer_param()); return layer; }
119 const synfig::String& get_param_name()const { assert(parent_is_layer_param()); return name; }
121 synfig::ValueNode::Handle get_parent_value_node()const { assert(parent_is_value_node()); return parent_value_node; }
122 int get_index()const { assert(parent_is_linkable_value_node()); return index; }
124 const synfig::String& get_value_node_id()const { assert(parent_is_canvas()); return name; }
126 synfig::Canvas::Handle get_canvas()const
131 return layer->get_canvas();
132 if(parent_value_node)
133 return parent_value_node->get_root_canvas();
137 synfig::ValueNode::Handle
138 get_value_node()const
140 if(parent_is_canvas())
141 return canvas->find_value_node(name);
142 if(parent_is_layer_param() && layer->dynamic_param_list().count(name))
143 return layer->dynamic_param_list().find(name)->second;
144 if(parent_is_linkable_value_node())
145 return synfig::LinkableValueNode::Handle::cast_reinterpret(parent_value_node)->get_link(index);
146 // return reinterpret_cast<synfig::LinkableValueNode*>(parent_value_node.get())->get_link(index);
151 get_value(synfig::Time time=0)const
153 if(parent_is_value_node_const() && parent_value_node)
154 return (*parent_value_node)(0);
155 if(is_value_node() && get_value_node())
156 return (*get_value_node())(time);
157 if(parent_is_layer_param() && layer)
158 return layer->get_param(name);
159 return synfig::ValueBase();
162 synfig::ValueBase::Type
163 get_value_type()const
165 synfig::ValueNode::Handle value_node=get_value_node();
167 return value_node->get_type();
168 return get_value().get_type();
174 return is_value_node() && get_value_node()->is_exported();
176 }; // END of class ValueDesc
178 }; // END of namespace synfigapp_instance
180 /* === E N D =============================================================== */