Code

fix shift+middle button zoom area when there are other modifiers in the mask; safe...
[inkscape.git] / src / live_effects / parameter / parameter.h
index 93cdc94ee03a312983f4a47b08bdafbc0865397e..61c151b0e9e8398546aed9725df9846a730bfea8 100644 (file)
-#ifndef INKSCAPE_LIVEPATHEFFECT_PARAMETER_H\r
-#define INKSCAPE_LIVEPATHEFFECT_PARAMETER_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 <glibmm/ustring.h>\r
-#include <2geom/point.h>\r
-#include <2geom/path.h>\r
-\r
-#include "ui/widget/registry.h"\r
-#include "ui/widget/registered-widget.h"\r
-\r
-namespace Gtk {\r
-    class Widget;\r
-}\r
-\r
-namespace Inkscape {\r
-\r
-namespace LivePathEffect {\r
-\r
-class Effect;\r
-\r
-class Parameter {\r
-public:\r
-    Parameter(  const Glib::ustring& label,\r
-                const Glib::ustring& tip,\r
-                const Glib::ustring& key,\r
-                Inkscape::UI::Widget::Registry* wr,\r
-                Effect* effect);\r
-    virtual ~Parameter() {};\r
-\r
-    virtual bool param_readSVGValue(const gchar * strvalue) = 0;   // returns true if new value is valid / accepted.\r
-    virtual gchar * param_writeSVGValue() const = 0;\r
-\r
-    // This returns pointer to the parameter's widget to be put in the live-effects dialog. Must also create the\r
-    // necessary widget if it does not exist yet.\r
-    virtual Gtk::Widget * param_getWidget() = 0;\r
-    virtual Glib::ustring * param_getTooltip() { return &param_tooltip; };\r
-\r
-    Glib::ustring param_key;\r
-    Inkscape::UI::Widget::Registry * param_wr;\r
-    Glib::ustring param_label;\r
-\r
-protected:\r
-    Glib::ustring param_tooltip;\r
-\r
-    Effect* param_effect;\r
-\r
-private:\r
-    Parameter(const Parameter&);\r
-    Parameter& operator=(const Parameter&);\r
-};\r
-\r
-\r
-class RealParam : public Parameter {\r
-public:\r
-    RealParam(  const Glib::ustring& label,\r
-                const Glib::ustring& tip,\r
-                const Glib::ustring& key, \r
-                Inkscape::UI::Widget::Registry* wr,\r
-                Effect* effect,\r
-                gdouble initial_value = 1.0);\r
-    ~RealParam();\r
-\r
-    bool param_readSVGValue(const gchar * strvalue);\r
-    gchar * param_writeSVGValue() const;\r
-\r
-    Gtk::Widget * param_getWidget();\r
-\r
-    inline operator gdouble()\r
-        { return value; };\r
-\r
-private:\r
-    RealParam(const RealParam&);\r
-    RealParam& operator=(const RealParam&);\r
-\r
-    gdouble value;\r
-    Inkscape::UI::Widget::RegisteredScalar * rsu;\r
-};\r
-\r
-\r
-} //namespace LivePathEffect\r
-\r
-} //namespace Inkscape\r
-\r
-#endif\r
+#ifndef INKSCAPE_LIVEPATHEFFECT_PARAMETER_H
+#define INKSCAPE_LIVEPATHEFFECT_PARAMETER_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 <glibmm/ustring.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;
+
+class Parameter {
+public:
+    Parameter(  const Glib::ustring& label,
+                const Glib::ustring& tip,
+                const Glib::ustring& key,
+                Inkscape::UI::Widget::Registry* wr,
+                Effect* effect);
+    virtual ~Parameter() {};
+
+    virtual bool param_readSVGValue(const gchar * strvalue) = 0;   // returns true if new value is valid / accepted.
+    virtual gchar * param_getSVGValue() const = 0;
+    void write_to_SVG() { param_write_to_repr(param_getSVGValue()); }
+    virtual void param_set_default() = 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; };
+
+    // 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&);
+};
+
+
+class ScalarParam : public Parameter {
+public:
+    ScalarParam(  const Glib::ustring& label,
+                const Glib::ustring& tip,
+                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_getSVGValue() const;
+
+    virtual void param_set_default();
+    void param_set_value(gdouble val);
+    void param_make_integer(bool yes = true);
+    void param_set_range(gdouble min, gdouble max);
+    void param_set_digits(unsigned digits);
+    void param_set_increments(double step, double page);
+
+    virtual Gtk::Widget * param_newWidget(Gtk::Tooltips * tooltips);
+
+    inline operator gdouble()
+        { return value; };
+
+protected:
+    gdouble value;
+    gdouble min;
+    gdouble max;
+    bool integer;
+    gdouble defvalue;
+    unsigned digits;
+    double inc_step;
+    double inc_page;
+
+private:
+    ScalarParam(const ScalarParam&);
+    ScalarParam& operator=(const ScalarParam&);
+};
+
+} //namespace LivePathEffect
+
+} //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:encoding=utf-8:textwidth=99 :