#ifndef SEEN_SP_DESKTOP_WIDGET_H #define SEEN_SP_DESKTOP_WIDGET_H /** \file * SPDesktopWidget: handling Gtk events on a desktop. * * Authors: * Jon A. Cruz (c) 2010 * John Bintz (c) 2006 * Ralf Stephan (c) 2005, distrib. under GPL2 * Abhishek Sharma * ? -2004 */ #include #include "message.h" #include "ui/view/view-widget.h" #include "ui/view/edit-widget-interface.h" #include #include #include <2geom/point.h> // forward declaration typedef struct _EgeColorProfTracker EgeColorProfTracker; struct SPCanvas; class SPDesktop; class SPDesktopWidget; class SPObject; #define SP_TYPE_DESKTOP_WIDGET SPDesktopWidget::getType() #define SP_DESKTOP_WIDGET(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_DESKTOP_WIDGET, SPDesktopWidget)) #define SP_DESKTOP_WIDGET_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SP_TYPE_DESKTOP_WIDGET, SPDesktopWidgetClass)) #define SP_IS_DESKTOP_WIDGET(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_DESKTOP_WIDGET)) #define SP_IS_DESKTOP_WIDGET_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_DESKTOP_WIDGET)) void sp_desktop_widget_show_decorations(SPDesktopWidget *dtw, gboolean show); void sp_desktop_widget_iconify(SPDesktopWidget *dtw); void sp_desktop_widget_maximize(SPDesktopWidget *dtw); void sp_desktop_widget_fullscreen(SPDesktopWidget *dtw); void sp_desktop_widget_update_zoom(SPDesktopWidget *dtw); void sp_desktop_widget_update_rulers (SPDesktopWidget *dtw); void sp_desktop_widget_update_hruler (SPDesktopWidget *dtw); void sp_desktop_widget_update_vruler (SPDesktopWidget *dtw); /* Show/hide rulers & scrollbars */ void sp_desktop_widget_toggle_rulers (SPDesktopWidget *dtw); void sp_desktop_widget_toggle_scrollbars (SPDesktopWidget *dtw); void sp_desktop_widget_update_scrollbars (SPDesktopWidget *dtw, double scale); void sp_desktop_widget_toggle_color_prof_adj( SPDesktopWidget *dtw ); void sp_dtw_desktop_activate (SPDesktopWidget *dtw); void sp_dtw_desktop_deactivate (SPDesktopWidget *dtw); namespace Inkscape { namespace Widgets { class LayerSelector; } } namespace Inkscape { namespace UI { namespace Widget { class SelectedStyle; } } } namespace Inkscape { namespace UI { namespace Dialogs { class SwatchesPanel; } } } /// A GtkEventBox on an SPDesktop. struct SPDesktopWidget { SPViewWidget viewwidget; unsigned int update : 1; sigc::connection modified_connection; SPDesktop *desktop; Gtk::Window *window; // The root vbox of the window layout. GtkWidget *vbox; GtkWidget *hbox; GtkWidget *menubar, *statusbar; Inkscape::UI::Dialogs::SwatchesPanel *panels; GtkWidget *hscrollbar, *vscrollbar, *vscrollbar_box; /* Rulers */ GtkWidget *hruler, *vruler; GtkWidget *hruler_box, *vruler_box; // eventboxes for setting tooltips GtkWidget *sticky_zoom; GtkWidget *cms_adjust; GtkWidget *coord_status; GtkWidget *coord_status_x; GtkWidget *coord_status_y; GtkWidget *select_status; GtkWidget *select_status_eventbox; GtkWidget *zoom_status; gulong zoom_update; Inkscape::UI::Widget::Dock *dock; Inkscape::UI::Widget::SelectedStyle *selected_style; gint coord_status_id, select_status_id; unsigned int _interaction_disabled_counter; SPCanvas *canvas; Geom::Point ruler_origin; double dt2r; GtkAdjustment *hadj, *vadj; Inkscape::Widgets::LayerSelector *layer_selector; EgeColorProfTracker* _tracker; struct WidgetStub : public Inkscape::UI::View::EditWidgetInterface { SPDesktopWidget *_dtw; SPDesktop *_dt; WidgetStub (SPDesktopWidget* dtw) : _dtw(dtw) {} virtual void setTitle (gchar const *uri) { _dtw->updateTitle (uri); } virtual Gtk::Window* getWindow() { return _dtw->window; } virtual void layout() { _dtw->layoutWidgets(); } virtual void present() { _dtw->presentWindow(); } virtual void getGeometry (gint &x, gint &y, gint &w, gint &h) { _dtw->getWindowGeometry (x, y, w, h); } virtual void setSize (gint w, gint h) { _dtw->setWindowSize (w, h); } virtual void setPosition (Geom::Point p) { _dtw->setWindowPosition (p); } virtual void setTransient (void* p, int transient_policy) { _dtw->setWindowTransient (p, transient_policy); } virtual Geom::Point getPointer() { return _dtw->window_get_pointer(); } virtual void setIconified() { sp_desktop_widget_iconify (_dtw); } virtual void setMaximized() { sp_desktop_widget_maximize (_dtw); } virtual void setFullscreen() { sp_desktop_widget_fullscreen (_dtw); } virtual bool shutdown() { return _dtw->shutdown(); } virtual void destroy() { if(_dtw->window != NULL) delete _dtw->window; _dtw->window = NULL; } virtual void requestCanvasUpdate() { _dtw->requestCanvasUpdate(); } virtual void requestCanvasUpdateAndWait() { _dtw->requestCanvasUpdateAndWait(); } virtual void enableInteraction() { _dtw->enableInteraction(); } virtual void disableInteraction() { _dtw->disableInteraction(); } virtual void activateDesktop() { sp_dtw_desktop_activate (_dtw); } virtual void deactivateDesktop() { sp_dtw_desktop_deactivate (_dtw); } virtual void viewSetPosition (Geom::Point p) { _dtw->viewSetPosition (p); } virtual void updateRulers() { sp_desktop_widget_update_rulers (_dtw); } virtual void updateScrollbars (double scale) { sp_desktop_widget_update_scrollbars (_dtw, scale); } virtual void toggleRulers() { sp_desktop_widget_toggle_rulers (_dtw); } virtual void toggleScrollbars() { sp_desktop_widget_toggle_scrollbars (_dtw); } virtual void toggleColorProfAdjust() { sp_desktop_widget_toggle_color_prof_adj(_dtw); } virtual void updateZoom() { sp_desktop_widget_update_zoom (_dtw); } virtual void letZoomGrabFocus() { _dtw->letZoomGrabFocus(); } virtual void setToolboxFocusTo (const gchar * id) { _dtw->setToolboxFocusTo (id); } virtual void setToolboxAdjustmentValue (const gchar *id, double val) { _dtw->setToolboxAdjustmentValue (id, val); } virtual void setToolboxSelectOneValue (gchar const *id, int val) { _dtw->setToolboxSelectOneValue (id, val); } virtual bool isToolboxButtonActive (gchar const* id) { return _dtw->isToolboxButtonActive (id); } virtual void setCoordinateStatus (Geom::Point p) { _dtw->setCoordinateStatus (p); } virtual void setMessage (Inkscape::MessageType type, gchar const* msg) { _dtw->setMessage (type, msg); } virtual bool showInfoDialog( Glib::ustring const &message ) { return _dtw->showInfoDialog( message ); } virtual bool warnDialog (gchar* text) { return _dtw->warnDialog (text); } virtual Inkscape::UI::Widget::Dock* getDock () { return _dtw->getDock(); } }; WidgetStub *stub; void setMessage(Inkscape::MessageType type, gchar const *message); Geom::Point window_get_pointer(); bool shutdown(); void viewSetPosition (Geom::Point p); void letZoomGrabFocus(); void getWindowGeometry (gint &x, gint &y, gint &w, gint &h); void setWindowPosition (Geom::Point p); void setWindowSize (gint w, gint h); void setWindowTransient (void *p, int transient_policy); void presentWindow(); bool showInfoDialog( Glib::ustring const &message ); bool warnDialog (gchar *text); void setToolboxFocusTo (gchar const *); void setToolboxAdjustmentValue (gchar const * id, double value); void setToolboxSelectOneValue (gchar const * id, gint value); bool isToolboxButtonActive (gchar const *id); void setToolboxPosition(Glib::ustring const& id, GtkPositionType pos); void setCoordinateStatus(Geom::Point p); void requestCanvasUpdate(); void requestCanvasUpdateAndWait(); void enableInteraction(); void disableInteraction(); void updateTitle(gchar const *uri); bool onFocusInEvent(GdkEventFocus*); Inkscape::UI::Widget::Dock* getDock(); static GType getType(); static SPDesktopWidget* createInstance(SPNamedView *namedview); void updateNamedview(); private: GtkWidget *tool_toolbox; GtkWidget *aux_toolbox; GtkWidget *commands_toolbox; GtkWidget *snap_toolbox; static void init(SPDesktopWidget *widget); void layoutWidgets(); void namedviewModified(SPObject *obj, guint flags); }; /// The SPDesktopWidget vtable struct SPDesktopWidgetClass { SPViewWidgetClass parent_class; }; #endif /* !SEEN_SP_DESKTOP_WIDGET_H */ /* Local Variables: mode:c++ c-file-style:"stroustrup" c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) indent-tabs-mode:nil fill-column:99 End: */ // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :