my log
[synfig.git] / synfig-studio / trunk / src / gtkmm / widget_timeslider.h
1 /* === S Y N F I G ========================================================= */
2 /*!     \file widget_timeslider.h
3 **      \brief Time Slider Widget Header
4 **
5 **      $Id: widget_timeslider.h,v 1.1.1.1 2005/01/07 03:34:37 darco Exp $
6 **
7 **      \legal
8 **      Copyright (c) 2004 Adrian Bentley
9 **
10 **      This software and associated documentation
11 **      are CONFIDENTIAL and PROPRIETARY property of
12 **      the above-mentioned copyright holder.
13 **
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.
18 **      \endlegal
19 */
20 /* ========================================================================= */
21
22 /* === S T A R T =========================================================== */
23
24 #ifndef __SYNFIG_WIDGET_TIMESLIDER_H
25 #define __SYNFIG_WIDGET_TIMESLIDER_H
26
27 /* === H E A D E R S ======================================================= */
28 #include <gtkmm/drawingarea.h>
29 #include <gtkmm/adjustment.h>
30
31 #include <synfig/time.h>
32 #include "canvasview.h"
33
34 /* === M A C R O S ========================================================= */
35
36 /* === T Y P E D E F S ===================================================== */
37
38 /* === C L A S S E S & S T R U C T S ======================================= */
39
40 namespace studio {
41
42 void render_time_point_to_window(const Glib::RefPtr<Gdk::Drawable>& window,const Gdk::Rectangle& ca,const synfig::TimePoint &tp,bool selected=false);
43
44         
45 /* Design for the timeslider...
46
47         Concept: Scalable ruler
48                 Ticks are done every so often (30 s, 10 frames, 5 frames, etc.) 
49                 Print out frame numbers next to the big ticks
50                 Show blue pills in separate area (above or below)
51 */
52
53 class Widget_Timeslider : public Gtk::DrawingArea
54 {
55 protected: //implementation that other interfaces can see
56         Glib::RefPtr<Pango::Layout> layout; //implementation awesomeness for text drawing
57
58         Gtk::Adjustment adj_default;
59         Gtk::Adjustment *adj_timescale;
60
61         //HACK - I should not have to see this...
62         Gtk::Adjustment *adj_bounds;
63         
64         //Statistics used for drawing stuff (and making sure we don't if we don't need to)
65         /*double start,end;
66         double current;
67         
68         bool invalidated;*/
69         
70         guint32 last_event_time;
71
72         float fps;
73         
74         sigc::connection time_value_change;
75         sigc::connection time_other_change;
76         
77         //TODO: fill out blue pill stuff
78         
79         //input functions
80         
81         virtual bool on_motion_notify_event(GdkEventMotion* event); //for dragging
82         virtual bool on_scroll_event(GdkEventScroll* event); //for zooming
83         virtual bool on_button_press_event(GdkEventButton *event); //for clicking
84         virtual bool on_button_release_event(GdkEventButton *event); //for clicking
85         
86         virtual bool on_expose_event(GdkEventExpose *event) {redraw(); return true;}//for drawing
87         
88         virtual bool redraw(bool doublebuffer = false);
89         
90         //void update_times();
91         
92         void zoom_in(bool centerontime = false);
93         void zoom_out(bool centerontime = false);
94         
95         //Drag the Frame
96         bool dragscroll;
97         
98         /*NOTE: if we can set the mouse position to the original position
99                         this would only have to be set once (and it would be good otherwise too)
100         */
101         double lastx; //last mouse position for dragging
102                 
103 public: //structors
104         Widget_Timeslider();
105         ~Widget_Timeslider();
106
107 public: //Normal Interface
108         
109         void draw() {redraw();}
110         virtual void refresh(); //reget bluepills, time values and queue_draw if need be
111
112 public: //Time Interface
113
114         //Run FPS stuff through it to the MAX
115         double get_global_fps() const {return fps;}
116         void set_global_fps(float d);
117
118         //accessors for the time adjustment
119         Gtk::Adjustment &get_time_adjustment() const {return *adj_timescale;}   
120         void set_time_adjustment(Gtk::Adjustment *x);
121         
122         //HACK - I should not have to see these bounds (should be boundless)
123         Gtk::Adjustment &get_bounds_adjustment() const {return *adj_bounds;}    
124         void set_bounds_adjustment(Gtk::Adjustment *x) {adj_bounds = x;}
125 };
126         
127 }; // END of namespace studio
128
129 /* === E N D =============================================================== */
130
131 #endif