Applied user interface rework patch by David Roden (Bombe)
[synfig.git] / synfig-studio / trunk / src / gtkmm / renddesc.h
1 /*! ========================================================================
2 ** Synfig
3 ** Template Header File
4 ** $Id: renddesc.h,v 1.1.1.1 2005/01/07 03:34:36 darco Exp $
5 **
6 **      Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
7 **
8 **      This package is free software; you can redistribute it and/or
9 **      modify it under the terms of the GNU General Public License as
10 **      published by the Free Software Foundation; either version 2 of
11 **      the License, or (at your option) any later version.
12 **
13 **      This package is distributed in the hope that it will be useful,
14 **      but WITHOUT ANY WARRANTY; without even the implied warranty of
15 **      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 **      General Public License for more details.
17 **
18 ** === N O T E S ===========================================================
19 **
20 ** ========================================================================= */
21
22 /* === S T A R T =========================================================== */
23
24 #ifndef __SYNFIG_GTKMM_RENDDESC_H
25 #define __SYNFIG_GTKMM_RENDDESC_H
26
27 /* === H E A D E R S ======================================================= */
28
29 #include <gtkmm/table.h>
30 #include <gtkmm/frame.h>
31 #include <synfig/renddesc.h>
32 #include <gtkmm/spinbutton.h>
33 #include <gtkmm/adjustment.h>
34 #include <gtkmm/checkbutton.h>
35 #include <gtkmm/notebook.h>
36 #include "widget_vector.h"
37 #include "widget_time.h"
38
39 /* === M A C R O S ========================================================= */
40
41 /* === T Y P E D E F S ===================================================== */
42
43 /* === C L A S S E S & S T R U C T S ======================================= */
44
45 namespace studio {
46
47 class Widget_RendDesc : public Gtk::Notebook
48 {
49         synfig::RendDesc rend_desc_;
50         sigc::signal<void> signal_changed_;
51
52         Gtk::Adjustment adjustment_width;
53         Gtk::Adjustment adjustment_height;
54         Gtk::Adjustment adjustment_xres;
55         Gtk::Adjustment adjustment_yres;
56         Gtk::Adjustment adjustment_phy_width;
57         Gtk::Adjustment adjustment_phy_height;
58         Gtk::Adjustment adjustment_fps;
59         //Gtk::Adjustment adjustment_start_time;
60         //Gtk::Adjustment adjustment_end_time;
61         //Gtk::Adjustment adjustment_start_frame;
62         //Gtk::Adjustment adjustment_end_frame;
63         Gtk::Adjustment adjustment_span;
64         
65         Gtk::SpinButton *entry_width;   
66         Gtk::SpinButton *entry_height;  
67         Gtk::SpinButton *entry_xres;    
68         Gtk::SpinButton *entry_yres;    
69         Gtk::SpinButton *entry_phy_width;       
70         Gtk::SpinButton *entry_phy_height;      
71         Gtk::SpinButton *entry_fps;     
72 //      Gtk::SpinButton *entry_start_time;      
73 //      Gtk::SpinButton *entry_end_time;        
74 //      Gtk::SpinButton *entry_start_frame;     
75 //      Gtk::SpinButton *entry_end_frame;       
76         Gtk::SpinButton *entry_span;    
77
78         Gtk::CheckButton *toggle_px_aspect;
79         Gtk::CheckButton *toggle_px_width;
80         Gtk::CheckButton *toggle_px_height;
81
82         Gtk::CheckButton *toggle_im_aspect;
83         Gtk::CheckButton *toggle_im_width;
84         Gtk::CheckButton *toggle_im_height;
85         Gtk::CheckButton *toggle_im_span;
86
87         /* Gtk::Table *time_table; */
88         Gtk::Frame *time_frame;
89
90         Widget_Vector *entry_tl;
91         Widget_Vector *entry_br;
92
93         Widget_Vector *entry_focus;
94
95         Widget_Time *entry_start_time;
96         Widget_Time *entry_end_time;
97
98         mutable int update_lock;
99
100         struct UpdateLock
101         {
102                 int &locked;
103                 UpdateLock(int &locked):locked(locked){locked++;}
104                 ~UpdateLock(){locked--;}
105         };
106         
107 public:
108
109         sigc::signal<void> &signal_changed() { return signal_changed_; }
110
111         Widget_RendDesc();
112         ~Widget_RendDesc();
113         
114         //! Sets the RendDesc
115         void set_rend_desc(const synfig::RendDesc &rend_desc);
116
117         //! Applies the given RendDesc to the current RendDesc
118         void apply_rend_desc(const synfig::RendDesc &rend_desc);
119
120         //! Retrieves the current RendDesc
121         const synfig::RendDesc &get_rend_desc();
122
123         void disable_time_section();
124         
125         void enable_time_section();
126         
127         void refresh();
128 private:
129         
130         void on_width_changed();
131         void on_height_changed();
132         void on_xres_changed();
133         void on_yres_changed();
134         void on_phy_width_changed();
135         void on_phy_height_changed();
136         void on_tl_changed();
137         void on_br_changed();
138         void on_fps_changed();
139         void on_start_time_changed();
140         void on_end_time_changed();
141         //void on_start_frame_changed();
142         //void on_end_frame_changed();
143         void on_lock_changed();
144         void on_focus_changed();
145         void on_span_changed();
146
147         void create_widgets();
148         void connect_signals();
149         Gtk::Widget *create_image_tab();
150         Gtk::Widget *create_time_tab();
151         Gtk::Widget *create_other_tab();
152 };
153         
154 }; // END of namespace studio
155
156 /* === E N D =============================================================== */
157
158 #endif