Remove .gitignore do nothing is ignored.
[synfig.git] / synfig-studio / trunk / src / gtkmm / duckmatic.h
index d7680db..42282e0 100644 (file)
@@ -2,19 +2,21 @@
 /*!    \file duckmatic.h
 **     \brief Template Header
 **
-**     $Id: duckmatic.h,v 1.1.1.1 2005/01/07 03:34:36 darco Exp $
+**     $Id$
 **
 **     \legal
-**     Copyright (c) 2002 Robert B. Quattlebaum Jr.
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**     Copyright (c) 2007, 2008 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 ========================================================= */
 
-#define HASH_MAP_H <ext/hash_map>
-
 #ifdef HASH_MAP_H
 #include HASH_MAP_H
+#include FUNCTIONAL_H
+
 #ifndef __STRING_HASH__
 #define __STRING_HASH__
 class StringHash
 {
-       __gnu_cxx::hash<const char*> hasher_;
+# ifdef FUNCTIONAL_HASH_ON_STRING
+       HASH_MAP_NAMESPACE::hash<synfig::String> hasher_;
+# else  // FUNCTIONAL_HASH_ON_STRING
+       HASH_MAP_NAMESPACE::hash<const char*> hasher_;
+# endif  // FUNCTIONAL_HASH_ON_STRING
 public:
        size_t operator()(const synfig::String& x)const
        {
+# ifdef FUNCTIONAL_HASH_ON_STRING
+               return hasher_(x);
+# else  // FUNCTIONAL_HASH_ON_STRING
                return hasher_(x.c_str());
+# endif  // FUNCTIONAL_HASH_ON_STRING
        }
 };
 #endif
@@ -80,7 +90,7 @@ namespace studio
 
 class CanvasView;
 class Duckmatic;
-       
+
 class DuckDrag_Base : public etl::shared_object
 {
 public:
@@ -114,15 +124,15 @@ class Duckmatic
 {
        friend class DuckDrag_Base;
        friend class DuckDrag_Translate;
-       
+
        /*
  -- ** -- P U B L I C   T Y P E S ---------------------------------------------
        */
-       
+
 public:
 
 #ifdef HASH_MAP_H
-typedef __gnu_cxx::hash_map<synfig::GUID,etl::smart_ptr<synfig::Point>,synfig::GUIDHash> DuckDataMap;
+typedef HASH_MAP_CLASS<synfig::GUID,etl::smart_ptr<synfig::Point>,synfig::GUIDHash> DuckDataMap;
 #else
 typedef std::map<synfig::GUID,etl::smart_ptr<synfig::Point> > DuckDataMap;
 #endif
@@ -136,13 +146,13 @@ typedef std::map<synfig::GUID,etl::smart_ptr<synfig::Point> > DuckDataMap;
        struct Bezier;
 
        class Push;
-       
+
        friend class Push;
-               
+
        typedef Duck::Type Type;
-       
+
        typedef std::list<float> GuideList;
-       
+
        /*
  -- ** -- P R I V A T E   D A T A ---------------------------------------------
        */
@@ -157,13 +167,13 @@ private:
 
        std::list<etl::handle<Stroke> > stroke_list_;
 
-       std::list<etl::handle<Stroke> > persistant_stroke_list_;
+       std::list<etl::handle<Stroke> > persistent_stroke_list_;
 
        synfig::GUIDSet selected_ducks;
 
        synfig::GUID last_duck_guid;
 
-       std::list<etl::handle<Bezier> > bezier_list_;   
+       std::list<etl::handle<Bezier> > bezier_list_;
 
        //! I cannot recall what this is for
        //synfig::Vector snap;
@@ -177,12 +187,12 @@ private:
        sigc::signal<void> signal_grid_changed_;
 
        mutable sigc::signal<void> signal_sketch_saved_;
-       
+
        GuideList guide_list_x_;
        GuideList guide_list_y_;
 
        mutable synfig::String sketch_filename_;
-       
+
        /*
  -- ** -- P R O T E C T E D   D A T A -----------------------------------------
        */
@@ -204,19 +214,19 @@ protected:
        /*! \see grid_snap, show_grid */
        synfig::Vector grid_size;
 
-       bool show_persistant_strokes;
+       bool show_persistent_strokes;
 
        bool axis_lock;
-       
+
        /*
  -- ** -- P R I V A T E   M E T H O D S ---------------------------------------
        */
 
 private:
-       
+
        synfig::Vector last_translate_;
        synfig::Vector drag_offset_;
-       
+
        //etl::handle<Duck> selected_duck;
 
 
@@ -225,7 +235,7 @@ private:
        */
 
 public:
-       
+
        Duckmatic();
        virtual ~Duckmatic();
 
@@ -242,13 +252,13 @@ public:
        void set_guide_snap(bool x=true);
        bool get_guide_snap()const { return guide_snap; }
        void toggle_guide_snap() { set_guide_snap(!get_guide_snap()); }
-       
+
        //! Sets the state of the grid snap flag
        void set_grid_snap(bool x=true);
-       
+
        //! Gets the state of the grid snap flag
        bool get_grid_snap()const { return grid_snap; }
-       
+
        void enable_grid_snap() { set_grid_snap(true); }
 
        void disable_grid_snap() { set_grid_snap(false); }
@@ -256,48 +266,48 @@ public:
        void toggle_grid_snap() { set_grid_snap(!grid_snap); }
 
        synfig::Point snap_point_to_grid(const synfig::Point& x, float radius=0.1)const;
-       
-       bool get_show_persistant_strokes()const { return show_persistant_strokes; }
-       void set_show_persistant_strokes(bool x);
+
+       bool get_show_persistent_strokes()const { return show_persistent_strokes; }
+       void set_show_persistent_strokes(bool x);
 
        //! Sets the size of the grid
        void set_grid_size(const synfig::Vector &s);
-       
+
        //! Returns the size of the grid
        const synfig::Vector &get_grid_size()const { return grid_size; }
-       
-       
+
+
        const synfig::Time &get_time()const { return cur_time; }
 
        bool get_axis_lock()const { return axis_lock; }
        void set_axis_lock(bool x) { axis_lock=x; }
-       
+
        void set_time(synfig::Time x) { cur_time=x; }
 
        bool is_duck_group_selectable(const etl::handle<Duck>& x)const;
-       
-       //const DuckMap& duck_map()const { return duck_map; }   
+
+       //const DuckMap& duck_map()const { return duck_map; }
        DuckList get_duck_list()const;
-       
-       const std::list<etl::handle<Bezier> >& bezier_list()const { return bezier_list_; }      
+
+       const std::list<etl::handle<Bezier> >& bezier_list()const { return bezier_list_; }
 
        const std::list<etl::handle<Stroke> >& stroke_list()const { return stroke_list_; }
 
-       const std::list<etl::handle<Stroke> >& persistant_stroke_list()const { return persistant_stroke_list_; }
+       const std::list<etl::handle<Stroke> >& persistent_stroke_list()const { return persistent_stroke_list_; }
 
-       std::list<etl::handle<Stroke> >& persistant_stroke_list() { return persistant_stroke_list_; }
+       std::list<etl::handle<Stroke> >& persistent_stroke_list() { return persistent_stroke_list_; }
 
        //! \todo We should modify this to support multiple selections
        etl::handle<Duck> get_selected_duck()const;
 
        DuckList get_selected_ducks()const;
-       
+
        //! Returns \a true if the given duck is currently selected
        bool duck_is_selected(const etl::handle<Duck> &duck)const;
 
 
        void refresh_selected_ducks();
-       
+
        void clear_selected_ducks();
 
        int count_selected_ducks()const;
@@ -305,28 +315,30 @@ public:
        void toggle_select_duck(const etl::handle<Duck> &duck);
 
        void select_duck(const etl::handle<Duck> &duck);
-       
+
+       void toggle_select_ducks_in_box(const synfig::Vector& tl,const synfig::Vector& br);
+
        void select_ducks_in_box(const synfig::Vector& tl,const synfig::Vector& br);
 
        void unselect_duck(const etl::handle<Duck> &duck);
 
        void start_duck_drag(const synfig::Vector& offset);
-       void translate_selected_ducks(const synfig::Vector& vector);    
+       void translate_selected_ducks(const synfig::Vector& vector);
        bool end_duck_drag();
 
-       void signal_edited_selected_ducks();    
+       void signal_edited_selected_ducks();
+
+       void signal_user_click_selected_ducks(int button);
 
-       void signal_user_click_selected_ducks(int button);      
 
-       
        etl::handle<Duck> find_similar_duck(etl::handle<Duck> duck);
        etl::handle<Duck> add_similar_duck(etl::handle<Duck> duck);
-       
+
        void add_stroke(etl::smart_ptr<std::list<synfig::Point> > stroke_point_list, const synfig::Color& color=synfig::Color(0,0,0));
 
-       void add_persistant_stroke(etl::smart_ptr<std::list<synfig::Point> > stroke_point_list, const synfig::Color& color=synfig::Color(0,0,0));
+       void add_persistent_stroke(etl::smart_ptr<std::list<synfig::Point> > stroke_point_list, const synfig::Color& color=synfig::Color(0,0,0));
 
-       void clear_persistant_strokes();
+       void clear_persistent_strokes();
 
        void add_duck(const etl::handle<Duck> &duck);
 
@@ -340,7 +352,7 @@ public:
        etl::handle<Duck> last_duck()const;
 
        etl::handle<Bezier> last_bezier()const;
-       
+
        //! \note parameter is in canvas coordinates
        /*!     A radius of "zero" will have an unlimited radius */
        etl::handle<Duck> find_duck(synfig::Point pos, synfig::Real radius=0, Duck::Type type=Duck::TYPE_DEFAULT);
@@ -349,7 +361,7 @@ public:
        GuideList::iterator find_guide_y(synfig::Point pos, float radius=0.1);
        GuideList::const_iterator find_guide_x(synfig::Point pos, float radius=0.1)const { return const_cast<Duckmatic*>(this)->find_guide_x(pos,radius); }
        GuideList::const_iterator find_guide_y(synfig::Point pos, float radius=0.1)const { return const_cast<Duckmatic*>(this)->find_guide_y(pos,radius); }
-       
+
        //! \note parameter is in canvas coordinates
        /*!     A radius of "zero" will have an unlimited radius */
        //etl::handle<Bezier> find_bezier(synfig::Point pos, synfig::Real radius=0);
@@ -357,9 +369,9 @@ public:
        //! \note parameter is in canvas coordinates
        /*!     A radius of "zero" will have an unlimited radius */
        etl::handle<Bezier> find_bezier(synfig::Point pos, synfig::Real radius=0, float* location=0);
-       
+
        etl::handle<Bezier> find_bezier(synfig::Point pos, synfig::Real scale, synfig::Real radius, float* location=0);
-       
+
        bool add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handle<CanvasView> canvas_view, const synfig::TransformStack& transform_stack_, synfig::ParamDesc *param_desc=0, int multiple=0);
 
        //! \writeme
@@ -369,9 +381,10 @@ public:
        Type get_type_mask()const { return type_mask; }
 
        void select_all_ducks();
+       void unselect_all_ducks();
 
        void clear_ducks();
-       
+
        bool save_sketch(const synfig::String& filename)const;
        bool load_sketch(const synfig::String& filename);
        const synfig::String& get_sketch_filename()const { return sketch_filename_; }
@@ -387,14 +400,14 @@ public:
 class Duckmatic::Push
 {
        Duckmatic *duckmatic_;
-       DuckMap duck_map;       
+       DuckMap duck_map;
        std::list<etl::handle<Bezier> > bezier_list_;
        std::list<etl::handle<Stroke> > stroke_list_;
        DuckDataMap duck_data_share_map;
        etl::handle<DuckDrag_Base> duck_dragger_;
-       
+
        bool needs_restore;
-       
+
 public:
        Push(Duckmatic *duckmatic_);
        ~Push();
@@ -408,7 +421,7 @@ struct Duckmatic::Bezier : public etl::shared_object
 private:
        sigc::signal<void,float> signal_user_click_[5];
 public:
-       
+
        etl::handle<Duck> p1,p2,c1,c2;
        bool is_valid()const { return p1 && p2 && c1 && c2; }
 
@@ -422,7 +435,7 @@ struct Duckmatic::Stroke : public etl::shared_object
 private:
        sigc::signal<void,float> signal_user_click_[5];
 public:
-       
+
        etl::smart_ptr<std::list<synfig::Point> > stroke_data;
 
        synfig::Color color;
@@ -430,7 +443,7 @@ public:
        bool is_valid()const { return (bool)stroke_data; }
 
        sigc::signal<void,float> &signal_user_click(int i=0) { assert(i>=0); assert(i<5); return signal_user_click_[i]; }
-}; // END of struct Duckmatic::Bezier
+}; // END of struct Duckmatic::Stroke
 
 }; // END of namespace studio