Code

Adding ICC Profiles in X support
[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  *      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);
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);
52 void sp_dtw_desktop_activate (SPDesktopWidget *dtw);
53 void sp_dtw_desktop_deactivate (SPDesktopWidget *dtw);
55 namespace Inkscape { namespace Widgets { class LayerSelector; } }
57 namespace Inkscape { namespace UI { namespace Widget { class SelectedStyle; } } }
59 /// A GtkEventBox on an SPDesktop.
60 struct SPDesktopWidget {
61     SPViewWidget viewwidget;
63     unsigned int update : 1;
65     sigc::connection modified_connection;
67     GtkTooltips *tt;
69     SPDesktop *desktop;
71     Gtk::Window *window;
73     // The root vbox of the window layout.
74     GtkWidget *vbox;
76     GtkWidget *menubar, *statusbar;
78     GtkWidget *panels;
80     GtkWidget *hscrollbar, *vscrollbar, *vscrollbar_box;
82     GtkWidget *tool_toolbox, *aux_toolbox, *commands_toolbox;
84     /* Rulers */
85     GtkWidget *hruler, *vruler;
86     GtkWidget *hruler_box, *vruler_box; // eventboxes for setting tooltips
88     GtkWidget *sticky_zoom;
89     GtkWidget *cms_adjust;
90     GtkWidget *coord_status;
91     GtkWidget *coord_status_x;
92     GtkWidget *coord_status_y;
93     GtkWidget *select_status;
94     GtkWidget *select_status_eventbox;
95     GtkWidget *zoom_status;
96     gulong zoom_update;
98     Inkscape::UI::Widget::Dock *dock;
100     Inkscape::UI::Widget::SelectedStyle *selected_style;
102     gint coord_status_id, select_status_id;
104     unsigned int _interaction_disabled_counter;
106     SPCanvas *canvas;
107     NR::Point ruler_origin;
108     double dt2r;
110     GtkAdjustment *hadj, *vadj;
112     Inkscape::Widgets::LayerSelector *layer_selector;
114     EgeColorProfTracker* _tracker;
116     struct WidgetStub : public Inkscape::UI::View::EditWidgetInterface {
117         SPDesktopWidget *_dtw;
118         SPDesktop       *_dt;
119         WidgetStub (SPDesktopWidget* dtw) : _dtw(dtw) {}
121         virtual void setTitle (gchar const *uri)
122             { _dtw->updateTitle (uri); }
123         virtual Gtk::Window* getWindow()
124             { return _dtw->window; }
125         virtual void layout()
126             { sp_desktop_widget_layout (_dtw); }
127         virtual void present()
128             { _dtw->presentWindow(); }
129         virtual void getGeometry (gint &x, gint &y, gint &w, gint &h)
130             { _dtw->getWindowGeometry (x, y, w, h); }
131         virtual void setSize (gint w, gint h)
132             { _dtw->setWindowSize (w, h); }
133         virtual void setPosition (NR::Point p)
134             { _dtw->setWindowPosition (p); }
135         virtual void setTransient (void* p, int transient_policy)
136             { _dtw->setWindowTransient (p, transient_policy); }
137         virtual NR::Point getPointer()
138             { return _dtw->window_get_pointer(); }
139         virtual void setIconified()
140             { sp_desktop_widget_iconify (_dtw); }
141         virtual void setMaximized()
142             { sp_desktop_widget_maximize (_dtw); }
143         virtual void setFullscreen()
144             { sp_desktop_widget_fullscreen (_dtw); }
145         virtual bool shutdown()
146             { return _dtw->shutdown(); }
147         virtual void destroy()
148             {
149                 if(_dtw->window != NULL)
150                     delete _dtw->window;
151                 _dtw->window = NULL;
152             }
154         virtual void requestCanvasUpdate()
155             { _dtw->requestCanvasUpdate(); }
156         virtual void requestCanvasUpdateAndWait()
157             { _dtw->requestCanvasUpdateAndWait(); }
158         virtual void enableInteraction()
159             { _dtw->enableInteraction(); }
160         virtual void disableInteraction()
161             { _dtw->disableInteraction(); }
162         virtual void activateDesktop()
163             { sp_dtw_desktop_activate (_dtw); }
164         virtual void deactivateDesktop()
165             { sp_dtw_desktop_deactivate (_dtw); }
166         virtual void viewSetPosition (NR::Point p)
167             { _dtw->viewSetPosition (p); }
168         virtual void updateRulers()
169             { sp_desktop_widget_update_rulers (_dtw); }
170         virtual void updateScrollbars (double scale)
171             { sp_desktop_widget_update_scrollbars (_dtw, scale); }
172         virtual void toggleRulers()
173             { sp_desktop_widget_toggle_rulers (_dtw); }
174         virtual void toggleScrollbars()
175             { sp_desktop_widget_toggle_scrollbars (_dtw); }
176         virtual void updateZoom()
177             { sp_desktop_widget_update_zoom (_dtw); }
178         virtual void letZoomGrabFocus()
179             { _dtw->letZoomGrabFocus(); }
180         virtual void setToolboxFocusTo (const gchar * id)
181             { _dtw->setToolboxFocusTo (id); }
182         virtual void setToolboxAdjustmentValue (const gchar *id, double val)
183             { _dtw->setToolboxAdjustmentValue (id, val); }
184         virtual void setToolboxSelectOneValue (gchar const *id, int val)
185             { _dtw->setToolboxSelectOneValue (id, val); }
186         virtual bool isToolboxButtonActive (gchar const* id)
187             { return _dtw->isToolboxButtonActive (id); }
188         virtual void setCoordinateStatus (NR::Point p)
189             { _dtw->setCoordinateStatus (p); }
190         virtual void setMessage (Inkscape::MessageType type, gchar const* msg)
191             { _dtw->setMessage (type, msg); }
192         virtual bool warnDialog (gchar* text)
193             { return _dtw->warnDialog (text); }
194         virtual Inkscape::UI::Widget::Dock* getDock ()
195             { return _dtw->getDock(); }
196     };
198     WidgetStub *stub;
200     void setMessage(Inkscape::MessageType type, gchar const *message);
201     NR::Point window_get_pointer();
202     bool shutdown();
203     void viewSetPosition (NR::Point p);
204     void letZoomGrabFocus();
205     void getWindowGeometry (gint &x, gint &y, gint &w, gint &h);
206     void setWindowPosition (NR::Point p);
207     void setWindowSize (gint w, gint h);
208     void setWindowTransient (void *p, int transient_policy);
209     void presentWindow();
210     bool warnDialog (gchar *text);
211     void setToolboxFocusTo (gchar const *);
212     void setToolboxAdjustmentValue (gchar const * id, double value);
213     void setToolboxSelectOneValue (gchar const * id, gint value);
214     bool isToolboxButtonActive (gchar const *id);
215     void setCoordinateStatus(NR::Point p);
216     void requestCanvasUpdate();
217     void requestCanvasUpdateAndWait();
218     void enableInteraction();
219     void disableInteraction();
220     void updateTitle(gchar const *uri);
221     bool onFocusInEvent(GdkEventFocus*);
223     Inkscape::UI::Widget::Dock* getDock();
225 };
227 /// The SPDesktopWidget vtable
228 struct SPDesktopWidgetClass {
229     SPViewWidgetClass parent_class;
230 };
232 #endif /* !SEEN_SP_DESKTOP_WIDGET_H */
234 /*
235   Local Variables:
236   mode:c++
237   c-file-style:"stroustrup"
238   c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
239   indent-tabs-mode:nil
240   fill-column:99
241   End:
242 */
243 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :