Code

Split SPCanvasItem and SPCanvasGroup to individual .h files. Removed forward header.
[inkscape.git] / src / ui / tool / multi-path-manipulator.h
index 89c86b0196574d47e5c46899361502d0f8bb689d..aef9c1ac9d0045a829253921aa3722de456f36cb 100644 (file)
 #define SEEN_UI_TOOL_MULTI_PATH_MANIPULATOR_H
 
 #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,39 +31,32 @@ 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);
 
     void insertNodes();
+    void duplicateNodes();
     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
@@ -130,4 +135,4 @@ private:
   fill-column:99
   End:
 */
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :