Code

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