1
#ifndef SEEN_SP_DESKTOP_WIDGET_H
2
#define SEEN_SP_DESKTOP_WIDGET_H
5
* SPDesktopWidget: handling Gtk events on a desktop.
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
16
#include "display/display-forward.h"
17
#include "libnr/nr-point.h"
20
#include "ui/view/view-widget.h"
21
#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;
76
// The root vbox of the window layout.
81
GtkWidget *menubar, *statusbar;
83
Inkscape::UI::Dialogs::SwatchesPanel *panels;
85
GtkWidget *hscrollbar, *vscrollbar, *vscrollbar_box;
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;
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;
110
Geom::Point ruler_origin;
113
GtkAdjustment *hadj, *vadj;
115
Inkscape::Widgets::LayerSelector *layer_selector;
117
EgeColorProfTracker* _tracker;
119
struct WidgetStub : public Inkscape::UI::View::EditWidgetInterface {
120
SPDesktopWidget *_dtw;
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();
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()
155
if(_dtw->window != NULL)
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(); }
208
void setMessage(Inkscape::MessageType type, gchar const *message);
209
Geom::Point window_get_pointer();
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();
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);
252
/// The SPDesktopWidget vtable
253
struct SPDesktopWidgetClass {
254
SPViewWidgetClass parent_class;
257
#endif /* !SEEN_SP_DESKTOP_WIDGET_H */
262
c-file-style:"stroustrup"
263
c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
268
// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :