1 /* === S Y N F I G ========================================================= */
3 ** \brief Template Header
5 ** $Id: layertree.h,v 1.1.1.1 2005/01/07 03:34:36 darco Exp $
8 ** Copyright (c) 2002 Robert B. Quattlebaum Jr.
10 ** This software and associated documentation
11 ** are CONFIDENTIAL and PROPRIETARY property of
12 ** the above-mentioned copyright holder.
14 ** You may not copy, print, publish, or in any
15 ** other way distribute this software without
16 ** a prior written agreement with
17 ** the copyright holder.
20 /* ========================================================================= */
22 /* === S T A R T =========================================================== */
24 #ifndef __SYNFIG_STUDIO_LAYERTREE_H
25 #define __SYNFIG_STUDIO_LAYERTREE_H
27 /* === H E A D E R S ======================================================= */
29 #include <gtkmm/treeview.h>
30 #include <gtkmm/treestore.h>
31 #include <gtkmm/tooltips.h>
32 #include <gtkmm/table.h>
33 #include <gtkmm/box.h>
34 #include <gtkmm/adjustment.h>
35 #include <gtkmm/scale.h>
36 #include <gtkmm/button.h>
38 #include <synfigapp/canvasinterface.h>
39 #include <synfigapp/value_desc.h>
40 #include "layertreestore.h"
41 #include "layerparamtreestore.h"
42 #include <synfig/valuenode_animated.h>
44 #include "widget_value.h"
46 /* === M A C R O S ========================================================= */
48 /* === T Y P E D E F S ===================================================== */
50 /* === C L A S S E S & S T R U C T S ======================================= */
52 namespace Gtk { class TreeModelSort; };
56 class CellRenderer_TimeTrack;
57 class CellRenderer_ValueBase;
59 class LayerTree : public Gtk::Table
62 -- ** -- P U B L I C T Y P E S ---------------------------------------------
67 typedef studio::ColumnID ColumnID;
74 COLUMNID_END //!< \internal
77 typedef std::list<synfig::Layer::Handle> LayerList;
80 -- ** -- P U B L I C D A T A ------------------------------------------------
85 //LayerTreeStore::Model model;
87 LayerTreeStore::Model layer_model;
88 LayerParamTreeStore::Model param_model;
90 synfig::Layer::Handle last_top_selected_layer;
91 Gtk::TreePath last_top_selected_path;
94 -- ** -- P R I V A T E D A T A ---------------------------------------------
99 Gtk::Tooltips tooltips_;
100 Gtk::TreePath last_tooltip_path;
104 Gtk::TreeView* layer_tree_view_;
106 Gtk::TreeView* param_tree_view_;
112 Gtk::Adjustment layer_amount_adjustment_;
114 Gtk::HScale *layer_amount_hscale;
116 synfig::Layer::Handle quick_layer;
118 Glib::RefPtr<LayerTreeStore> layer_tree_store_;
120 Glib::RefPtr<LayerParamTreeStore> param_tree_store_;
122 Glib::RefPtr<Gtk::TreeModelSort> sorted_layer_tree_store_;
124 // CellRenderer_TimeTrack *cellrenderer_time_track;
126 Gtk::TreeView::Column* column_time_track;
128 Gtk::TreeView::Column* column_z_depth;
130 CellRenderer_ValueBase *cellrenderer_value;
132 sigc::signal<void,synfig::Layer::Handle> signal_layer_toggle_;
134 sigc::signal<void,synfigapp::ValueDesc,synfig::ValueBase> signal_edited_value_;
136 sigc::signal<bool, int, Gtk::TreeRow, ColumnID> signal_layer_user_click_;
138 sigc::signal<bool, int, Gtk::TreeRow, ColumnID> signal_param_user_click_;
140 sigc::signal<void,synfigapp::ValueDesc,synfig::Waypoint,int> signal_waypoint_clicked_;
142 bool disable_amount_changed_signal;
144 Gtk::Button *button_raise;
145 Gtk::Button *button_lower;
146 Gtk::Button *button_duplicate;
147 Gtk::Button *button_delete;
149 Widget_ValueBase blend_method_widget;
152 -- ** -- P R I V A T E M E T H O D S ---------------------------------------
157 Gtk::Widget* create_layer_tree();
158 Gtk::Widget* create_param_tree();
161 -- ** -- S I G N A L T E R M I N A L S -------------------------------------
166 void on_edited_value(const Glib::ustring&path_string,synfig::ValueBase value);
168 void on_layer_toggle(const Glib::ustring& path_string);
170 void on_waypoint_clicked(const Glib::ustring &, synfig::Waypoint, int button);
172 void on_waypoint_changed( synfig::Waypoint waypoint , synfig::ValueNode::Handle value_node);
174 bool on_layer_tree_event(GdkEvent *event);
176 bool on_param_tree_event(GdkEvent *event);
178 void on_selection_changed();
180 void on_dirty_preview();
182 void on_amount_value_changed();
184 void on_blend_method_changed();
188 void on_raise_pressed();
190 void on_lower_pressed();
192 void on_duplicate_pressed();
194 void on_delete_pressed();
197 -- ** -- P U B L I C M E T H O D S -----------------------------------------
202 //Gtk::TreeView* get_param_tree_view() { return param_tree_view_; }
203 Gtk::TreeView& param_tree_view() { return *param_tree_view_; }
204 Gtk::HBox& get_hbox() { return *hbox; }
206 Gtk::TreeView& get_layer_tree_view() { return *layer_tree_view_; }
207 Gtk::TreeView& get_param_tree_view() { return *param_tree_view_; }
209 const Gtk::TreeView& get_layer_tree_view()const { return *layer_tree_view_; }
210 const Gtk::TreeView& get_param_tree_view()const { return *param_tree_view_; }
212 Glib::RefPtr<Gtk::TreeSelection> get_selection() { return get_layer_tree_view().get_selection(); }
213 Glib::SignalProxy1< bool,GdkEvent* > signal_event () { return get_layer_tree_view().signal_event(); }
218 void set_model(Glib::RefPtr<LayerTreeStore> layer_tree_store_);
220 void set_time_adjustment(Gtk::Adjustment &adjustment);
222 void set_show_timetrack(bool x=true);
224 //! Signal called when layer is toggled.
225 sigc::signal<void,synfig::Layer::Handle>& signal_layer_toggle() { return signal_layer_toggle_; }
227 //! Signal called with a value has been edited.
228 sigc::signal<void,synfigapp::ValueDesc,synfig::ValueBase>& signal_edited_value() { return signal_edited_value_; }
230 sigc::signal<bool,int, Gtk::TreeRow, ColumnID>& signal_layer_user_click() { return signal_layer_user_click_; }
232 sigc::signal<bool,int, Gtk::TreeRow, ColumnID>& signal_param_user_click() { return signal_param_user_click_; }
234 sigc::signal<void,synfigapp::ValueDesc,synfig::Waypoint,int>& signal_waypoint_clicked() { return signal_waypoint_clicked_; }
236 etl::handle<synfigapp::SelectionManager> get_selection_manager() { return layer_tree_store_->canvas_interface()->get_selection_manager(); }
240 void select_layer(synfig::Layer::Handle layer);
241 void select_layers(const LayerList& layer_list);
242 void select_all_children_layers(synfig::Layer::Handle layer);
243 void select_all_children(Gtk::TreeModel::Children::iterator iter);
244 LayerList get_selected_layers()const;
245 synfig::Layer::Handle get_selected_layer()const;
246 void clear_selected_layers();
248 }; // END of LayerTree
250 }; // END of namespace studio
252 /* === E N D =============================================================== */