Code

Implement selection spatial grow
[inkscape.git] / src / ui / tool / path-manipulator.h
index 01a2b6cbf5bbc3c756c7d812252e044d69f0508d..82ce7fd5d3e560689936299f7634f49af49fe779 100644 (file)
@@ -25,6 +25,8 @@
 struct SPCanvasItem;
 
 namespace Inkscape {
+namespace XML { class Node; }
+
 namespace UI {
 
 class PathManipulator;
@@ -32,6 +34,8 @@ class ControlPointSelection;
 class PathManipulatorObserver;
 class CurveDragPoint;
 class PathCanvasGroups;
+class MultiPathManipulator;
+class Node;
 
 struct PathSharedData {
     NodeSharedData node_data;
@@ -48,8 +52,8 @@ class PathManipulator : public PointManipulator {
 public:
     typedef SPPath *ItemType;
 
-    PathManipulator(PathSharedData const &data, SPPath *path,
-        Geom::Matrix const &edit_trans, guint32 outline_color);
+    PathManipulator(MultiPathManipulator &mpm, SPPath *path, Geom::Matrix const &edit_trans,
+        guint32 outline_color, Glib::ustring lpe_key);
     ~PathManipulator();
     virtual bool event(GdkEvent *);
 
@@ -63,13 +67,12 @@ public:
     void selectAll();
     void selectArea(Geom::Rect const &);
     void shiftSelection(int dir);
-    void linearGrow(int dir);
-    void spatialGrow(int dir);
+    void linearGrow(NodeList::iterator center, int dir);
     void invertSelection();
     void invertSelectionInSubpaths();
 
     void insertNodes();
-    void weldNodes(NodeList::iterator const &preserve_pos = NodeList::iterator());
+    void weldNodes(NodeList::iterator preserve_pos = NodeList::iterator());
     void weldSegments();
     void breakNodes();
     void deleteNodes(bool keep_shape = true);
@@ -81,8 +84,11 @@ public:
     void showHandles(bool show);
     void showPathDirection(bool show);
     void setControlsTransform(Geom::Matrix const &);
+    void hideDragPoint();
 
     NodeList::iterator subdivideSegment(NodeList::iterator after, double t);
+    NodeList::iterator extremeNode(NodeList::iterator origin, bool search_selected,
+        bool search_unselected, bool closest);
 
     static bool is_item_type(void *item);
 private:
@@ -94,6 +100,10 @@ private:
     std::string _createTypeString();
     void _updateOutline();
     //void _setOutline(Geom::PathVector const &);
+    void _getGeometry();
+    void _setGeometry();
+    Glib::ustring _nodetypesKey();
+    Inkscape::XML::Node *_getXMLNode();
 
     void _attachNodeHandlers(Node *n);
     void _removeNodeHandlers(Node *n);
@@ -111,7 +121,7 @@ private:
     double _getStrokeTolerance();
 
     SubpathList _subpaths;
-    PathSharedData const &_path_data;
+    MultiPathManipulator &_multi_path_manipulator;
     SPPath *_path;
     SPCurve *_spcurve; // in item coordinates
     SPCanvasItem *_outline;
@@ -124,9 +134,11 @@ private:
     bool _show_handles;
     bool _show_outline;
     bool _show_path_direction;
+    Glib::ustring _lpe_key;
 
     friend class PathManipulatorObserver;
     friend class CurveDragPoint;
+    friend class Node;
 };
 
 } // namespace UI