synfig-studio  1.0.3
widget_keyframe_list.h
Go to the documentation of this file.
1 /* === S Y N F I G ========================================================= */
22 /* ========================================================================= */
23 
24 /* === S T A R T =========================================================== */
25 
26 #ifndef __SYNFIG_STUDIO_WIDGET_KEYFRAME_LIST_H
27 #define __SYNFIG_STUDIO_WIDGET_KEYFRAME_LIST_H
28 
29 /* === H E A D E R S ======================================================= */
30 
31 #include <gtkmm/drawingarea.h>
32 #include <gtkmm/adjustment.h>
33 #include <gtkmm/tooltip.h>
34 #include <gtkmm/window.h>
35 #include <synfig/keyframe.h>
36 #include <sigc++/connection.h>
38 
39 
40 /* === M A C R O S ========================================================= */
41 
42 /* === T Y P E D E F S ===================================================== */
43 
44 /* === C L A S S E S & S T R U C T S ======================================= */
45 
46 namespace studio {
47 
48 class Widget_Keyframe_List : public Gtk::DrawingArea
49 {
51  etl::loose_handle<synfigapp::CanvasInterface> canvas_interface_;
52 
54  Glib::RefPtr<Gtk::Adjustment> adj_default;
55  Glib::RefPtr<Gtk::Adjustment> adj_timescale;
56 
58  synfig::KeyframeList default_kf_list_;
59  mutable synfig::KeyframeList* kf_list_;
60 
62  float fps;
63 
65  synfig::Time time_ratio;
66 
68  bool editable_;
69 
71  bool dragging_;
72 
74  bool changed_;
75 
77  synfig::Keyframe selected_kf;
78  synfig::Keyframe selected_none;
79  bool selected_;
80 
82  synfig::Time selected_kf_time;
83 
85  synfig::Time dragging_kf_time;
86 
88  sigc::connection time_value_change;
89  sigc::connection time_other_change;
90 
91 public:
92 
95 
98 
100  void set_kf_list(synfig::KeyframeList* x);
101 
103  synfig::KeyframeList* get_kf_list()const { return kf_list_; }
104 
106  void set_editable(bool x=true) { editable_=x; }
107 
109  bool get_editable()const { return editable_; }
110 
112  void set_selected_keyframe(const synfig::Keyframe &x);
113 
115  // \return The selected keyframe
116  const synfig::Keyframe& get_selected_keyframe() { return selected_kf; }
117 
119  void set_time_adjustment(const Glib::RefPtr<Gtk::Adjustment> &x);
120 
122  // \param x[in] Value for the frames per second
123  void set_fps(float x);
124 
126  void set_canvas_interface(etl::loose_handle<synfigapp::CanvasInterface> h);
127 
131  bool perform_move_kf(bool delta);
132 
133  static void draw_arrow(
134  const Cairo::RefPtr<Cairo::Context> &cr,
135  double x, double y,
136  double width, double height,
137  bool fill,
138  const synfig::Color &color );
139 
140 
141 /* ======================= EVENTS HANDLERS ===========================*/
142  bool on_draw(const Cairo::RefPtr<Cairo::Context> &cr);
143 
145  bool on_event(GdkEvent *event);
146 
148  // \param[in] keyframe The selected keyframe
149  // \param[in] emitter The widget who emit the signal
150  void on_keyframe_selected(synfig::Keyframe keyframe, void* emitter);
151 
152  /*
153  -- ** -- P R I V A T E D A T A ---------------------------------------------
154  */
155 
156 private:
157 
159  Gtk::Window *moving_tooltip_;
161  Gtk::Label *moving_tooltip_label_;
163  int moving_tooltip_y_;
164 
165 }; // END of class Keyframe_List
166 
167 }; // END of namespace studio
168 
169 
170 /* === E N D =============================================================== */
171 
172 #endif