Code

Clean up a bit. Clarify several variable names. Add a lot of comments.
[inkscape.git] / src / ui / widget / page-sizer.h
1 /** \file
2  * \brief Widget for specifying page size; part of Document Preferences dialog.
3  *
4  * Author:
5  *   Ralf Stephan <ralf@ark.in-berlin.de>
6  *
7  * Copyright (C) 2005-2006 Authors
8  *
9  * Released under GNU GPL.  Read the file 'COPYING' for more information.
10  */
12 #ifndef INKSCAPE_UI_WIDGET_PAGE_SIZER__H
13 #define INKSCAPE_UI_WIDGET_PAGE_SIZER__H
15 #include <gtkmm.h>
16 #include <sigc++/sigc++.h>
17 #include "ui/widget/registry.h"
18 #include "ui/widget/registered-widget.h"
19 #include "helper/units.h"
22 namespace Inkscape {    
23 namespace UI {
24 namespace Widget {
26 /**
27  * Data class used to store common paper dimensions.  Used to make
28  * PageSizer's _paperSizeTable. 
29  */ 
30 class PaperSize
31 {
32 public:
34     /**
35      * Default constructor
36      */
37     PaperSize()
38         { init(); }
40     /**
41      * Main constructor.  Use this one.
42      */
43     PaperSize(const Glib::ustring &nameArg,
44                   double smallerArg,
45                   double largerArg,
46                           SPUnitId unitArg)
47             {
48             name    = nameArg;
49             smaller = smallerArg;
50             larger  = largerArg;
51             unit    = unitArg;
52             }
54     /**
55      * Copy constructor
56      */
57     PaperSize(const PaperSize &other)
58         { assign(other); }
59         
60     /**
61      * Assignment operator
62      */      
63     PaperSize &operator=(const PaperSize &other)
64         { assign(other); return *this; }
66     /**
67      * Destructor
68      */      
69         virtual ~PaperSize()
70             {}
71             
72     /**
73      * Name of this paper specification
74      */      
75     Glib::ustring name;
76     
77     /**
78      * The lesser of the two dimensions
79      */      
80     double smaller;
81     
82     /**
83      * The greater of the two dimensions
84      */      
85     double larger;
86     
87     /**
88      * The units (px, pt, mm, etc) of this specification
89      */      
90     SPUnitId unit;
92 private:
94         void init()
95             {
96             name    = "";
97             smaller = 0.0;
98             larger  = 0.0;
99             unit    = SP_UNIT_PX;
100             }
102         void assign(const PaperSize &other)
103             {
104             name    = other.name;
105             smaller = other.smaller;
106             larger  = other.larger;
107             unit    = other.unit;
108         }
110 };
116 /**
117  * A compound widget that allows the user to select the desired
118  * page size.  This widget is used in DocumentPreferences 
119  */ 
120 class PageSizer : public Gtk::VBox
122 public:
124     /**
125      * Constructor
126      */
127     PageSizer();
129     /**
130      * Destructor
131      */
132     virtual ~PageSizer();
134     /**
135      * Set up or reset this widget
136      */      
137     void init (Registry& reg);
138     
139     /**
140      * Set the page size to the given dimensions.  If 'changeList' is
141      * true, then reset the paper size list to the closest match
142      */
143     void setDim (double w, double h, bool changeList=true);
144  
145 protected:
147     /**
148      * Our handy table of all 'standard' paper sizes.
149      */      
150     std::map<Glib::ustring, PaperSize> paperSizeTable;
152     /**
153      *  Find the closest standard paper size in the table, to the
154      */
155     int find_paper_size (double w, double h) const;
156  
157     void fire_fit_canvas_to_selection_or_drawing();
158     
159     //### Dimension spinboxes
160     RegisteredUnitMenu   _dimensionUnits;
161     RegisteredScalarUnit _dimensionWidth;
162         RegisteredScalarUnit _dimensionHeight;
163     //callback
164     void on_value_changed();
165     sigc::connection    _changedw_connection;
166         sigc::connection    _changedh_connection;
167     
168     //### The Paper Size selection list
169     Gtk::ComboBoxText _paperSizeList;
170     //callback
171     void on_paper_size_list_changed();
172     sigc::connection    _paper_size_list_connection;
173     
174     //### Button to select 'portrait' orientation
175     Gtk::RadioButton    _portraitButton;
176     //callback
177     void on_portrait();
178     sigc::connection    _portrait_connection;
180     //### Button to select 'landscape' orientation
181         Gtk::RadioButton    _landscapeButton;
182         //callback
183     void on_landscape();
184         sigc::connection    _landscape_connection;
186     Registry            *_widgetRegistry;
188     //### state - whether we are currently landscape or portrait
189     bool                 _landscape;
191 };
193 } // namespace Widget
194 } // namespace UI
195 } // namespace Inkscape
198 #endif /* INKSCAPE_UI_WIDGET_PAGE_SIZER__H */
200 /*
201   Local Variables:
202   mode:c++
203   c-file-style:"stroustrup"
204   c-file-offsets:((innamespace . 0)(inline-open . 0))
205   indent-tabs-mode:nil
206   fill-column:99
207   End:
208 */
209 // vim: filetype=c++:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :