1 /* === S Y N F I G ========================================================= */
2 /*! \file cellrenderer_timetrack.h
3 ** \brief Template Header
8 ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
9 ** Copyright (c) 2007, 2008 Chris Moore
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.
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.
22 /* ========================================================================= */
24 /* === S T A R T =========================================================== */
26 #ifndef __SYNFIG_GTKMM_CELLRENDERER_TIMETRACK_H
27 #define __SYNFIG_GTKMM_CELLRENDERER_TIMETRACK_H
29 /* === H E A D E R S ======================================================= */
32 #include <gtkmm/ruler.h>
33 #include <gtkmm/arrow.h>
34 #include <gtkmm/image.h>
35 #include <gdkmm/pixbufloader.h>
36 #include <gtkmm/viewport.h>
37 #include <gtkmm/adjustment.h>
38 #include <gtkmm/scrolledwindow.h>
39 #include <gtkmm/table.h>
40 #include <gtkmm/statusbar.h>
41 #include <gtkmm/button.h>
42 #include <gtkmm/progressbar.h>
43 #include <gtkmm/paned.h>
44 #include <gtkmm/treeview.h>
45 #include <gtkmm/treestore.h>
46 #include <gtkmm/adjustment.h>
47 #include <gtkmm/box.h>
48 #include <gtkmm/scrollbar.h>
49 #include <gtkmm/cellrenderer.h>
51 #include <gtkmm/dialog.h>
52 #include <gtkmm/menu.h>
55 #include <synfigapp/canvasinterface.h>
56 #include <synfigapp/value_desc.h>
57 #include <synfig/valuenode_animated.h>
58 #include <synfig/valuenode_dynamiclist.h>
59 #include <synfig/string.h>
60 #include <synfig/time.h>
62 /* === M A C R O S ========================================================= */
64 /* === T Y P E D E F S ===================================================== */
67 /* === C L A S S E S & S T R U C T S ======================================= */
70 class Widget_ValueBase;
72 /*! \class CellRenderer_TimeTrack
73 ** \brief A cell renderer that displays the waypoints for Animated ValueNodes.
75 class CellRenderer_TimeTrack :
76 public Gtk::CellRenderer
80 -- ** -- P R I V A T E D A T A ---------------------------------------------
84 //! Time adjustment window
85 Gtk::Adjustment adjustment_;
87 //! Signal for when the user clicks on a waypoint
88 sigc::signal<void, const etl::handle<synfig::Node>&, const synfig::Time&, const synfig::Time&, int> signal_waypoint_clicked_cellrenderer_;
90 sigc::signal<void, synfig::Waypoint, synfig::ValueNode::Handle> signal_waypoint_changed_;
92 //! Iterator for selected waypoint. (Should this be an UniqueID instead?)
93 synfig::ValueNode_Animated::WaypointList::iterator selected_waypoint;
95 synfig::UniqueID selected;
97 //! selected information for time... (will work for way points etc...)
98 //TODO: make multiple... on both time and value select...
99 std::set<synfig::Time> sel_times;
100 synfigapp::ValueDesc sel_value;
101 synfig::Time actual_time;
102 synfig::Time actual_dragtime;
106 synfig::Time selected_time;
108 //! The path to the current item in the tree model
116 synfig::Time drag_time;
118 etl::loose_handle<synfigapp::CanvasInterface> canvas_interface_;
121 -- ** -- P R O P E R T I E S -------------------------------------------------
127 Glib::Property<synfigapp::ValueDesc> property_valuedesc_;
130 Glib::Property<synfig::Canvas::Handle> property_canvas_;
132 //! ??? \see adjustment_
133 Glib::Property<Gtk::Adjustment* > property_adjustment_;
136 Glib::Property<bool> property_enable_timing_info_;
139 -- ** -- P R O P E R T Y I N T E R F A C E S -------------------------------
144 Glib::PropertyProxy<synfigapp::ValueDesc> property_value_desc();
146 Glib::PropertyProxy<synfig::Canvas::Handle> property_canvas();
148 Glib::PropertyProxy<Gtk::Adjustment* > property_adjustment();
151 -- ** -- S I G N A L I N T E R F A C E S -----------------------------------
156 sigc::signal<void, const etl::handle<synfig::Node>&, const synfig::Time&, const synfig::Time&, int> &signal_waypoint_clicked_cellrenderer()
157 {return signal_waypoint_clicked_cellrenderer_; }
159 sigc::signal<void, synfig::Waypoint, synfig::ValueNode::Handle> &signal_waypoint_changed()
160 {return signal_waypoint_changed_; }
163 -- ** -- P U B L I C M E T H O D S -----------------------------------------
168 CellRenderer_TimeTrack();
169 ~CellRenderer_TimeTrack();
171 void set_adjustment(Gtk::Adjustment &x);
172 Gtk::Adjustment *get_adjustment();
173 const Gtk::Adjustment *get_adjustment()const;
175 etl::loose_handle<synfigapp::CanvasInterface> canvas_interface()const {return canvas_interface_;}
176 void set_canvas_interface(etl::loose_handle<synfigapp::CanvasInterface> h); //this should only be called by smart people
178 synfig::Canvas::Handle get_canvas()const;
180 bool is_selected(const synfig::Waypoint& waypoint)const;
182 synfig::ValueNode_Animated::WaypointList::iterator find_waypoint(const synfig::Time& t, const synfig::Time& scope=synfig::Time::end());
186 const Glib::RefPtr<Gdk::Drawable>& window,
188 const Gdk::Rectangle& background_area,
189 const Gdk::Rectangle& ca,
190 const Gdk::Rectangle& expose_area,
191 Gtk::CellRendererState flags);
194 activate_vfunc( GdkEvent* event,
196 const Glib::ustring& path,
197 const Gdk::Rectangle& background_area,
198 const Gdk::Rectangle& cell_area,
199 Gtk::CellRendererState flags);
201 }; // END of class CellRenderer_TimeTrack
203 }; // END of namespace studio
205 /* === E N D =============================================================== */