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 * John Bintz <jcoswell@coswellproductions.org> (c) 2006
9 * Ralf Stephan <ralf@ark.in-berlin.de> (c) 2005, distrib. under GPL2
10 * ? -2004
11 */
13 #include <gtk/gtktooltips.h>
14 #include <gtk/gtkwindow.h>
16 #include "display/display-forward.h"
17 #include "libnr/nr-point.h"
18 #include "forward.h"
19 #include "message.h"
20 #include "ui/view/view-widget.h"
21 #include "ui/view/edit-widget-interface.h"
23 #include <sigc++/connection.h>
25 // forward declaration
26 typedef struct _EgeColorProfTracker EgeColorProfTracker;
29 #define SP_TYPE_DESKTOP_WIDGET (sp_desktop_widget_get_type ())
30 #define SP_DESKTOP_WIDGET(o) (GTK_CHECK_CAST ((o), SP_TYPE_DESKTOP_WIDGET, SPDesktopWidget))
31 #define SP_DESKTOP_WIDGET_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_DESKTOP_WIDGET, SPDesktopWidgetClass))
32 #define SP_IS_DESKTOP_WIDGET(o) (GTK_CHECK_TYPE ((o), SP_TYPE_DESKTOP_WIDGET))
33 #define SP_IS_DESKTOP_WIDGET_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_DESKTOP_WIDGET))
35 GtkType sp_desktop_widget_get_type();
37 void sp_desktop_widget_destroy (SPDesktopWidget* dtw);
39 void sp_desktop_widget_show_decorations(SPDesktopWidget *dtw, gboolean show);
40 void sp_desktop_widget_iconify(SPDesktopWidget *dtw);
41 void sp_desktop_widget_maximize(SPDesktopWidget *dtw);
42 void sp_desktop_widget_fullscreen(SPDesktopWidget *dtw);
43 void sp_desktop_widget_layout(SPDesktopWidget *dtw);
44 void sp_desktop_widget_update_zoom(SPDesktopWidget *dtw);
45 void sp_desktop_widget_update_rulers (SPDesktopWidget *dtw);
46 void sp_desktop_widget_update_hruler (SPDesktopWidget *dtw);
47 void sp_desktop_widget_update_vruler (SPDesktopWidget *dtw);
49 void sp_desktop_widget_update_namedview (SPDesktopWidget *dtw);
51 /* Show/hide rulers & scrollbars */
52 void sp_desktop_widget_toggle_rulers (SPDesktopWidget *dtw);
53 void sp_desktop_widget_toggle_scrollbars (SPDesktopWidget *dtw);
54 void sp_desktop_widget_update_scrollbars (SPDesktopWidget *dtw, double scale);
55 void sp_desktop_widget_toggle_color_prof_adj( SPDesktopWidget *dtw );
57 void sp_dtw_desktop_activate (SPDesktopWidget *dtw);
58 void sp_dtw_desktop_deactivate (SPDesktopWidget *dtw);
60 namespace Inkscape { namespace Widgets { class LayerSelector; } }
62 namespace Inkscape { namespace UI { namespace Widget { class SelectedStyle; } } }
64 namespace Inkscape { namespace UI { namespace Dialogs { class SwatchesPanel; } } }
66 /// A GtkEventBox on an SPDesktop.
67 struct SPDesktopWidget {
68 SPViewWidget viewwidget;
70 unsigned int update : 1;
72 sigc::connection modified_connection;
74 GtkTooltips *tt;
76 SPDesktop *desktop;
78 Gtk::Window *window;
80 // The root vbox of the window layout.
81 GtkWidget *vbox;
83 GtkWidget *menubar, *statusbar;
85 Inkscape::UI::Dialogs::SwatchesPanel *panels;
87 GtkWidget *hscrollbar, *vscrollbar, *vscrollbar_box;
89 GtkWidget *tool_toolbox, *aux_toolbox, *commands_toolbox, *snap_toolbox;
91 /* Rulers */
92 GtkWidget *hruler, *vruler;
93 GtkWidget *hruler_box, *vruler_box; // eventboxes for setting tooltips
95 GtkWidget *sticky_zoom;
96 GtkWidget *cms_adjust;
97 GtkWidget *coord_status;
98 GtkWidget *coord_status_x;
99 GtkWidget *coord_status_y;
100 GtkWidget *select_status;
101 GtkWidget *select_status_eventbox;
102 GtkWidget *zoom_status;
103 gulong zoom_update;
105 Inkscape::UI::Widget::Dock *dock;
107 Inkscape::UI::Widget::SelectedStyle *selected_style;
109 gint coord_status_id, select_status_id;
111 unsigned int _interaction_disabled_counter;
113 SPCanvas *canvas;
114 Geom::Point ruler_origin;
115 double dt2r;
117 GtkAdjustment *hadj, *vadj;
119 Inkscape::Widgets::LayerSelector *layer_selector;
121 EgeColorProfTracker* _tracker;
123 struct WidgetStub : public Inkscape::UI::View::EditWidgetInterface {
124 SPDesktopWidget *_dtw;
125 SPDesktop *_dt;
126 WidgetStub (SPDesktopWidget* dtw) : _dtw(dtw) {}
128 virtual void setTitle (gchar const *uri)
129 { _dtw->updateTitle (uri); }
130 virtual Gtk::Window* getWindow()
131 { return _dtw->window; }
132 virtual void layout()
133 { sp_desktop_widget_layout (_dtw); }
134 virtual void present()
135 { _dtw->presentWindow(); }
136 virtual void getGeometry (gint &x, gint &y, gint &w, gint &h)
137 { _dtw->getWindowGeometry (x, y, w, h); }
138 virtual void setSize (gint w, gint h)
139 { _dtw->setWindowSize (w, h); }
140 virtual void setPosition (Geom::Point p)
141 { _dtw->setWindowPosition (p); }
142 virtual void setTransient (void* p, int transient_policy)
143 { _dtw->setWindowTransient (p, transient_policy); }
144 virtual Geom::Point getPointer()
145 { return _dtw->window_get_pointer(); }
146 virtual void setIconified()
147 { sp_desktop_widget_iconify (_dtw); }
148 virtual void setMaximized()
149 { sp_desktop_widget_maximize (_dtw); }
150 virtual void setFullscreen()
151 { sp_desktop_widget_fullscreen (_dtw); }
152 virtual bool shutdown()
153 { return _dtw->shutdown(); }
154 virtual void destroy()
155 {
156 if(_dtw->window != NULL)
157 delete _dtw->window;
158 _dtw->window = NULL;
159 }
161 virtual void requestCanvasUpdate()
162 { _dtw->requestCanvasUpdate(); }
163 virtual void requestCanvasUpdateAndWait()
164 { _dtw->requestCanvasUpdateAndWait(); }
165 virtual void enableInteraction()
166 { _dtw->enableInteraction(); }
167 virtual void disableInteraction()
168 { _dtw->disableInteraction(); }
169 virtual void activateDesktop()
170 { sp_dtw_desktop_activate (_dtw); }
171 virtual void deactivateDesktop()
172 { sp_dtw_desktop_deactivate (_dtw); }
173 virtual void viewSetPosition (Geom::Point p)
174 { _dtw->viewSetPosition (p); }
175 virtual void updateRulers()
176 { sp_desktop_widget_update_rulers (_dtw); }
177 virtual void updateScrollbars (double scale)
178 { sp_desktop_widget_update_scrollbars (_dtw, scale); }
179 virtual void toggleRulers()
180 { sp_desktop_widget_toggle_rulers (_dtw); }
181 virtual void toggleScrollbars()
182 { sp_desktop_widget_toggle_scrollbars (_dtw); }
183 virtual void toggleColorProfAdjust()
184 { sp_desktop_widget_toggle_color_prof_adj(_dtw); }
185 virtual void updateZoom()
186 { sp_desktop_widget_update_zoom (_dtw); }
187 virtual void letZoomGrabFocus()
188 { _dtw->letZoomGrabFocus(); }
189 virtual void setToolboxFocusTo (const gchar * id)
190 { _dtw->setToolboxFocusTo (id); }
191 virtual void setToolboxAdjustmentValue (const gchar *id, double val)
192 { _dtw->setToolboxAdjustmentValue (id, val); }
193 virtual void setToolboxSelectOneValue (gchar const *id, int val)
194 { _dtw->setToolboxSelectOneValue (id, val); }
195 virtual bool isToolboxButtonActive (gchar const* id)
196 { return _dtw->isToolboxButtonActive (id); }
197 virtual void setCoordinateStatus (Geom::Point p)
198 { _dtw->setCoordinateStatus (p); }
199 virtual void setMessage (Inkscape::MessageType type, gchar const* msg)
200 { _dtw->setMessage (type, msg); }
201 virtual bool warnDialog (gchar* text)
202 { return _dtw->warnDialog (text); }
203 virtual Inkscape::UI::Widget::Dock* getDock ()
204 { return _dtw->getDock(); }
205 };
207 WidgetStub *stub;
209 void setMessage(Inkscape::MessageType type, gchar const *message);
210 Geom::Point window_get_pointer();
211 bool shutdown();
212 void viewSetPosition (Geom::Point p);
213 void letZoomGrabFocus();
214 void getWindowGeometry (gint &x, gint &y, gint &w, gint &h);
215 void setWindowPosition (Geom::Point p);
216 void setWindowSize (gint w, gint h);
217 void setWindowTransient (void *p, int transient_policy);
218 void presentWindow();
219 bool warnDialog (gchar *text);
220 void setToolboxFocusTo (gchar const *);
221 void setToolboxAdjustmentValue (gchar const * id, double value);
222 void setToolboxSelectOneValue (gchar const * id, gint value);
223 bool isToolboxButtonActive (gchar const *id);
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 };
236 /// The SPDesktopWidget vtable
237 struct SPDesktopWidgetClass {
238 SPViewWidgetClass parent_class;
239 };
241 #endif /* !SEEN_SP_DESKTOP_WIDGET_H */
243 /*
244 Local Variables:
245 mode:c++
246 c-file-style:"stroustrup"
247 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
248 indent-tabs-mode:nil
249 fill-column:99
250 End:
251 */
252 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :