Code

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