Code

Add a constrained snap method that takes multiple constraints. This reduces the code...
[inkscape.git] / src / ui / tool / multi-path-manipulator.h
index 89c86b0196574d47e5c46899361502d0f8bb689d..181ae6d1d6c32643447b916d79b0cb609362fe5a 100644 (file)
 #include <sigc++/connection.h>
 #include "display/display-forward.h"
 #include "forward.h"
+#include "ui/tool/commit-events.h"
 #include "ui/tool/manipulator.h"
+#include "ui/tool/modifier-tracker.h"
+#include "ui/tool/node.h"
 #include "ui/tool/node-types.h"
-#include "ui/tool/commit-events.h"
+#include "ui/tool/shape-record.h"
 
 struct SPCanvasGroup;
 
@@ -29,30 +32,22 @@ struct PathSharedData;
 
 /**
  * Manipulator that manages multiple path manipulators active at the same time.
- * It functions like a boost::ptr_set - manipulators added via insert() are retained.
  */
 class MultiPathManipulator : public PointManipulator {
 public:
-    MultiPathManipulator(PathSharedData const &data, sigc::connection &chg);
+    MultiPathManipulator(PathSharedData &data, sigc::connection &chg);
     virtual ~MultiPathManipulator();
     virtual bool event(GdkEvent *event);
 
     bool empty() { return _mmap.empty(); }
     unsigned size() { return _mmap.empty(); }
-    // TODO fix this garbage!
-    void setItems(std::map<SPPath*, std::pair<Geom::Matrix, guint32> > const &items);
+    void setItems(std::set<ShapeRecord> const &);
     void clear() { _mmap.clear(); }
     void cleanup();
 
     void selectSubpaths();
-    void selectAll();
-    void selectArea(Geom::Rect const &area, bool take);
     void shiftSelection(int dir);
-    void linearGrow(int dir);
-    void spatialGrow(int dir);
-    void invertSelection();
     void invertSelectionInSubpaths();
-    void deselect();
 
     void setNodeType(NodeType t);
     void setSegmentType(SegmentType t);
@@ -61,7 +56,7 @@ public:
     void joinNodes();
     void breakNodes();
     void deleteNodes(bool keep_shape = true);
-    void joinSegment();
+    void joinSegments();
     void deleteSegments();
     void alignNodes(Geom::Dim2 d);
     void distributeNodes(Geom::Dim2 d);
@@ -71,12 +66,15 @@ public:
     void showOutline(bool show);
     void showHandles(bool show);
     void showPathDirection(bool show);
-    void setOutlineTransform(SPPath *item, Geom::Matrix const &t);
+    void setLiveOutline(bool set);
+    void setLiveObjects(bool set);
+    void updateOutlineColors();
     
-    sigc::signal<void> signal_coords_changed;
+    sigc::signal<void> signal_coords_changed; /// Emitted whenever the coordinates
+        /// shown in the status bar need updating
 private:
-    typedef std::pair<SPPath*, boost::shared_ptr<PathManipulator> > MapPair;
-    typedef std::map<SPPath*, boost::shared_ptr<PathManipulator> > MapType;
+    typedef std::pair<ShapeRecord, boost::shared_ptr<PathManipulator> > MapPair;
+    typedef std::map<ShapeRecord, boost::shared_ptr<PathManipulator> > MapType;
 
     template <typename R>
     void invokeForAll(R (PathManipulator::*method)()) {
@@ -106,14 +104,21 @@ private:
     void _commit(CommitEvent cps);
     void _done(gchar const *);
     void _doneWithCleanup(gchar const *);
-    void _storeClipMaskItems(SPObject *obj, std::set<SPPath*> &, bool);
+    guint32 _getOutlineColor(ShapeRole role);
 
     MapType _mmap;
+public:
     PathSharedData const &_path_data;
+private:
     sigc::connection &_changed;
+    ModifierTracker _tracker;
     bool _show_handles;
     bool _show_outline;
     bool _show_path_direction;
+    bool _live_outline;
+    bool _live_objects;
+
+    friend class PathManipulator;
 };
 
 } // namespace UI