source: synfigstudio/trunk/fuentes/.pc/c++11.patch/src/synfigapp/canvasinterface.h @ 481

Last change on this file since 481 was 481, checked in by jrpelegrina, 4 years ago

First release to xenial

File size: 13.6 KB
Line 
1/* === S Y N F I G ========================================================= */
2/*!     \file canvasinterface.h
3**      \brief Template Header
4**
5**      $Id$
6**
7**      \legal
8**      Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
9**      Copyright (c) 2007, 2008 Chris Moore
10**
11**      This package is free software; you can redistribute it and/or
12**      modify it under the terms of the GNU General Public License as
13**      published by the Free Software Foundation; either version 2 of
14**      the License, or (at your option) any later version.
15**
16**      This package is distributed in the hope that it will be useful,
17**      but WITHOUT ANY WARRANTY; without even the implied warranty of
18**      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19**      General Public License for more details.
20**      \endlegal
21*/
22/* ========================================================================= */
23
24/* === S T A R T =========================================================== */
25
26#ifndef __SYNFIG_APP_CANVASINTERFACE_H
27#define __SYNFIG_APP_CANVASINTERFACE_H
28
29/* === H E A D E R S ======================================================= */
30
31//#include <synfig/canvas.h>
32#include <synfig/value.h>
33#include <sigc++/signal.h>
34#include <sigc++/object.h>
35#include <list>
36#include "selectionmanager.h"
37#include "uimanager.h"
38#include "value_desc.h"
39#include "editmode.h"
40
41/* === M A C R O S ========================================================= */
42
43/* === T Y P E D E F S ===================================================== */
44
45/* === C L A S S E S & S T R U C T S ======================================= */
46
47namespace synfig { class ValueNode_DynamicList; class Waypoint; class GUIDSet; class Canvas; };
48
49namespace synfigapp {
50
51namespace Action { class ParamList; class Param; class EditModeSet; };
52
53class Instance;
54class ValueDesc;
55
56class CanvasInterface : public etl::shared_object, public sigc::trackable
57{
58        friend class Instance;
59        friend class Action::EditModeSet;
60
61public:
62
63        typedef EditMode Mode;
64
65private:
66        // Constructor is private to force the use of the "create()" constructor.
67        CanvasInterface(etl::loose_handle<Instance> instance,etl::handle<synfig::Canvas> canvas);
68
69private:
70        etl::loose_handle<Instance> instance_;
71        etl::handle<synfig::Canvas> canvas_;
72        etl::handle<SelectionManager> selection_manager_;
73        etl::handle<UIInterface> ui_interface_;
74        synfig::Time cur_time_;
75        Mode mode_;
76
77        sigc::signal<void,synfig::Layer::Handle> signal_layer_raised_;
78        sigc::signal<void,synfig::Layer::Handle> signal_layer_lowered_;
79        sigc::signal<void,synfig::Layer::Handle,int> signal_layer_inserted_;
80        sigc::signal<void,synfig::Layer::Handle,int,synfig::Canvas::Handle> signal_layer_moved_;
81        sigc::signal<void,synfig::Layer::Handle> signal_layer_removed_;
82        sigc::signal<void,synfig::Layer::Handle,bool> signal_layer_status_changed_;
83        sigc::signal<void,synfig::Layer::Handle,bool> signal_layer_exclude_from_rendering_changed_;
84        sigc::signal<void,synfig::Layer::Handle,bool> signal_layer_z_range_changed_;
85        sigc::signal<void,synfig::Layer::Handle,synfig::String> signal_layer_new_description_;
86        sigc::signal<void,synfig::Canvas::Handle> signal_canvas_added_;
87        sigc::signal<void,synfig::Canvas::Handle> signal_canvas_removed_;
88
89        sigc::signal<void,synfig::ValueNode::Handle> signal_value_node_added_;
90        sigc::signal<void,synfig::ValueNode::Handle> signal_value_node_deleted_;
91        sigc::signal<void,synfig::ValueNode::Handle,synfig::ValueNode::Handle> signal_value_node_replaced_;
92
93        sigc::signal<void,synfig::Keyframe> signal_keyframe_added_;
94        sigc::signal<void,synfig::Keyframe> signal_keyframe_removed_;
95        sigc::signal<void,synfig::Keyframe> signal_keyframe_changed_;
96        sigc::signal<void,synfig::Keyframe,void*> signal_keyframe_selected_;
97        sigc::signal<void> signal_keyframe_properties_;
98
99        sigc::signal<void> signal_id_changed_;
100
101        sigc::signal<void> signal_time_changed_;
102
103        sigc::signal<void> signal_rend_desc_changed_;
104
105        sigc::signal<void,Mode> signal_mode_changed_;
106
107        //sigc::signal<void> signal_dirty_preview_;
108
109        sigc::signal<void,synfig::Layer::Handle,synfig::String> signal_layer_param_changed_;
110
111public: // Signal Interface
112
113        sigc::signal<void,synfig::Layer::Handle,int,synfig::Canvas::Handle>& signal_layer_moved() { return signal_layer_moved_; }
114
115        sigc::signal<void,synfig::Layer::Handle,synfig::String>& signal_layer_new_description() { return signal_layer_new_description_; }
116
117        //! Signal called when layer is raised.
118        sigc::signal<void,synfig::Layer::Handle>& signal_layer_raised() { return signal_layer_raised_; }
119
120        //! Signal called when layer is lowered.
121        sigc::signal<void,synfig::Layer::Handle>& signal_layer_lowered() { return signal_layer_lowered_; }
122
123        //! Signal called when layer has been inserted at a given position.
124        sigc::signal<void,synfig::Layer::Handle,int>& signal_layer_inserted() { return signal_layer_inserted_; }
125
126        //! Signal called when a layer has been removed from the canvas.
127        sigc::signal<void,synfig::Layer::Handle>& signal_layer_removed() { return signal_layer_removed_; }
128
129        //! Signal called when the layer's active status has changed.
130        sigc::signal<void,synfig::Layer::Handle,bool>& signal_layer_status_changed() { return signal_layer_status_changed_; }
131
132        //! Signal called when the layer's "exclude from rendering" flag has changed.
133        sigc::signal<void,synfig::Layer::Handle,bool>& signal_layer_exclude_from_rendering_changed() { return signal_layer_exclude_from_rendering_changed_; }
134
135        //! Signal called when the layer's zdepth range has changed. This layer has to be Layer_PasteCanvas
136        sigc::signal<void,synfig::Layer::Handle,bool>& signal_layer_z_range_changed() { return signal_layer_z_range_changed_; }
137
138        //! Signal called when a canvas has been added.
139        sigc::signal<void,etl::handle<synfig::Canvas> >& signal_canvas_added() { return signal_canvas_added_; }
140
141        //! Signal called when a canvas has been removed.
142        sigc::signal<void,etl::handle<synfig::Canvas> >& signal_canvas_removed() { return signal_canvas_removed_; }
143
144        //! Signal called when a layer's parameter has been changed
145        sigc::signal<void,synfig::Layer::Handle,synfig::String>& signal_layer_param_changed() { return signal_layer_param_changed_; }
146
147        //! Signal called when the canvas's preview needs to be updated
148        //sigc::signal<void>& signal_dirty_preview() { return signal_dirty_preview_; }
149        sigc::signal<void>& signal_dirty_preview() { return get_canvas()->signal_dirty(); }
150
151        sigc::signal<void,etl::handle<synfig::ValueNode>,etl::handle<synfig::ValueNode> >&
152                signal_value_node_child_added() { return get_canvas()->signal_value_node_child_added(); }
153        sigc::signal<void,etl::handle<synfig::ValueNode>,etl::handle<synfig::ValueNode> >&
154                signal_value_node_child_removed() { return get_canvas()->signal_value_node_child_removed(); }
155
156        //! Signal called when a ValueNode has changed
157        sigc::signal<void,etl::handle<synfig::ValueNode> >& signal_value_node_added() { return signal_value_node_added_; }
158
159        //! Signal called when a ValueNode has been deleted
160        sigc::signal<void,etl::handle<synfig::ValueNode> >& signal_value_node_deleted() { return signal_value_node_deleted_; }
161
162        //! Signal called when a ValueNode has been changed
163        sigc::signal<void,etl::handle<synfig::ValueNode> >& signal_value_node_changed() { return get_canvas()->signal_value_node_changed(); }
164
165        //! Signal called when a ValueNode has been renamed
166        sigc::signal<void,etl::handle<synfig::ValueNode> >& signal_value_node_renamed() { return get_canvas()->signal_value_node_renamed(); }
167
168        //! Signal called when the mode has changed
169        sigc::signal<void,Mode> signal_mode_changed() { return signal_mode_changed_; }
170
171        //! Signal called when a the ID has been changed
172        sigc::signal<void>& signal_id_changed() { return signal_id_changed_; }
173
174        //! Signal called whenever the time changes
175        sigc::signal<void> signal_time_changed() { return signal_time_changed_; }
176
177        //! Signal called whenever a data node has been replaced.
178        /*!     Second ValueNode replaces first */
179        sigc::signal<void,synfig::ValueNode::Handle,synfig::ValueNode::Handle>& signal_value_node_replaced()
180                { return signal_value_node_replaced_; }
181
182        //! Signal called whenever the RendDesc changes
183        sigc::signal<void>& signal_rend_desc_changed() { return signal_rend_desc_changed_; }
184
185        //! Signal called when a keyframe is added
186        sigc::signal<void,synfig::Keyframe>& signal_keyframe_added() { return signal_keyframe_added_; }
187        //! Signal called when a keyframe is removed
188        sigc::signal<void,synfig::Keyframe>& signal_keyframe_removed() { return signal_keyframe_removed_; }
189        //! Signal called when a keyframe is changed
190        sigc::signal<void,synfig::Keyframe>& signal_keyframe_changed() { return signal_keyframe_changed_; }
191        //! Signal called when a keyframe is selected
192        /*!     Second parameter (void*) hold 'this*' of the signal emiter class (to prevent endless loop)*/
193        sigc::signal<void,synfig::Keyframe,void*>& signal_keyframe_selected() { return signal_keyframe_selected_; }
194        //! Signal called when the properties dialog of the selected keyframe must be shown
195        sigc::signal<void>& signal_keyframe_properties() { return signal_keyframe_properties_; }
196
197public:
198
199        void auto_export(const ValueDesc& value_desc);
200
201        void auto_export(synfig::ValueNode::Handle value_node);
202
203        void set_meta_data(const synfig::String& key,const synfig::String& data);
204
205        void erase_meta_data(const synfig::String& key);
206
207        //! Changes the current SelectionManager object
208        void set_selection_manager(const etl::handle<SelectionManager> &sm) { selection_manager_=sm; }
209
210        //! Disables the selection manager
211        void unset_selection_manager() { selection_manager_=new NullSelectionManager(); }
212
213        //! Returns a handle to the current SelectionManager
214        const etl::handle<SelectionManager> &get_selection_manager()const { return selection_manager_; }
215
216        //! Changes the current UIInterface object
217        void set_ui_interface(const etl::handle<UIInterface> &uim) { ui_interface_=uim; }
218
219        //! Disables the UIInterface
220        void unset_ui_interface() { ui_interface_=new DefaultUIInterface(); }
221
222        //! Returns a handle to the current UIInterface
223        const etl::handle<UIInterface> &get_ui_interface() { return ui_interface_; }
224
225        //! Returns the Canvas associated with this interface
226        etl::handle<synfig::Canvas> get_canvas()const { return canvas_; }
227
228        //! Returns the Instance associated with this interface
229        etl::loose_handle<Instance> get_instance()const { return instance_; }
230
231        //! Changes the name of the canvas. Undoable.
232        void set_name(const synfig::String &x);
233
234        //! Changes the description of the canvas. Undoable.
235        void set_description(const synfig::String &x);
236
237        //! Changes the ID of the canvas. Undoable.
238        void set_id(const synfig::String &x);
239
240        //! Convenience function to retrieve the name of the canvas
241        synfig::String get_name()const { return get_canvas()->get_name(); }
242
243        //! Convenience function to retrieve the description of the canvas
244        synfig::String get_description()const { return get_canvas()->get_description(); }
245
246        //! Convenience function to retrieve the ID of the canvas
247        synfig::String get_id()const { return get_canvas()->get_id(); }
248
249        //! Sets the current time
250        void set_time(synfig::Time x);
251
252        //! Retrieves the current time
253        synfig::Time get_time()const;
254
255        //! Changes the current time to the next keyframe
256        void jump_to_next_keyframe();
257
258        //! Changes the current time to the next keyframe
259        void jump_to_prev_keyframe();
260
261        void seek_frame(int frames);
262
263        void seek_time(synfig::Time time);
264
265        //! \writeme
266        void refresh_current_values();
267
268        //! Sets the current editing mode
269        /*! \see Mode */
270        void set_mode(Mode x);
271
272        //! Retrieves the current editing mode
273        /*! \see Mode */
274        Mode get_mode()const;
275
276        //! Applies initial param values for \c layer
277        /*! canvas property of layer should be set before call */
278        void apply_layer_param_defaults(synfig::Layer::Handle layer);
279
280        //! Creates a new layer, of type \c id at the top of the layer stack
281        // synfig::Layer::Handle add_layer(synfig::String id) { return add_layer_to(id,get_canvas()); }
282
283        synfig::Layer::Handle add_layer_to(synfig::String id,synfig::Canvas::Handle canvas, int depth=0);
284
285        bool convert(ValueDesc value_desc, synfig::String type);
286        //! Adds the given ValueNode to the canvas.
287        bool add_value_node(synfig::ValueNode::Handle value_node, synfig::String name);
288
289
290        Action::ParamList generate_param_list(const synfigapp::ValueDesc &);
291
292        Action::ParamList generate_param_list(const std::list<synfigapp::ValueDesc> &);
293
294        void set_rend_desc(const synfig::RendDesc &rend_desc);
295
296        bool import(const synfig::String &filename, synfig::String &errors, synfig::String &warnings, bool resize_image=false);
297
298
299        void waypoint_duplicate(synfigapp::ValueDesc value_desc,synfig::Waypoint waypoint);
300        void waypoint_duplicate(synfig::ValueNode::Handle value_node,synfig::Waypoint waypoint);
301
302        void waypoint_remove(synfigapp::ValueDesc value_desc,synfig::Waypoint waypoint);
303        void waypoint_remove(synfig::ValueNode::Handle value_node,synfig::Waypoint waypoint);
304
305        bool change_value(synfigapp::ValueDesc value_desc,synfig::ValueBase new_value,bool lock_animation = false);
306
307
308        int find_important_value_descs(std::vector<synfigapp::ValueDesc>& out);
309        static int find_important_value_descs(synfig::Canvas::Handle canvas,std::vector<synfigapp::ValueDesc>& out,synfig::GUIDSet& guid_set);
310
311        ~CanvasInterface();
312
313        static etl::handle<CanvasInterface> create(etl::loose_handle<Instance> instance,etl::handle<synfig::Canvas> canvas);
314}; // END of class CanvasInterface
315
316/*!     \class PushMode
317**      \brief Class that changes the mode of a CanvasInterface, and restores it on destruction.
318*/
319class PushMode
320{
321        CanvasInterface* canvas_interface_;
322        CanvasInterface::Mode old_mode_;
323public:
324        PushMode(etl::loose_handle<CanvasInterface> c, CanvasInterface::Mode mode):
325                canvas_interface_(c.get()), old_mode_(canvas_interface_->get_mode())
326        { canvas_interface_->set_mode(mode); }
327
328        ~PushMode() { canvas_interface_->set_mode(old_mode_); }
329}; // END of class PushMode
330
331}; // END of namespace synfigapp
332
333/* === E N D =============================================================== */
334
335#endif
Note: See TracBrowser for help on using the repository browser.