/* === S Y N F I G ========================================================= */
/*! \file valuenode.h
-** \brief Template Header
+** \brief Header file for implementation of the "Placeholder" valuenode conversion.
**
** $Id$
**
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+** Copyright (c) 2008 Chris Moore
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
#include "vector.h"
#include "value.h"
#include "string.h"
+#include "releases.h"
#include <ETL/handle>
#include <ETL/stringf>
#include "exception.h"
# define DCAST_HACK_ENABLE()
#endif
+#define CHECK_TYPE_AND_SET_VALUE(variable, type) \
+ /* I don't think this ever happens - maybe remove this code? */ \
+ if (get_type() == ValueBase::TYPE_NIL) { \
+ warning("%s:%d get_type() IS nil sometimes!", \
+ __FILE__, __LINE__); \
+ return false; \
+ } \
+ if (get_type() != ValueBase::TYPE_NIL && \
+ !(ValueBase::same_type_as(value->get_type(), type)) && \
+ !PlaceholderValueNode::Handle::cast_dynamic(value)) { \
+ error(_("%s:%d wrong type for %s: need %s but got %s"), \
+ __FILE__, __LINE__, \
+ link_local_name(i).c_str(), \
+ ValueBase::type_local_name(type).c_str(), \
+ ValueBase::type_local_name(value->get_type()).c_str()); \
+ return false; \
+ } \
+ variable = value; \
+ signal_child_changed()(i); \
+ signal_value_changed()(); \
+ return true
+
/* === T Y P E D E F S ===================================================== */
/* === C L A S S E S & S T R U C T S ======================================= */
public:
//! Returns the value of the ValueNode at time \a t
- virtual ValueBase operator()(Time t)const
+ virtual ValueBase operator()(Time /*t*/)const
{ return ValueBase(); }
//! \internal Sets the id of the ValueNode
//! Returns the localized name of the ValueNode type
virtual String get_local_name()const=0;
+ //! Return a full description of the ValueNode and its parentage
+ virtual String get_description(bool show_exported_name = true)const;
+
//! \writeme
virtual ValueNode* clone(const GUID& deriv_guid=GUID())const=0;
static Handle create(ValueBase::Type type=ValueBase::TYPE_NIL);
protected:
- virtual void get_times_vfunc(Node::time_set &set) const {}
+ virtual void get_times_vfunc(Node::time_set &/*set*/) const {}
}; // END of class PlaceholderValueNode
String local_name;
Factory factory;
CheckType check_type;
+ ReleaseVersion release_version; // which version of synfig introduced this valuenode type
};
typedef std::map<String,BookEntry> Book;
ValueNode::LooseHandle get_link(int i)const;
ValueNode::LooseHandle get_link(const String &name)const { return get_link(get_link_index_from_name(name)); }
+ String
+ get_description(int index = -1, bool show_exported_name = true)const;
+
protected:
//! Sets the type of the ValueNode
void set_type(ValueBase::Type t) { ValueNode::set_type(t); }