Code

Split SPCanvasItem and SPCanvasGroup to individual .h files. Removed forward header.
[inkscape.git] / src / widgets / desktop-widget.h
index 0514dd39389a1207186adb109756e5b7aacfabec..1bb10fc51a77cdf6ace982595592e0440460a5df 100644 (file)
@@ -5,45 +5,52 @@
  * SPDesktopWidget: handling Gtk events on a desktop.
  *
  * Authors:
+ *      Jon A. Cruz <jon@joncruz.org> (c) 2010
  *      John Bintz <jcoswell@coswellproductions.org> (c) 2006
  *      Ralf Stephan <ralf@ark.in-berlin.de> (c) 2005, distrib. under GPL2
+ *      Abhishek Sharma
  *      ? -2004
  */
 
 #include <gtk/gtktooltips.h>
 #include <gtk/gtkwindow.h>
 
-#include "display/display-forward.h"
 #include "libnr/nr-point.h"
 #include "forward.h"
+#include "sp-object.h"
 #include "message.h"
 #include "ui/view/view-widget.h"
 #include "ui/view/edit-widget-interface.h"
 
 #include <sigc++/connection.h>
 
-#define SP_TYPE_DESKTOP_WIDGET (sp_desktop_widget_get_type ())
+// forward declaration
+typedef struct _EgeColorProfTracker EgeColorProfTracker;
+struct SPCanvas;
+
+
+#define SP_TYPE_DESKTOP_WIDGET SPDesktopWidget::getType()
 #define SP_DESKTOP_WIDGET(o) (GTK_CHECK_CAST ((o), SP_TYPE_DESKTOP_WIDGET, SPDesktopWidget))
 #define SP_DESKTOP_WIDGET_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_DESKTOP_WIDGET, SPDesktopWidgetClass))
 #define SP_IS_DESKTOP_WIDGET(o) (GTK_CHECK_TYPE ((o), SP_TYPE_DESKTOP_WIDGET))
 #define SP_IS_DESKTOP_WIDGET_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_DESKTOP_WIDGET))
 
-GtkType sp_desktop_widget_get_type();
-
 void sp_desktop_widget_destroy (SPDesktopWidget* dtw);
 
-gint sp_desktop_widget_set_focus(GtkWidget *widget, GdkEvent *event, SPDesktopWidget *dtw);
-
 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_layout(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);
@@ -52,6 +59,8 @@ 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;
@@ -64,24 +73,25 @@ struct SPDesktopWidget {
 
     SPDesktop *desktop;
 
-    GtkWindow *window;
-    
+    Gtk::Window *window;
+
     // The root vbox of the window layout.
     GtkWidget *vbox;
 
+    GtkWidget *hbox;
+
     GtkWidget *menubar, *statusbar;
 
-    GtkWidget *panels;
+    Inkscape::UI::Dialogs::SwatchesPanel *panels;
 
     GtkWidget *hscrollbar, *vscrollbar, *vscrollbar_box;
 
-    GtkWidget *tool_toolbox, *aux_toolbox, *commands_toolbox;
-
     /* 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;
@@ -90,20 +100,24 @@ struct SPDesktopWidget {
     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;
-    NR::Point ruler_origin;
+    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;
@@ -111,29 +125,40 @@ struct SPDesktopWidget {
 
         virtual void setTitle (gchar const *uri)
             { _dtw->updateTitle (uri); }
-        virtual void* getWindow()
+        virtual Gtk::Window* getWindow()
             { return _dtw->window; }
-        virtual void layout() 
-            { sp_desktop_widget_layout (_dtw); }
-        virtual void present() 
+
+        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 (NR::Point p)
+        virtual void setPosition (Geom::Point p)
             { _dtw->setWindowPosition (p); }
         virtual void setTransient (void* p, int transient_policy)
             { _dtw->setWindowTransient (p, transient_policy); }
-        virtual NR::Point getPointer()
+        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()
-            { gtk_widget_destroy (static_cast<GtkWidget*>((void*)(_dtw->window)));}
-        
+            {
+                if(_dtw->window != NULL)
+                    delete _dtw->window;
+                _dtw->window = NULL;
+            }
+
         virtual void requestCanvasUpdate()
             { _dtw->requestCanvasUpdate(); }
         virtual void requestCanvasUpdateAndWait()
@@ -146,7 +171,7 @@ struct SPDesktopWidget {
             { sp_dtw_desktop_activate (_dtw); }
         virtual void deactivateDesktop()
             { sp_dtw_desktop_deactivate (_dtw); }
-        virtual void viewSetPosition (NR::Point p)
+        virtual void viewSetPosition (Geom::Point p)
             { _dtw->viewSetPosition (p); }
         virtual void updateRulers()
             { sp_desktop_widget_update_rulers (_dtw); }
@@ -156,6 +181,8 @@ struct SPDesktopWidget {
             { 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()
@@ -164,38 +191,64 @@ struct SPDesktopWidget {
             { _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 (NR::Point p)
+        virtual void setCoordinateStatus (Geom::Point p)
             { _dtw->setCoordinateStatus (p); }
         virtual void setMessage (Inkscape::MessageType type, gchar const* msg)
             { _dtw->setMessage (type, msg); }
         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);
-    NR::Point window_get_pointer();
+    Geom::Point window_get_pointer();
     bool shutdown();
-    void viewSetPosition (NR::Point p);
+    void viewSetPosition (Geom::Point p);
     void letZoomGrabFocus();
     void getWindowGeometry (gint &x, gint &y, gint &w, gint &h);
-    void setWindowPosition (NR::Point p);
+    void setWindowPosition (Geom::Point p);
     void setWindowSize (gint w, gint h);
     void setWindowTransient (void *p, int transient_policy);
     void presentWindow();
     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 setCoordinateStatus(NR::Point p);
+    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 GtkType 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