Remove .gitignore do nothing is ignored.
[synfig.git] / synfig-core / trunk / src / synfig / node.h
index b24c7e3..ca5af34 100644 (file)
@@ -2,19 +2,21 @@
 /*!    \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
+**     Copyright (c) 2007 Chris Moore
 **
-**     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
 */
 /* ========================================================================= */
 
 /* === 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 ======================================= */
@@ -57,6 +64,10 @@ public:
        {
        }
 
+#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; }
@@ -66,13 +77,16 @@ public:
        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(); }
 
@@ -97,15 +111,15 @@ public:
                { 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;
 
@@ -118,7 +132,7 @@ private:
        //! \writeme
        GUID guid_;
 
-       //! cached time values for all the childrens
+       //! cached time values for all the children
        mutable time_set        times;
 
        //! \writeme
@@ -129,7 +143,7 @@ private:
 
        //! \writeme
        mutable RWLock rw_lock_;
-       
+
        //! \writeme
        bool deleting_;
 
@@ -143,15 +157,15 @@ public:
        */
 
 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 -------------------------------------
@@ -185,7 +199,7 @@ public:
        /*
  --    ** -- M E M B E R   F U N C T I O N S -------------------------------------
        */
-       
+
 public:
 
        void changed();
@@ -197,21 +211,21 @@ public:
        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 -----------------------------------
        */
@@ -221,12 +235,12 @@ protected:
 
        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;
-};     
+};
 
-synfig::Node* synfig::find_node(const synfig::GUID& guid);
+synfig::Node* find_node(const synfig::GUID& guid);
 
 template<typename T> etl::handle<T>
 guid_cast(const synfig::GUID& guid)
@@ -234,6 +248,32 @@ 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 set_string(set.begin(), set.end());
+}
+#endif // _DEBUG
+
 typedef etl::handle<Node> NodeHandle;
 
 }; // END of namespace synfig