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 * Ralf Stephan <ralf@ark.in-berlin.de> (c) 2005, distrib. under GPL2
9 * ? -2004
10 */
12 #include <gtk/gtktooltips.h>
13 #include <gtk/gtkwindow.h>
15 #include "display/display-forward.h"
16 #include "libnr/nr-point.h"
17 #include "forward.h"
18 #include "message.h"
19 #include "ui/view/view-widget.h"
20 #include "ui/view/edit-widget-interface.h"
22 #include <sigc++/connection.h>
24 #define SP_TYPE_DESKTOP_WIDGET (sp_desktop_widget_get_type ())
25 #define SP_DESKTOP_WIDGET(o) (GTK_CHECK_CAST ((o), SP_TYPE_DESKTOP_WIDGET, SPDesktopWidget))
26 #define SP_DESKTOP_WIDGET_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_DESKTOP_WIDGET, SPDesktopWidgetClass))
27 #define SP_IS_DESKTOP_WIDGET(o) (GTK_CHECK_TYPE ((o), SP_TYPE_DESKTOP_WIDGET))
28 #define SP_IS_DESKTOP_WIDGET_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_DESKTOP_WIDGET))
30 GtkType sp_desktop_widget_get_type();
32 void sp_desktop_widget_destroy (SPDesktopWidget* dtw);
34 gint sp_desktop_widget_set_focus(GtkWidget *widget, GdkEvent *event, SPDesktopWidget *dtw);
36 void sp_desktop_widget_show_decorations(SPDesktopWidget *dtw, gboolean show);
37 void sp_desktop_widget_fullscreen(SPDesktopWidget *dtw);
38 void sp_desktop_widget_layout(SPDesktopWidget *dtw);
39 void sp_desktop_widget_update_zoom(SPDesktopWidget *dtw);
40 void sp_desktop_widget_update_rulers (SPDesktopWidget *dtw);
42 /* Show/hide rulers & scrollbars */
43 void sp_desktop_widget_toggle_rulers (SPDesktopWidget *dtw);
44 void sp_desktop_widget_toggle_scrollbars (SPDesktopWidget *dtw);
45 void sp_desktop_widget_update_scrollbars (SPDesktopWidget *dtw, double scale);
47 void sp_dtw_desktop_activate (SPDesktopWidget *dtw);
48 void sp_dtw_desktop_deactivate (SPDesktopWidget *dtw);
50 namespace Inkscape { namespace Widgets { class LayerSelector; } }
52 namespace Inkscape { namespace UI { namespace Widget { class SelectedStyle; } } }
54 /// A GtkEventBox on an SPDesktop.
55 struct SPDesktopWidget {
56 SPViewWidget viewwidget;
58 unsigned int update : 1;
60 sigc::connection modified_connection;
62 GtkTooltips *tt;
64 SPDesktop *desktop;
66 GtkWindow *window;
68 // The root vbox of the window layout.
69 GtkWidget *vbox;
71 GtkWidget *menubar, *statusbar;
73 GtkWidget *panels;
75 GtkWidget *hscrollbar, *vscrollbar, *vscrollbar_box;
77 GtkWidget *tool_toolbox, *aux_toolbox, *commands_toolbox;
79 /* Rulers */
80 GtkWidget *hruler, *vruler;
81 GtkWidget *hruler_box, *vruler_box; // eventboxes for setting tooltips
83 GtkWidget *sticky_zoom;
84 GtkWidget *coord_status;
85 GtkWidget *coord_status_x;
86 GtkWidget *coord_status_y;
87 GtkWidget *select_status;
88 GtkWidget *select_status_eventbox;
89 GtkWidget *zoom_status;
90 gulong zoom_update;
92 Inkscape::UI::Widget::SelectedStyle *selected_style;
94 gint coord_status_id, select_status_id;
96 SPCanvas *canvas;
97 NR::Point ruler_origin;
98 double dt2r;
100 GtkAdjustment *hadj, *vadj;
102 Inkscape::Widgets::LayerSelector *layer_selector;
104 struct WidgetStub : public Inkscape::UI::View::EditWidgetInterface {
105 SPDesktopWidget *_dtw;
106 SPDesktop *_dt;
107 WidgetStub (SPDesktopWidget* dtw) : _dtw(dtw) {}
109 virtual void setTitle (gchar const *uri)
110 { _dtw->updateTitle (uri); }
111 virtual void* getWindow()
112 { return _dtw->window; }
113 virtual void layout()
114 { sp_desktop_widget_layout (_dtw); }
115 virtual void present()
116 { _dtw->presentWindow(); }
117 virtual void getGeometry (gint &x, gint &y, gint &w, gint &h)
118 { _dtw->getWindowGeometry (x, y, w, h); }
119 virtual void setSize (gint w, gint h)
120 { _dtw->setWindowSize (w, h); }
121 virtual void setPosition (NR::Point p)
122 { _dtw->setWindowPosition (p); }
123 virtual void setTransient (void* p, int transient_policy)
124 { _dtw->setWindowTransient (p, transient_policy); }
125 virtual NR::Point getPointer()
126 { return _dtw->window_get_pointer(); }
127 virtual void setFullscreen()
128 { sp_desktop_widget_fullscreen (_dtw); }
129 virtual bool shutdown()
130 { return _dtw->shutdown(); }
131 virtual void destroy()
132 { gtk_widget_destroy (static_cast<GtkWidget*>((void*)(_dtw->window)));}
134 virtual void requestCanvasUpdate()
135 { _dtw->requestCanvasUpdate(); }
136 virtual void requestCanvasUpdateAndWait()
137 { _dtw->requestCanvasUpdateAndWait(); }
138 virtual void activateDesktop()
139 { sp_dtw_desktop_activate (_dtw); }
140 virtual void deactivateDesktop()
141 { sp_dtw_desktop_deactivate (_dtw); }
142 virtual void viewSetPosition (NR::Point p)
143 { _dtw->viewSetPosition (p); }
144 virtual void updateRulers()
145 { sp_desktop_widget_update_rulers (_dtw); }
146 virtual void updateScrollbars (double scale)
147 { sp_desktop_widget_update_scrollbars (_dtw, scale); }
148 virtual void toggleRulers()
149 { sp_desktop_widget_toggle_rulers (_dtw); }
150 virtual void toggleScrollbars()
151 { sp_desktop_widget_toggle_scrollbars (_dtw); }
152 virtual void updateZoom()
153 { sp_desktop_widget_update_zoom (_dtw); }
154 virtual void letZoomGrabFocus()
155 { _dtw->letZoomGrabFocus(); }
156 virtual void setToolboxFocusTo (const gchar * id)
157 { _dtw->setToolboxFocusTo (id); }
158 virtual void setToolboxAdjustmentValue (const gchar *id, double val)
159 { _dtw->setToolboxAdjustmentValue (id, val); }
160 virtual bool isToolboxButtonActive (gchar const* id)
161 { return _dtw->isToolboxButtonActive (id); }
162 virtual void setCoordinateStatus (NR::Point p)
163 { _dtw->setCoordinateStatus (p); }
164 virtual void setMessage (Inkscape::MessageType type, gchar const* msg)
165 { _dtw->setMessage (type, msg); }
166 virtual bool warnDialog (gchar* text)
167 { return _dtw->warnDialog (text); }
168 };
170 WidgetStub *stub;
172 void setMessage(Inkscape::MessageType type, gchar const *message);
173 NR::Point window_get_pointer();
174 bool shutdown();
175 void viewSetPosition (NR::Point p);
176 void letZoomGrabFocus();
177 void getWindowGeometry (gint &x, gint &y, gint &w, gint &h);
178 void setWindowPosition (NR::Point p);
179 void setWindowSize (gint w, gint h);
180 void setWindowTransient (void *p, int transient_policy);
181 void presentWindow();
182 bool warnDialog (gchar *text);
183 void setToolboxFocusTo (gchar const *);
184 void setToolboxAdjustmentValue (gchar const * id, double value);
185 bool isToolboxButtonActive (gchar const *id);
186 void setCoordinateStatus(NR::Point p);
187 void requestCanvasUpdate();
188 void requestCanvasUpdateAndWait();
189 void updateTitle(gchar const *uri);
190 };
192 /// The SPDesktopWidget vtable
193 struct SPDesktopWidgetClass {
194 SPViewWidgetClass parent_class;
195 };
197 #endif /* !SEEN_SP_DESKTOP_WIDGET_H */
199 /*
200 Local Variables:
201 mode:c++
202 c-file-style:"stroustrup"
203 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
204 indent-tabs-mode:nil
205 fill-column:99
206 End:
207 */
208 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :