canvas.h

Go to the documentation of this file.
00001 /* === S Y N F I G ========================================================= */
00022 /* ========================================================================= */
00023 
00024 /* === S T A R T =========================================================== */
00025 
00026 #ifndef __SYNFIG_CANVAS_H
00027 #define __SYNFIG_CANVAS_H
00028 
00029 /* === H E A D E R S ======================================================= */
00030 
00031 #include <map>
00032 #include <list>
00033 #include <ETL/handle>
00034 #include <sigc++/signal.h>
00035 #include <sigc++/connection.h>
00036 
00037 #include "vector.h"
00038 #include "string.h"
00039 #include "canvasbase.h"
00040 #include "valuenode.h"
00041 #include "keyframe.h"
00042 #include "renddesc.h"
00043 #include "node.h"
00044 #include "guid.h"
00045 
00046 /* === M A C R O S ========================================================= */
00047 
00048 /* === T Y P E D E F S ===================================================== */
00049 
00050 /* === C L A S S E S & S T R U C T S ======================================= */
00051 
00052 namespace synfig {
00053 
00054 class Context;
00055 class GUID;
00056 
00060 class Canvas : public CanvasBase, public Node
00061 {
00062     /*
00063  -- ** -- T Y P E S -----------------------------------------------------------
00064     */
00065 
00066 public:
00067     typedef etl::handle<Canvas> Handle;
00068     typedef etl::loose_handle<Canvas> LooseHandle;
00069     typedef etl::handle<const Canvas> ConstHandle;
00070 
00071     typedef std::list<Handle> Children;
00072 
00073     friend void synfig::optimize_layers(Context, Canvas::Handle, bool seen_motion_blur);
00074 
00075     /*
00076  -- ** -- D A T A -------------------------------------------------------------
00077     */
00078 
00079 private:
00080 
00082 
00083     String id_;
00084 
00086 
00087     String name_;
00088 
00090 
00091     String description_;
00092 
00094 
00095     String author_;
00096 
00098 
00099     String email_;
00100 
00102 
00103     String file_name_;
00104 
00106 
00107     std::map<String, String> meta_data_;
00108 
00110 
00111     ValueNodeList value_node_list_;
00112 
00114     KeyframeList keyframe_list_;
00115 
00117 
00120     LooseHandle parent_;
00121 
00123 
00124     Children children_;
00125 
00127 
00128     RendDesc desc_;
00129 
00131     Time cur_time_;
00132 
00134     mutable std::map<String,Handle> externals_;
00135 
00137     bool is_inline_;
00138 
00139     mutable bool is_dirty_;
00140 
00141     bool op_flag_;
00142 
00144     std::map<String,std::set<etl::handle<Layer> > > group_db_;
00145 
00147     std::map<etl::loose_handle<Layer>,std::vector<sigc::connection> > connections_;
00148 
00149     /*
00150  -- ** -- S I G N A L S -------------------------------------------------------
00151     */
00152 
00153 private:
00154 
00156     sigc::signal<void,String> signal_group_added_;
00157 
00159     sigc::signal<void,String> signal_group_removed_;
00160 
00162     sigc::signal<void,String> signal_group_changed_;
00163 
00164     sigc::signal<void,String,etl::handle<synfig::Layer> > signal_group_pair_added_;
00165     sigc::signal<void,String,etl::handle<synfig::Layer> > signal_group_pair_removed_;
00166 
00168     sigc::signal<void,int*> signal_layers_reordered_;
00169 
00171     sigc::signal<void> signal_rend_desc_changed_;
00172 
00174     sigc::signal<void> signal_id_changed_;
00175 
00177     //sigc::signal<void> signal_dirty_;
00178 
00180     sigc::signal<void> signal_file_name_changed_;
00181 
00183     sigc::signal<void, String> signal_meta_data_changed_;
00184 
00186     std::map<String, sigc::signal<void> > signal_map_meta_data_changed_;
00187 
00188 
00190     sigc::signal<void, etl::handle<ValueNode> > signal_value_node_changed_;
00191 
00192     sigc::signal<void, etl::handle<ValueNode>, etl::handle<ValueNode> > signal_value_node_child_added_;
00193 
00194     sigc::signal<void, etl::handle<ValueNode>, etl::handle<ValueNode> > signal_value_node_child_removed_;
00195 
00196     /*
00197  -- ** -- S I G N A L   I N T E R F A C E -------------------------------------
00198     */
00199 
00200 public:
00201 
00202     sigc::signal<void,String,etl::handle<synfig::Layer> >& signal_group_pair_added() { return signal_group_pair_added_; }
00203     sigc::signal<void,String,etl::handle<synfig::Layer> >& signal_group_pair_removed() { return signal_group_pair_removed_; }
00204 
00206     sigc::signal<void,String>& signal_group_added() { return signal_group_added_; }
00207 
00209     sigc::signal<void,String>& signal_group_removed() { return signal_group_removed_; }
00210 
00212     sigc::signal<void,String>& signal_group_changed() { return signal_group_changed_; }
00213 
00215     sigc::signal<void,int*>& signal_layers_reordered() { return signal_layers_reordered_; }
00216 
00218     sigc::signal<void>& signal_rend_desc_changed() { return signal_rend_desc_changed_; }
00219 
00221     sigc::signal<void>& signal_id_changed() { return signal_id_changed_; }
00222 
00224     sigc::signal<void>& signal_file_name_changed();
00225 
00227     sigc::signal<void, String>& signal_meta_data_changed() { return signal_meta_data_changed_; }
00228 
00230     sigc::signal<void>& signal_meta_data_changed(const String& key) { return signal_map_meta_data_changed_[key]; }
00231 
00232 
00233     sigc::signal<void, etl::handle<ValueNode> >& signal_value_node_changed() { return signal_value_node_changed_; }
00234 
00236     sigc::signal<void>& signal_dirty() { return signal_changed();   }
00237 
00239     sigc::signal<void, etl::handle<ValueNode>, etl::handle<ValueNode> >& signal_value_node_child_added() { return signal_value_node_child_added_; }
00240 
00242     sigc::signal<void, etl::handle<ValueNode>, etl::handle<ValueNode> >& signal_value_node_child_removed() { return signal_value_node_child_removed_; }
00243 
00244     /*
00245  -- ** -- C O N S T R U C T O R S ---------------------------------------------
00246     */
00247 
00248 protected:
00249 
00250     Canvas(const String &name);
00251 
00252 public:
00253 
00254     ~Canvas();
00255 
00256     /*
00257  -- ** -- M E M B E R   F U N C T I O N S -------------------------------------
00258     */
00259 
00260 public:
00261 
00263     std::set<etl::handle<Layer> > get_layers_in_group(const String&group);
00264 
00266     std::set<String> get_groups()const;
00267 
00269     int get_group_count()const;
00270 
00272     void rename_group(const String&old_name,const String&new_name);
00273 
00275     bool is_inline()const { return is_inline_; }
00276 
00278     RendDesc &rend_desc() { return desc_; }
00279 
00281     const RendDesc &rend_desc()const { return desc_; }
00282 
00284     const String & get_name()const { return name_; }
00285 
00287     void set_name(const String &x);
00288 
00290     const String & get_author()const { return author_; }
00291 
00293     void set_author(const String &x);
00294 
00296     const String & get_description()const { return description_; }
00297 
00299     void set_description(const String &x);
00300 
00302     const String & get_id()const { return id_; }
00303 
00305     void set_id(const String &x);
00306 
00308     String get_meta_data(const String& key)const;
00309 
00311     std::list<String> get_meta_data_keys()const;
00312 
00314     void set_meta_data(const String& key, const String& data);
00315 
00317     void erase_meta_data(const String& key);
00318 
00320     String get_relative_id(etl::loose_handle<const Canvas> x)const;
00321 
00323     String _get_relative_id(etl::loose_handle<const Canvas> x)const;
00324 
00326     bool is_root()const { return !parent_; }
00327 
00329 
00330     LooseHandle parent()const { return parent_; }
00331 
00332     LooseHandle get_root()const;
00333 
00335     std::list<Handle> &children() { return children_; }
00336 
00338     const std::list<Handle> &children()const { return children_; }
00339 
00341     //Color get_color(const Point &pos)const;
00342 
00344     void set_time(Time t)const;
00345 
00347     Time get_time()const { return cur_time_; }
00348 
00350     int size()const;
00351 
00353     void clear();
00354 
00356     bool empty()const;
00357 
00359     // ValueNodeList &value_node_list() { return value_node_list_; }
00360 
00362     const ValueNodeList &value_node_list()const;
00363 
00365     KeyframeList &keyframe_list();
00366 
00368     const KeyframeList &keyframe_list()const;
00369 
00371 
00374     ValueNode::Handle find_value_node(const String &id);
00375 
00377     ValueNode::Handle surefind_value_node(const String &id);
00378 
00380 
00383     ValueNode::ConstHandle find_value_node(const String &id)const;
00384 
00386     void add_value_node(ValueNode::Handle x, const String &id);
00387 
00389     //void rename_value_node(ValueNode::Handle x, const String &id);
00390 
00392     void remove_value_node(ValueNode::Handle x);
00393 
00395     void remove_value_node(const String &id) { remove_value_node(find_value_node(id)); }
00396 
00398 
00402     Handle surefind_canvas(const String &id);
00403 
00405 
00408     Handle find_canvas(const String &id);
00409 
00411 
00414     ConstHandle find_canvas(const String &id)const;
00415 
00417     //void set_file_path(const String &);
00418 
00420     String get_file_path()const;
00421 
00423     void set_file_name(const String &);
00424 
00426     String get_file_name()const;
00427 
00429     Handle new_child_canvas();
00430 
00432     Handle new_child_canvas(const String &id);
00433 
00435     Handle add_child_canvas(Handle child_canvas, const String &id);
00436 
00437     void remove_child_canvas(Handle child_canvas);
00438 
00439     etl::handle<Layer> find_layer(const Point &pos);
00440 
00441     int get_depth(etl::handle<Layer>)const;
00442 
00443     Context get_context()const;
00444 
00445     iterator end();
00446 
00447     const_iterator end()const;
00448 
00449     reverse_iterator rbegin();
00450 
00451     const_reverse_iterator rbegin()const;
00452 
00453     etl::handle<Layer> &back();
00454 
00455     void push_back(etl::handle<Layer> x);
00456 
00457     void push_front(etl::handle<Layer> x);
00458 
00459     void push_back_simple(etl::handle<Layer> x);
00460 
00461     void insert(iterator iter,etl::handle<Layer> x);
00462     void erase(iterator iter);
00463 
00464     const etl::handle<Layer> &back()const;
00465 
00466     void set_inline(LooseHandle parent);
00467 
00468     static Handle create();
00469 
00470     static Handle create_inline(Handle parent);
00471 
00472     Handle clone(const GUID& deriv_guid=GUID())const;
00473 
00474 private:
00475     void add_group_pair(String group, etl::handle<Layer> layer);
00476     void remove_group_pair(String group, etl::handle<Layer> layer);
00477     void add_connection(etl::loose_handle<Layer> layer, sigc::connection connection);
00478     void disconnect_connections(etl::loose_handle<Layer> layer);
00479 
00480 protected:
00481     virtual void on_changed();
00482     virtual void get_times_vfunc(Node::time_set &set) const;
00483 }; // END of class Canvas
00484 
00485 void optimize_layers(Context context, Canvas::Handle op_canvas, bool seen_motion_blur=false);
00486 
00487 
00488 }; // END of namespace synfig
00489 
00490 /* === E N D =============================================================== */
00491 
00492 #endif

Generated on Wed Dec 12 03:11:41 2007 for synfig by  doxygen 1.5.4