b4b6145a808056419b2f8ee5f946172c7e6176f1
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); }
60 /**
61 * Assignment operator
62 */
63 PaperSize &operator=(const PaperSize &other)
64 { assign(other); return *this; }
66 /**
67 * Destructor
68 */
69 virtual ~PaperSize()
70 {}
72 /**
73 * Name of this paper specification
74 */
75 Glib::ustring name;
77 /**
78 * The lesser of the two dimensions
79 */
80 double smaller;
82 /**
83 * The greater of the two dimensions
84 */
85 double larger;
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
121 {
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);
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);
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;
157 void fire_fit_canvas_to_selection_or_drawing();
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;
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;
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 :