-/* === S I N F G =========================================================== */
+/* === S Y N F I G ========================================================= */
/*! \file node.h
** \brief Template Header
**
-** $Id: node.h,v 1.3 2005/01/10 07:40:26 darco Exp $
+** $Id$
**
** \legal
-** Copyright (c) 2002 Robert B. Quattlebaum Jr.
+** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
**
-** This software and associated documentation
-** are CONFIDENTIAL and PROPRIETARY property of
-** the above-mentioned copyright holder.
+** 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.
**
-** You may not copy, print, publish, or in any
-** other way distribute this software without
-** a prior written agreement with
-** the copyright holder.
+** 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 __SINFG_PARENTNODE_H
-#define __SINFG_PARENTNODE_H
+#ifndef __SYNFIG_PARENTNODE_H
+#define __SYNFIG_PARENTNODE_H
/* === H E A D E R S ======================================================= */
/* === M A C R O S ========================================================= */
+// When a PasteCanvas layer has a non-zero 'time offset' parameter, should
+// the waypoints shown for the canvas be adjusted? This currently only
+// partially works - see the TODO at the end of layer_pastecanvas.cpp
+#define ADJUST_WAYPOINTS_FOR_TIME_OFFSET
+
/* === T Y P E D E F S ===================================================== */
/* === C L A S S E S & S T R U C T S ======================================= */
-namespace sinfg {
+namespace synfig {
class TimePoint
{
{
}
+#ifdef _DEBUG
+ const char *c_str()const;
+#endif
+
const GUID& get_guid()const { return guid; }
const Time& get_time()const { return time; }
Interpolation get_before()const { return before; }
void set_time(const Time& x) { time=x; }
void set_before(Interpolation x) { before=x; }
void set_after(Interpolation x) { after=x; }
-
+
void absorb(const TimePoint& x);
}; // END of class TimePoint
inline TimePoint operator+(TimePoint lhs,const Time& rhs)
{ lhs.set_time(lhs.get_time()+rhs); return lhs; }
+inline TimePoint operator-(TimePoint lhs,const Time& rhs)
+ { lhs.set_time(lhs.get_time()-rhs); return lhs; }
+
inline bool operator<(const TimePoint& lhs,const TimePoint& rhs)
{ return lhs.get_time()<rhs.get_time(); }
{ for(;begin!=end;++begin) insert(*begin); }
}; // END of class TimePointSet
-
+
class Node : public etl::rshared_object
{
/*
-- ** -- T Y P E S -----------------------------------------------------------
*/
-public:
-
+public:
+
//! \writeme
typedef TimePointSet time_set;
//! \writeme
GUID guid_;
- //! cached time values for all the childrens
+ //! cached time values for all the children
mutable time_set times;
//! \writeme
//! \writeme
mutable RWLock rw_lock_;
-
+
//! \writeme
bool deleting_;
*/
private:
-
+
sigc::signal<void> signal_changed_;
//! GUID Changed
/*! \note The second parameter is the *OLD* guid! */
- sigc::signal<void,GUID> signal_guid_changed_;
+ sigc::signal<void,GUID> signal_guid_changed_;
//! Deleted
- sigc::signal<void> signal_deleted_;
+ sigc::signal<void> signal_deleted_;
/*
-- ** -- S I G N A L I N T E R F A C E -------------------------------------
/*
-- ** -- M E M B E R F U N C T I O N S -------------------------------------
*/
-
+
public:
void changed();
void set_guid(const GUID& x);
int get_time_last_changed()const;
-
+
void add_child(Node*x);
void remove_child(Node*x);
int parent_count()const;
-
+
const time_set &get_times() const;
RWLock& get_rw_lock()const { return rw_lock_; }
-
+
protected:
-
+
void begin_delete();
-
+
/*
-- ** -- V I R T U A L F U N C T I O N S -----------------------------------
*/
virtual void on_guid_changed(GUID guid);
- /*! Function to be overloaded that fills
+ /*! Function to be overloaded that fills
*/
virtual void get_times_vfunc(time_set &set) const = 0;
-};
+};
-sinfg::Node* sinfg::find_node(const sinfg::GUID& guid);
+synfig::Node* find_node(const synfig::GUID& guid);
template<typename T> etl::handle<T>
-guid_cast(const sinfg::GUID& guid)
+guid_cast(const synfig::GUID& guid)
+{
+ return etl::handle<T>::cast_dynamic(synfig::find_node(guid));
+}
+
+#ifdef _DEBUG
+template <typename T>
+synfig::String set_string(T start, T end)
+{
+ synfig::String ret("[");
+ bool started = false;
+
+ while (start != end)
+ {
+ if (started) ret += ", ";
+ else started = true;
+
+ ret += synfig::String((*start).c_str());
+ start++;
+ }
+
+ return ret + "]";
+}
+
+template <typename T>
+synfig::String set_string(T set)
{
- return etl::handle<T>::cast_dynamic(sinfg::find_node(guid));
+ return set_string(set.begin(), set.end());
}
+#endif // _DEBUG
typedef etl::handle<Node> NodeHandle;
-}; // END of namespace sinfg
+}; // END of namespace synfig
/* === E N D =============================================================== */