Code

LPE: implement NEW path-along-path effect, i think that old one has become obsolete...
[inkscape.git] / src / desktop.h
index 42e059db20a0e3bd1305f401d7aacc6d82de7c46..2a811a72383e4e1edc3367891495d70d1f77327f 100644 (file)
 #include "config.h"
 #endif
 
+#include <gdk/gdkevents.h>
 #include <gtk/gtktypeutils.h>
 #include <sigc++/sigc++.h>
+
 #include "libnr/nr-matrix.h"
 #include "libnr/nr-matrix-fns.h"
 #include "libnr/nr-rect.h"
@@ -35,6 +37,8 @@
 
 class NRRect;
 class SPCSSAttr;
+struct _GtkWidget;
+typedef struct _GtkWidget GtkWidget;
 struct SPCanvas;
 struct SPCanvasItem;
 struct SPCanvasGroup;
@@ -46,8 +50,15 @@ struct SPObject;
 struct SPStyle;
 struct SPViewWidget;
 
+namespace Gtk
+{
+  class Window;
+}
+
 typedef int sp_verb_t;
 
+
+
 namespace Inkscape { 
   class Application;
   class MessageContext;
@@ -83,7 +94,7 @@ struct SPDesktop : public Inkscape::UI::View::View
 
     SPCanvasItem  *acetate;
     SPCanvasGroup *main;
-    SPCanvasGroup *grid;
+    SPCanvasGroup *gridgroup;
     SPCanvasGroup *guides;
     SPCanvasItem  *drawing;
     SPCanvasGroup *sketch;
@@ -97,8 +108,9 @@ struct SPDesktop : public Inkscape::UI::View::View
     GList *zooms_future;
     unsigned int dkey;
     unsigned int number;
-    bool is_fullscreen;
+    guint window_state;
     unsigned int interaction_disabled_counter;
+    bool waiting_cursor;
 
     /// \todo fixme: This has to be implemented in different way */
     guint guides_active : 1;
@@ -169,6 +181,8 @@ struct SPDesktop : public Inkscape::UI::View::View
     int displayMode;
     int getMode() const { return displayMode; }
 
+    Inkscape::UI::Widget::Dock* getDock() { return _widget->getDock(); }
+
     void set_active (bool new_active);
     SPObject *currentRoot() const;
     SPObject *currentLayer() const;
@@ -214,18 +228,19 @@ struct SPDesktop : public Inkscape::UI::View::View
     void next_zoom();
 
     bool scroll_to_point (NR::Point const *s_dt, gdouble autoscrollspeed = 0);
-    void scroll_world (double dx, double dy);
-    void scroll_world (NR::Point const scroll)
+    void scroll_world (double dx, double dy, bool is_scrolling = false);
+    void scroll_world (NR::Point const scroll, bool is_scrolling = false)
     {
         using NR::X;
-       using NR::Y;
-       scroll_world(scroll[X], scroll[Y]);
+        using NR::Y;
+        scroll_world(scroll[X], scroll[Y], is_scrolling);
     }
 
     void getWindowGeometry (gint &x, gint &y, gint &w, gint &h);
     void setWindowPosition (NR::Point p);
     void setWindowSize (gint w, gint h);
     void setWindowTransient (void* p, int transient_policy=1);
+    Gtk::Window* getToplevel();
     void presentWindow();
     bool warnDialog (gchar *text);
     void toggleRulers();
@@ -234,19 +249,33 @@ struct SPDesktop : public Inkscape::UI::View::View
     void destroyWidget();
     void setToolboxFocusTo (gchar const* label);
     void setToolboxAdjustmentValue (gchar const* id, double val);
+    void setToolboxSelectOneValue (gchar const* id, gint val);
     bool isToolboxButtonActive (gchar const *id);
     void updateNow();
     void updateCanvasNow();
     
     void enableInteraction();
     void disableInteraction();
+
+    void setWaitingCursor();
+    void clearWaitingCursor();
     
+    void toggleGrids();
+    bool gridsEnabled() { return grids_visible; }
+    void showGrids(bool show);
+
+    bool is_iconified();
+    bool is_maximized();
+    bool is_fullscreen();
+
+    void iconify();
+    void maximize();
     void fullscreen();
 
     void registerEditWidget (Inkscape::UI::View::EditWidgetInterface *widget)
     { _widget = widget; }
 
-    NR::Matrix w2d() const;
+    NR::Matrix w2d() const; //transformation from window to desktop coordinates (used for zooming)
     NR::Point w2d(NR::Point const &p) const;
     NR::Point d2w(NR::Point const &p) const;
     NR::Matrix doc2dt() const;
@@ -258,6 +287,9 @@ struct SPDesktop : public Inkscape::UI::View::View
     virtual void mouseover() {}
     virtual void mouseout() {}
 
+    virtual bool onDeleteUI (GdkEventAny*);
+    virtual bool onWindowStateEvent (GdkEventWindowState* event);
+
 private:
     Inkscape::UI::View::EditWidgetInterface       *_widget;
     Inkscape::Application     *_inkscape;
@@ -266,7 +298,10 @@ private:
     NR::Matrix _w2d;
     NR::Matrix _d2w;
     NR::Matrix _doc2dt;
-    
+
+    bool grids_visible; /* don't set this variable directly, use the method below */
+    void set_grids_visible(bool visible);
+
     void push_current_zoom (GList**);
 
     sigc::signal<void,SPDesktop*,SPDocument*>     _document_replaced_signal;
@@ -274,7 +309,7 @@ private:
     sigc::signal<void>                 _deactivate_signal;
     sigc::signal<void,SPDesktop*,SPEventContext*> _event_context_changed_signal;
     sigc::signal<void, gpointer>       _tool_subselection_changed;
-  
+
     sigc::connection _activate_connection;
     sigc::connection _deactivate_connection;
     sigc::connection _sel_modified_connection;
@@ -283,7 +318,7 @@ private:
     sigc::connection _reconstruction_finish_connection;
     sigc::connection _commit_connection;
     sigc::connection _modified_connection;
-    
+
     virtual void onPositionSet (double, double);
     virtual void onResized (double, double);
     virtual void onRedrawRequested();