Code

Make text widget for TextParams work and re-enable it
[inkscape.git] / src / live_effects / parameter / path.h
index 18ffe5321d7e6480281910d3c55fbcbc2dd0d143..76f3fa774ff61c633a23f6d598e65fca15c9ae97 100644 (file)
@@ -1,61 +1,95 @@
-#ifndef INKSCAPE_LIVEPATHEFFECT_PARAMETER_PATH_H\r
-#define INKSCAPE_LIVEPATHEFFECT_PARAMETER_PATH_H\r
-\r
-/*\r
- * Inkscape::LivePathEffectParameters\r
- *\r
-* Copyright (C) Johan Engelen 2007 <j.b.c.engelen@utwente.nl>\r
- *\r
- * Released under GNU GPL, read the file 'COPYING' for more information\r
- */\r
-\r
-#include <glib/gtypes.h>\r
-#include <2geom/path.h>\r
-\r
-#include "ui/widget/registry.h"\r
-#include <gtkmm/tooltips.h>\r
-\r
-#include "live_effects/parameter/parameter.h"\r
-\r
-#include <sigc++/sigc++.h>\r
-\r
-namespace Inkscape {\r
-\r
-namespace LivePathEffect {\r
-\r
-class PathParam : public Geom::Piecewise<Geom::D2<Geom::SBasis> >, public Parameter {\r
-public:\r
-    PathParam ( const Glib::ustring& label,\r
-                const Glib::ustring& tip,\r
-                const Glib::ustring& key,\r
-                Inkscape::UI::Widget::Registry* wr,\r
-                Effect* effect,\r
-                const gchar * defvalue = "M0,0 L1,1");\r
-    ~PathParam();\r
-\r
-    Gtk::Widget * param_getWidget();\r
-\r
-    bool param_readSVGValue(const gchar * strvalue);\r
-    gchar * param_writeSVGValue() const;\r
-\r
-    sigc::signal <void> signal_path_pasted;\r
-\r
-private:\r
-    PathParam(const PathParam&);\r
-    PathParam& operator=(const PathParam&);\r
-\r
-    Gtk::Widget * _widget;\r
-    Gtk::Tooltips * _tooltips;\r
-\r
-    void param_write_to_repr(const char * svgd);\r
-\r
-    void on_edit_button_click();\r
-    void on_paste_button_click();\r
-};\r
-\r
-\r
-} //namespace LivePathEffect\r
-\r
-} //namespace Inkscape\r
-\r
-#endif\r
+#ifndef INKSCAPE_LIVEPATHEFFECT_PARAMETER_PATH_H
+#define INKSCAPE_LIVEPATHEFFECT_PARAMETER_PATH_H
+
+/*
+ * Inkscape::LivePathEffectParameters
+ *
+* Copyright (C) Johan Engelen 2007 <j.b.c.engelen@utwente.nl>
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include <glib/gtypes.h>
+#include <2geom/path.h>
+
+#include <gtkmm/tooltips.h>
+
+#include "live_effects/parameter/parameter.h"
+#include "live_effects/parameter/path-reference.h"
+#include <sigc++/sigc++.h>
+
+namespace Inkscape {
+
+namespace LivePathEffect {
+
+class PathParam : public Parameter {
+public:
+    PathParam ( const Glib::ustring& label,
+                const Glib::ustring& tip,
+                const Glib::ustring& key,
+                Inkscape::UI::Widget::Registry* wr,
+                Effect* effect,
+                const gchar * default_value = "M0,0 L1,1");
+    virtual ~PathParam();
+
+    std::vector<Geom::Path> const & get_pathvector();
+    Geom::Piecewise<Geom::D2<Geom::SBasis> > const & get_pwd2();
+
+    virtual Gtk::Widget * param_newWidget(Gtk::Tooltips * tooltips);
+
+    virtual bool param_readSVGValue(const gchar * strvalue);
+    virtual gchar * param_getSVGValue() const;
+
+    virtual void param_set_default();
+    void param_set_and_write_default();
+    void set_new_value (std::vector<Geom::Path> const &newpath, bool write_to_svg);
+    void set_new_value (Geom::Piecewise<Geom::D2<Geom::SBasis> > const &newpath, bool write_to_svg);
+
+    virtual void param_editOncanvas(SPItem * item, SPDesktop * dt);
+    virtual void param_setup_nodepath(Inkscape::NodePath::Path *np);
+    virtual void addCanvasIndicators(SPLPEItem *lpeitem, std::vector<Geom::PathVector> &hp_vec);
+
+    virtual void param_transform_multiply(Geom::Matrix const& /*postmul*/, bool /*set*/);
+
+    sigc::signal <void> signal_path_pasted;
+    sigc::signal <void> signal_path_changed;
+
+    void paste_param_path(const char *svgd);
+    void on_paste_button_click();
+
+protected:
+    std::vector<Geom::Path> _pathvector;   // this is primary data storage, since it is closest to SVG.
+
+    Geom::Piecewise<Geom::D2<Geom::SBasis> > _pwd2; // secondary, hence the bool must_recalculate_pwd2
+    bool must_recalculate_pwd2; // set when _pathvector was updated, but _pwd2 not
+    void ensure_pwd2();  // ensures _pwd2 is up to date
+
+    gchar * href;     // contains link to other object, e.g. "#path2428", NULL if PathParam contains pathdata itself
+    PathReference ref;
+    sigc::connection ref_changed_connection;
+    sigc::connection linked_delete_connection;
+    sigc::connection linked_modified_connection;
+    void ref_changed(SPObject *old_ref, SPObject *new_ref);
+    void remove_link();
+    void start_listening(SPObject * to);
+    void quit_listening(void);
+    void linked_delete(SPObject *deleted);
+    void linked_modified(SPObject *linked_obj, guint flags);
+
+    void on_edit_button_click();
+    void on_copy_button_click();
+    void on_link_button_click();
+
+    gchar * defvalue;
+
+private:
+    PathParam(const PathParam&);
+    PathParam& operator=(const PathParam&);
+};
+
+
+} //namespace LivePathEffect
+
+} //namespace Inkscape
+
+#endif