Code

Fix build failure
[inkscape.git] / src / shape-editor.h
index 8e563b433d0185afb658cb2f31d6fcc8f2db781b..f400244b326ac40b8ad73512af8181007c7caa27 100644 (file)
  */
 
 #include <forward.h>
+#include <2geom/forward.h>
 
-namespace Inkscape {
-namespace NodePath {
-class Path;
-}
-}
+namespace Inkscape { namespace NodePath { class Path; } }
+namespace Inkscape { namespace XML { class Node; } }
 
-#include "libnr/nr-path-code.h"
-#include "libnr/nr-point.h"
-#include "libnr/nr-maybe.h"
-
-class SPKnotHolder;
+class KnotHolder;
 class SPDesktop;
 class SPNodeContext;
 class ShapeEditorsCollective;
+class LivePathEffectObject;
+
+#include "libnr/nr-path-code.h"
+#include <2geom/point.h>
+#include <boost/optional.hpp>
+#include <vector>
+
+enum SubType{
+    SH_NODEPATH,
+    SH_KNOTHOLDER
+};
 
 class ShapeEditor {
 public:
@@ -35,122 +40,38 @@ public:
     ShapeEditor(SPDesktop *desktop);
     ~ShapeEditor();
 
-    void set_item (SPItem *item);
-    void set_item_livepatheffect_parameter(SPItem *item, SPObject *lpeobject, const char * key);
-    void reset_item ();
-    void unset_item ();
+    void set_item (SPItem *item, SubType type, bool keep_knotholder = false);
+    void unset_item (SubType type, bool keep_knotholder = false);
 
-    SPItem *get_item ();
+    bool has_nodepath (); //((deprecated))
+    void update_knotholder (); //((deprecated))
 
-    bool has_nodepath ();
-    bool has_knotholder ();
-
-    bool has_local_change ();
-    void decrement_local_change ();
+    bool has_local_change (SubType type);
+    void decrement_local_change (SubType type);
 
     GList *save_nodepath_selection ();
     void restore_nodepath_selection (GList *saved);
 
     void nodepath_destroyed ();
 
-    void update_statusbar ();
-
-    bool is_over_stroke (NR::Point event_p, bool remember);
-
-    void add_node_near_point(); // uses the shapeeditor's remembered point, if any
-
-    void select_segment_near_point(bool toggle); // uses the shapeeditor's remembered point, if any
-
-    void cancel_hit ();
-
-    bool hits_curve ();
-
-    void curve_drag (gdouble eventx, gdouble eventy);
-
-    void finish_drag ();
-
-    void select_rect (NR::Rect  const &rect, bool add);
-
     bool has_selection ();
-    void deselect ();
-
-    Inkscape::NodePath::Path *get_nodepath() {return nodepath;} //((deprecated))
-    ShapeEditorsCollective *get_container() {return container;}
-
-    void add_node();
-
-    void delete_nodes();
-    void delete_nodes_preserving_shape();
-    void delete_segment();
-
-    void set_node_type(int type);
-
-    void break_at_nodes();
-    void join_nodes();
-    void join_segments();
-
-    void duplicate_nodes();
 
-    void set_type_of_segments(NRPathcode code);
+    Inkscape::NodePath::Path *get_nodepath() {return NULL;} //((deprecated))
+    ShapeEditorsCollective *get_container() {return NULL;}
 
-    void move_nodes(gdouble dx, gdouble dy);
-    void move_nodes_screen(gdouble dx, gdouble dy);
+    // this one is only public because it's called from non-C++ repr changed callback
+    void shapeeditor_event_attr_changed(gchar const *name);
 
-    void rotate_nodes(gdouble angle, int which, bool screen);
-
-    void scale_nodes(gdouble const grow, int const which);
-    void scale_nodes_screen(gdouble const grow, int const which);
-
-    void select_all (bool invert);
-    void select_all_from_subpath (bool invert);
-    void select_next ();
-    void select_prev ();
-
-    void show_handles (bool show);
-    void show_helperpath (bool show);
-
-    void flip (NR::Dim2 axis, NR::Maybe<NR::Point> center = NR::Nothing());
-
-    void distribute (NR::Dim2 axis);
-    void align (NR::Dim2 axis);
-
-    bool nodepath_edits_repr_key(gchar const *name);
-
-private:
-    SPDesktop *desktop;
-
-    Inkscape::NodePath::Path *nodepath;
-    SPKnotHolder *knotholder;
-
-    ShapeEditorsCollective *container;
-
-    //Inkscape::XML::Node *lidtened_repr;
-
-    double grab_t;
-    int grab_node; // number of node grabbed by sp_node_context_is_over_stroke
-    bool hit;
-    NR::Point curvepoint_event; // int coords from event
-    NR::Point curvepoint_doc; // same, in doc coords
-};
-
-
-/* As the next stage, this will be a collection of multiple ShapeEditors,
-with the same interface as the single ShapeEditor, passing the actions to all its
-contained ShapeEditors. Thus it should be easy to switch node context from 
-using a single ShapeEditor to using a ShapeEditorsCollective. */
-
-class ShapeEditorsCollective {
-public:
-
-    ShapeEditorsCollective(SPDesktop *desktop);
-    ~ShapeEditorsCollective();
-
-    void update_statusbar();
+    bool knot_mouseover();
 
 private:
-    std::vector<ShapeEditor> editors;
+    bool has_knotholder ();
+    void reset_item (SubType type, bool keep_knotholder = true);
+    const SPItem *get_item (SubType type);
 
-    SPNodeContext *nc; // who holds us
+    SPDesktop *desktop;
+    KnotHolder *knotholder;
+    Inkscape::XML::Node *knotholder_listener_attached_for;
 };
 
 #endif