1 #ifndef SEEN_SP_DESKTOP_WIDGET_H
2 #define SEEN_SP_DESKTOP_WIDGET_H
4 /** \file
5 * SPDesktopWidget: handling Gtk events on a desktop.
6 *
7 * Authors:
8 * Jon A. Cruz <jon@joncruz.org> (c) 2010
9 * John Bintz <jcoswell@coswellproductions.org> (c) 2006
10 * Ralf Stephan <ralf@ark.in-berlin.de> (c) 2005, distrib. under GPL2
11 * ? -2004
12 */
14 #include <gtk/gtktooltips.h>
15 #include <gtk/gtkwindow.h>
17 #include "display/display-forward.h"
18 #include "libnr/nr-point.h"
19 #include "forward.h"
20 #include "message.h"
21 #include "ui/view/view-widget.h"
22 #include "ui/view/edit-widget-interface.h"
24 #include <sigc++/connection.h>
26 // forward declaration
27 typedef struct _EgeColorProfTracker EgeColorProfTracker;
30 #define SP_TYPE_DESKTOP_WIDGET SPDesktopWidget::getType()
31 #define SP_DESKTOP_WIDGET(o) (GTK_CHECK_CAST ((o), SP_TYPE_DESKTOP_WIDGET, SPDesktopWidget))
32 #define SP_DESKTOP_WIDGET_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_DESKTOP_WIDGET, SPDesktopWidgetClass))
33 #define SP_IS_DESKTOP_WIDGET(o) (GTK_CHECK_TYPE ((o), SP_TYPE_DESKTOP_WIDGET))
34 #define SP_IS_DESKTOP_WIDGET_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_DESKTOP_WIDGET))
36 void sp_desktop_widget_destroy (SPDesktopWidget* dtw);
38 void sp_desktop_widget_show_decorations(SPDesktopWidget *dtw, gboolean show);
39 void sp_desktop_widget_iconify(SPDesktopWidget *dtw);
40 void sp_desktop_widget_maximize(SPDesktopWidget *dtw);
41 void sp_desktop_widget_fullscreen(SPDesktopWidget *dtw);
42 void sp_desktop_widget_update_zoom(SPDesktopWidget *dtw);
43 void sp_desktop_widget_update_rulers (SPDesktopWidget *dtw);
44 void sp_desktop_widget_update_hruler (SPDesktopWidget *dtw);
45 void sp_desktop_widget_update_vruler (SPDesktopWidget *dtw);
47 /* Show/hide rulers & scrollbars */
48 void sp_desktop_widget_toggle_rulers (SPDesktopWidget *dtw);
49 void sp_desktop_widget_toggle_scrollbars (SPDesktopWidget *dtw);
50 void sp_desktop_widget_update_scrollbars (SPDesktopWidget *dtw, double scale);
51 void sp_desktop_widget_toggle_color_prof_adj( SPDesktopWidget *dtw );
53 void sp_dtw_desktop_activate (SPDesktopWidget *dtw);
54 void sp_dtw_desktop_deactivate (SPDesktopWidget *dtw);
56 namespace Inkscape { namespace Widgets { class LayerSelector; } }
58 namespace Inkscape { namespace UI { namespace Widget { class SelectedStyle; } } }
60 namespace Inkscape { namespace UI { namespace Dialogs { class SwatchesPanel; } } }
62 /// A GtkEventBox on an SPDesktop.
63 struct SPDesktopWidget {
64 SPViewWidget viewwidget;
66 unsigned int update : 1;
68 sigc::connection modified_connection;
70 GtkTooltips *tt;
72 SPDesktop *desktop;
74 Gtk::Window *window;
76 // The root vbox of the window layout.
77 GtkWidget *vbox;
79 GtkWidget *hbox;
81 GtkWidget *menubar, *statusbar;
83 Inkscape::UI::Dialogs::SwatchesPanel *panels;
85 GtkWidget *hscrollbar, *vscrollbar, *vscrollbar_box;
87 /* Rulers */
88 GtkWidget *hruler, *vruler;
89 GtkWidget *hruler_box, *vruler_box; // eventboxes for setting tooltips
91 GtkWidget *sticky_zoom;
92 GtkWidget *cms_adjust;
93 GtkWidget *coord_status;
94 GtkWidget *coord_status_x;
95 GtkWidget *coord_status_y;
96 GtkWidget *select_status;
97 GtkWidget *select_status_eventbox;
98 GtkWidget *zoom_status;
99 gulong zoom_update;
101 Inkscape::UI::Widget::Dock *dock;
103 Inkscape::UI::Widget::SelectedStyle *selected_style;
105 gint coord_status_id, select_status_id;
107 unsigned int _interaction_disabled_counter;
109 SPCanvas *canvas;
110 Geom::Point ruler_origin;
111 double dt2r;
113 GtkAdjustment *hadj, *vadj;
115 Inkscape::Widgets::LayerSelector *layer_selector;
117 EgeColorProfTracker* _tracker;
119 struct WidgetStub : public Inkscape::UI::View::EditWidgetInterface {
120 SPDesktopWidget *_dtw;
121 SPDesktop *_dt;
122 WidgetStub (SPDesktopWidget* dtw) : _dtw(dtw) {}
124 virtual void setTitle (gchar const *uri)
125 { _dtw->updateTitle (uri); }
126 virtual Gtk::Window* getWindow()
127 { return _dtw->window; }
129 virtual void layout() {
130 _dtw->layoutWidgets();
131 }
133 virtual void present()
134 { _dtw->presentWindow(); }
135 virtual void getGeometry (gint &x, gint &y, gint &w, gint &h)
136 { _dtw->getWindowGeometry (x, y, w, h); }
137 virtual void setSize (gint w, gint h)
138 { _dtw->setWindowSize (w, h); }
139 virtual void setPosition (Geom::Point p)
140 { _dtw->setWindowPosition (p); }
141 virtual void setTransient (void* p, int transient_policy)
142 { _dtw->setWindowTransient (p, transient_policy); }
143 virtual Geom::Point getPointer()
144 { return _dtw->window_get_pointer(); }
145 virtual void setIconified()
146 { sp_desktop_widget_iconify (_dtw); }
147 virtual void setMaximized()
148 { sp_desktop_widget_maximize (_dtw); }
149 virtual void setFullscreen()
150 { sp_desktop_widget_fullscreen (_dtw); }
151 virtual bool shutdown()
152 { return _dtw->shutdown(); }
153 virtual void destroy()
154 {
155 if(_dtw->window != NULL)
156 delete _dtw->window;
157 _dtw->window = NULL;
158 }
160 virtual void requestCanvasUpdate()
161 { _dtw->requestCanvasUpdate(); }
162 virtual void requestCanvasUpdateAndWait()
163 { _dtw->requestCanvasUpdateAndWait(); }
164 virtual void enableInteraction()
165 { _dtw->enableInteraction(); }
166 virtual void disableInteraction()
167 { _dtw->disableInteraction(); }
168 virtual void activateDesktop()
169 { sp_dtw_desktop_activate (_dtw); }
170 virtual void deactivateDesktop()
171 { sp_dtw_desktop_deactivate (_dtw); }
172 virtual void viewSetPosition (Geom::Point p)
173 { _dtw->viewSetPosition (p); }
174 virtual void updateRulers()
175 { sp_desktop_widget_update_rulers (_dtw); }
176 virtual void updateScrollbars (double scale)
177 { sp_desktop_widget_update_scrollbars (_dtw, scale); }
178 virtual void toggleRulers()
179 { sp_desktop_widget_toggle_rulers (_dtw); }
180 virtual void toggleScrollbars()
181 { sp_desktop_widget_toggle_scrollbars (_dtw); }
182 virtual void toggleColorProfAdjust()
183 { sp_desktop_widget_toggle_color_prof_adj(_dtw); }
184 virtual void updateZoom()
185 { sp_desktop_widget_update_zoom (_dtw); }
186 virtual void letZoomGrabFocus()
187 { _dtw->letZoomGrabFocus(); }
188 virtual void setToolboxFocusTo (const gchar * id)
189 { _dtw->setToolboxFocusTo (id); }
190 virtual void setToolboxAdjustmentValue (const gchar *id, double val)
191 { _dtw->setToolboxAdjustmentValue (id, val); }
192 virtual void setToolboxSelectOneValue (gchar const *id, int val)
193 { _dtw->setToolboxSelectOneValue (id, val); }
194 virtual bool isToolboxButtonActive (gchar const* id)
195 { return _dtw->isToolboxButtonActive (id); }
196 virtual void setCoordinateStatus (Geom::Point p)
197 { _dtw->setCoordinateStatus (p); }
198 virtual void setMessage (Inkscape::MessageType type, gchar const* msg)
199 { _dtw->setMessage (type, msg); }
200 virtual bool warnDialog (gchar* text)
201 { return _dtw->warnDialog (text); }
202 virtual Inkscape::UI::Widget::Dock* getDock ()
203 { return _dtw->getDock(); }
204 };
206 WidgetStub *stub;
208 void setMessage(Inkscape::MessageType type, gchar const *message);
209 Geom::Point window_get_pointer();
210 bool shutdown();
211 void viewSetPosition (Geom::Point p);
212 void letZoomGrabFocus();
213 void getWindowGeometry (gint &x, gint &y, gint &w, gint &h);
214 void setWindowPosition (Geom::Point p);
215 void setWindowSize (gint w, gint h);
216 void setWindowTransient (void *p, int transient_policy);
217 void presentWindow();
218 bool warnDialog (gchar *text);
219 void setToolboxFocusTo (gchar const *);
220 void setToolboxAdjustmentValue (gchar const * id, double value);
221 void setToolboxSelectOneValue (gchar const * id, gint value);
222 bool isToolboxButtonActive (gchar const *id);
223 void setToolboxPosition(Glib::ustring const& id, GtkPositionType pos);
224 void setCoordinateStatus(Geom::Point p);
225 void requestCanvasUpdate();
226 void requestCanvasUpdateAndWait();
227 void enableInteraction();
228 void disableInteraction();
229 void updateTitle(gchar const *uri);
230 bool onFocusInEvent(GdkEventFocus*);
232 Inkscape::UI::Widget::Dock* getDock();
234 static GtkType getType();
235 static SPDesktopWidget* createInstance(SPNamedView *namedview);
237 void updateNamedview();
239 private:
240 GtkWidget *tool_toolbox;
241 GtkWidget *aux_toolbox;
242 GtkWidget *commands_toolbox,;
243 GtkWidget *snap_toolbox;
245 static void init(SPDesktopWidget *widget);
246 void layoutWidgets();
248 void namedviewModified(SPObject *obj, guint flags);
250 };
252 /// The SPDesktopWidget vtable
253 struct SPDesktopWidgetClass {
254 SPViewWidgetClass parent_class;
255 };
257 #endif /* !SEEN_SP_DESKTOP_WIDGET_H */
259 /*
260 Local Variables:
261 mode:c++
262 c-file-style:"stroustrup"
263 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
264 indent-tabs-mode:nil
265 fill-column:99
266 End:
267 */
268 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :