Code

Super duper mega (fun!) commit: replaced encoding=utf-8 with fileencoding=utf-8 in...
[inkscape.git] / src / live_effects / parameter / parameter.h
index a41d5f7c6907d337023fdb27c6577ab799fd889c..ff878e717ac1f8daaef18c206fabdc15f124d78b 100644 (file)
  */
 
 #include <glibmm/ustring.h>
-#include <2geom/point.h>
-#include <2geom/path.h>
-
-#include "ui/widget/registry.h"
-#include "ui/widget/registered-widget.h"
+#include <2geom/forward.h>
+#include <2geom/pathvector.h>
 
+class KnotHolder;
+class SPLPEItem;
 struct SPDesktop;
 struct SPItem;
 
 namespace Gtk {
     class Widget;
+    class Tooltips;
 }
 
 namespace Inkscape {
 
+namespace NodePath {
+    class Path ;
+}
+
+namespace UI {
+namespace Widget {
+    class Registry;
+}
+}
+
 namespace LivePathEffect {
 
 class Effect;
@@ -39,28 +49,40 @@ public:
     virtual ~Parameter() {};
 
     virtual bool param_readSVGValue(const gchar * strvalue) = 0;   // returns true if new value is valid / accepted.
-    virtual gchar * param_writeSVGValue() const = 0;
-
+    virtual gchar * param_getSVGValue() const = 0;
+    void write_to_SVG() { param_write_to_repr(param_getSVGValue()); }
     virtual void param_set_default() = 0;
 
-    // This returns pointer to the parameter's widget to be put in the live-effects dialog. Must also create the
-    // necessary widget if it does not exist yet.
-    virtual Gtk::Widget * param_getWidget() = 0;
+    // This creates a new widget (newed with Gtk::manage(new ...);)
+    virtual Gtk::Widget * param_newWidget(Gtk::Tooltips * tooltips) = 0;
+
     virtual Glib::ustring * param_getTooltip() { return &param_tooltip; };
 
-    virtual void param_editOncanvas(SPItem * item, SPDesktop * dt) { return; };
+    // overload these for your particular parameter to make it provide knotholder handles or canvas helperpaths
+    virtual bool providesKnotHolderEntities() { return false; }
+    virtual void addKnotHolderEntities(KnotHolder */*knotholder*/, SPDesktop */*desktop*/, SPItem */*item*/) {};
+    virtual void addCanvasIndicators(SPLPEItem */*lpeitem*/, std::vector<Geom::PathVector> &/*hp_vec*/) {};
+
+    virtual void param_editOncanvas(SPItem * /*item*/, SPDesktop * /*dt*/) {};
+    virtual void param_setup_nodepath(Inkscape::NodePath::Path */*np*/) {};
+
+    virtual void param_transform_multiply(Geom::Matrix const& /*postmul*/, bool /*set*/) {};
 
     Glib::ustring param_key;
     Inkscape::UI::Widget::Registry * param_wr;
     Glib::ustring param_label;
 
     bool oncanvas_editable;
+    bool widget_is_visible;
 
 protected:
     Glib::ustring param_tooltip;
 
     Effect* param_effect;
 
+    void param_write_to_repr(const char * svgd);
+
 private:
     Parameter(const Parameter&);
     Parameter& operator=(const Parameter&);
@@ -71,14 +93,14 @@ class ScalarParam : public Parameter {
 public:
     ScalarParam(  const Glib::ustring& label,
                 const Glib::ustring& tip,
-                const Glib::ustring& key, 
+                const Glib::ustring& key,
                 Inkscape::UI::Widget::Registry* wr,
                 Effect* effect,
                 gdouble default_value = 1.0);
     virtual ~ScalarParam();
 
     virtual bool param_readSVGValue(const gchar * strvalue);
-    virtual gchar * param_writeSVGValue() const;
+    virtual gchar * param_getSVGValue() const;
 
     virtual void param_set_default();
     void param_set_value(gdouble val);
@@ -87,7 +109,7 @@ public:
     void param_set_digits(unsigned digits);
     void param_set_increments(double step, double page);
 
-    virtual Gtk::Widget * param_getWidget();
+    virtual Gtk::Widget * param_newWidget(Gtk::Tooltips * tooltips);
 
     inline operator gdouble()
         { return value; };
@@ -98,7 +120,6 @@ protected:
     gdouble max;
     bool integer;
     gdouble defvalue;
-    Inkscape::UI::Widget::RegisteredScalar * rsu;
     unsigned digits;
     double inc_step;
     double inc_page;
@@ -113,3 +134,14 @@ private:
 } //namespace Inkscape
 
 #endif
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :