Code

Ok, committed msgloan's patch to convert gbooleans to bools thus completing
[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 #define SP_TYPE_DESKTOP_WIDGET (sp_desktop_widget_get_type ())
26 #define SP_DESKTOP_WIDGET(o) (GTK_CHECK_CAST ((o), SP_TYPE_DESKTOP_WIDGET, SPDesktopWidget))
27 #define SP_DESKTOP_WIDGET_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_DESKTOP_WIDGET, SPDesktopWidgetClass))
28 #define SP_IS_DESKTOP_WIDGET(o) (GTK_CHECK_TYPE ((o), SP_TYPE_DESKTOP_WIDGET))
29 #define SP_IS_DESKTOP_WIDGET_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_DESKTOP_WIDGET))
31 GtkType sp_desktop_widget_get_type();
33 void sp_desktop_widget_destroy (SPDesktopWidget* dtw);
35 gint sp_desktop_widget_set_focus(GtkWidget *widget, GdkEvent *event, SPDesktopWidget *dtw);
37 void sp_desktop_widget_show_decorations(SPDesktopWidget *dtw, bool show);
38 void sp_desktop_widget_fullscreen(SPDesktopWidget *dtw);
39 void sp_desktop_widget_layout(SPDesktopWidget *dtw);
40 void sp_desktop_widget_update_zoom(SPDesktopWidget *dtw);
41 void sp_desktop_widget_update_rulers (SPDesktopWidget *dtw);
43 /* Show/hide rulers & scrollbars */
44 void sp_desktop_widget_toggle_rulers (SPDesktopWidget *dtw);
45 void sp_desktop_widget_toggle_scrollbars (SPDesktopWidget *dtw);
46 void sp_desktop_widget_update_scrollbars (SPDesktopWidget *dtw, double scale);
48 void sp_dtw_desktop_activate (SPDesktopWidget *dtw);
49 void sp_dtw_desktop_deactivate (SPDesktopWidget *dtw);
51 namespace Inkscape { namespace Widgets { class LayerSelector; } }
53 namespace Inkscape { namespace UI { namespace Widget { class SelectedStyle; } } }
55 /// A GtkEventBox on an SPDesktop.
56 struct SPDesktopWidget {
57     SPViewWidget viewwidget;
59     unsigned int update : 1;
61     sigc::connection modified_connection;
63     GtkTooltips *tt;
65     SPDesktop *desktop;
67     GtkWindow *window;
68     
69     // The root vbox of the window layout.
70     GtkWidget *vbox;
72     GtkWidget *menubar, *statusbar;
74     GtkWidget *panels;
76     GtkWidget *hscrollbar, *vscrollbar, *vscrollbar_box;
78     GtkWidget *tool_toolbox, *aux_toolbox, *commands_toolbox;
80     /* Rulers */
81     GtkWidget *hruler, *vruler;
82     GtkWidget *hruler_box, *vruler_box; // eventboxes for setting tooltips
84     GtkWidget *sticky_zoom;
85     GtkWidget *coord_status;
86     GtkWidget *coord_status_x;
87     GtkWidget *coord_status_y;
88     GtkWidget *select_status;
89     GtkWidget *select_status_eventbox;
90     GtkWidget *zoom_status;
91     gulong zoom_update;
93     Inkscape::UI::Widget::SelectedStyle *selected_style;
95     gint coord_status_id, select_status_id;
96     
97     unsigned int _interaction_disabled_counter;
99     SPCanvas *canvas;
100     NR::Point ruler_origin;
101     double dt2r;
103     GtkAdjustment *hadj, *vadj;
105     Inkscape::Widgets::LayerSelector *layer_selector;
107     struct WidgetStub : public Inkscape::UI::View::EditWidgetInterface {
108         SPDesktopWidget *_dtw;
109         SPDesktop       *_dt;
110         WidgetStub (SPDesktopWidget* dtw) : _dtw(dtw) {}
112         virtual void setTitle (gchar const *uri)
113             { _dtw->updateTitle (uri); }
114         virtual void* getWindow()
115             { return _dtw->window; }
116         virtual void layout() 
117             { sp_desktop_widget_layout (_dtw); }
118         virtual void present() 
119             { _dtw->presentWindow(); }
120         virtual void getGeometry (gint &x, gint &y, gint &w, gint &h)
121             { _dtw->getWindowGeometry (x, y, w, h); }
122         virtual void setSize (gint w, gint h)
123             { _dtw->setWindowSize (w, h); }
124         virtual void setPosition (NR::Point p)
125             { _dtw->setWindowPosition (p); }
126         virtual void setTransient (void* p, int transient_policy)
127             { _dtw->setWindowTransient (p, transient_policy); }
128         virtual NR::Point getPointer()
129             { return _dtw->window_get_pointer(); }
130         virtual void setFullscreen()
131             { sp_desktop_widget_fullscreen (_dtw); }
132         virtual bool shutdown()
133             { return _dtw->shutdown(); }
134         virtual void destroy()
135             { gtk_widget_destroy (static_cast<GtkWidget*>((void*)(_dtw->window)));}
136         
137         virtual void requestCanvasUpdate()
138             { _dtw->requestCanvasUpdate(); }
139         virtual void requestCanvasUpdateAndWait()
140             { _dtw->requestCanvasUpdateAndWait(); }
141         virtual void enableInteraction()
142             { _dtw->enableInteraction(); }
143         virtual void disableInteraction()
144             { _dtw->disableInteraction(); }
145         virtual void activateDesktop()
146             { sp_dtw_desktop_activate (_dtw); }
147         virtual void deactivateDesktop()
148             { sp_dtw_desktop_deactivate (_dtw); }
149         virtual void viewSetPosition (NR::Point p)
150             { _dtw->viewSetPosition (p); }
151         virtual void updateRulers()
152             { sp_desktop_widget_update_rulers (_dtw); }
153         virtual void updateScrollbars (double scale)
154             { sp_desktop_widget_update_scrollbars (_dtw, scale); }
155         virtual void toggleRulers()
156             { sp_desktop_widget_toggle_rulers (_dtw); }
157         virtual void toggleScrollbars()
158             { sp_desktop_widget_toggle_scrollbars (_dtw); }
159         virtual void updateZoom()
160             { sp_desktop_widget_update_zoom (_dtw); }
161         virtual void letZoomGrabFocus()
162             { _dtw->letZoomGrabFocus(); }
163         virtual void setToolboxFocusTo (const gchar * id)
164             { _dtw->setToolboxFocusTo (id); }
165         virtual void setToolboxAdjustmentValue (const gchar *id, double val)
166             { _dtw->setToolboxAdjustmentValue (id, val); }
167         virtual bool isToolboxButtonActive (gchar const* id)
168             { return _dtw->isToolboxButtonActive (id); }
169         virtual void setCoordinateStatus (NR::Point p)
170             { _dtw->setCoordinateStatus (p); }
171         virtual void setMessage (Inkscape::MessageType type, gchar const* msg)
172             { _dtw->setMessage (type, msg); }
173         virtual bool warnDialog (gchar* text)
174             { return _dtw->warnDialog (text); }
175     };
177     WidgetStub *stub;
178     
179     void setMessage(Inkscape::MessageType type, gchar const *message);
180     NR::Point window_get_pointer();
181     bool shutdown();
182     void viewSetPosition (NR::Point p);
183     void letZoomGrabFocus();
184     void getWindowGeometry (gint &x, gint &y, gint &w, gint &h);
185     void setWindowPosition (NR::Point p);
186     void setWindowSize (gint w, gint h);
187     void setWindowTransient (void *p, int transient_policy);
188     void presentWindow();
189     bool warnDialog (gchar *text);
190     void setToolboxFocusTo (gchar const *);
191     void setToolboxAdjustmentValue (gchar const * id, double value);
192     bool isToolboxButtonActive (gchar const *id);
193     void setCoordinateStatus(NR::Point p);
194     void requestCanvasUpdate();
195     void requestCanvasUpdateAndWait();
196     void enableInteraction();
197     void disableInteraction();
198     void updateTitle(gchar const *uri);
199 };
201 /// The SPDesktopWidget vtable
202 struct SPDesktopWidgetClass {
203     SPViewWidgetClass parent_class;
204 };
206 #endif /* !SEEN_SP_DESKTOP_WIDGET_H */
208 /*
209   Local Variables:
210   mode:c++
211   c-file-style:"stroustrup"
212   c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
213   indent-tabs-mode:nil
214   fill-column:99
215   End:
216 */
217 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :