Code

Add checkbox for LPEs to temporarily disable them on canvas (but keep them applied...
[inkscape.git] / src / live_effects / parameter / parameter.cpp
index 0e9295a20bebb26d15455c302278ce90c6dabb45..527f2fdd925ccf37bbc707d4c0454b44a0d7a61a 100644 (file)
-#define INKSCAPE_LIVEPATHEFFECT_PARAMETER_CPP\r
-\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 "live_effects/parameter/parameter.h"\r
-#include "live_effects/effect.h"\r
-#include "svg/svg.h"\r
-#include "libnr/nr-values.h"\r
-\r
-#include <gtkmm.h>\r
-#include "ui/widget/scalar.h"\r
-\r
-#include "svg/stringstream.h"\r
-\r
-#include "verbs.h"\r
-\r
-#define noLPEREALPARAM_DEBUG\r
-\r
-namespace Inkscape {\r
-\r
-namespace LivePathEffect {\r
-\r
-\r
-Parameter::Parameter( const Glib::ustring& label, const Glib::ustring& tip,\r
-                      const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr,\r
-                      Effect* effect )\r
-{\r
-    param_label = label;\r
-    param_tooltip = tip;\r
-    param_key = key;\r
-    param_wr = wr;\r
-    param_effect = effect;\r
-}\r
-\r
-\r
-\r
-/*###########################################\r
- *   REAL PARAM\r
- */\r
-ScalarParam::ScalarParam( const Glib::ustring& label, const Glib::ustring& tip,\r
-                      const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr,\r
-                      Effect* effect, gdouble default_value)\r
-    : Parameter(label, tip, key, wr, effect)\r
-{\r
-    defvalue = default_value;\r
-    value = defvalue;\r
-    min = -NR_HUGE;\r
-    max = NR_HUGE;\r
-    integer = false;\r
-    rsu = NULL;\r
-}\r
-\r
-ScalarParam::~ScalarParam()\r
-{\r
-    if (rsu)\r
-        delete rsu;\r
-}\r
-\r
-bool\r
-ScalarParam::param_readSVGValue(const gchar * strvalue)\r
-{\r
-    double newval;\r
-    unsigned int success = sp_svg_number_read_d(strvalue, &newval);\r
-    if (success == 1) {\r
-        param_set_value(newval);\r
-        return true;\r
-    }\r
-    return false;\r
-}\r
-\r
-gchar *\r
-ScalarParam::param_writeSVGValue() const\r
-{\r
-    Inkscape::SVGOStringStream os;\r
-    os << value;\r
-    gchar * str = g_strdup(os.str().c_str());\r
-    return str;\r
-}\r
-\r
-void\r
-ScalarParam::param_set_default() \r
-{\r
-    param_set_value(defvalue);\r
-}\r
-\r
-void\r
-ScalarParam::param_set_value(gdouble val) \r
-{\r
-    value = val;\r
-    if (integer)\r
-        value = round(value);\r
-    if (value > max)\r
-        value = max;\r
-    if (value < min)\r
-        value = min;\r
-\r
-    if (rsu && !rsu->is_updating())\r
-        rsu->setValue(value);\r
-}\r
-\r
-void\r
-ScalarParam::param_set_range(gdouble min, gdouble max) \r
-{\r
-    this->min = min;\r
-    this->max = max;\r
-    if (rsu)\r
-        rsu->getS()->setRange(min, max);\r
-\r
-    param_set_value(value); // reset value to see whether it is in ranges\r
-}\r
-\r
-void\r
-ScalarParam::param_make_integer(bool yes)\r
-{\r
-    integer = yes;\r
-    if (rsu) {\r
-        rsu->getS()->setDigits(0);\r
-        rsu->getS()->setIncrements(1, 10);\r
-    }\r
-}\r
-\r
-Gtk::Widget *\r
-ScalarParam::param_getWidget()\r
-{\r
-    if (!rsu) {\r
-        rsu = new Inkscape::UI::Widget::RegisteredScalar();\r
-        rsu->init(param_label, param_tooltip, param_key, *param_wr, param_effect->getRepr(), param_effect->getSPDoc());\r
-        rsu->setValue(value);\r
-        if (integer)\r
-            param_make_integer();\r
-\r
-        rsu->set_undo_parameters(SP_VERB_DIALOG_LIVE_PATH_EFFECT, _("Change scalar parameter"));\r
-    }\r
-    return dynamic_cast<Gtk::Widget *> (rsu->getS());\r
-}\r
-\r
-\r
-} /* namespace LivePathEffect */\r
-} /* namespace Inkscape */\r
-\r
-/*\r
-  Local Variables:\r
-  mode:c++\r
-  c-file-style:"stroustrup"\r
-  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))\r
-  indent-tabs-mode:nil\r
-  fill-column:99\r
-  End:\r
-*/\r
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :\r
+#define INKSCAPE_LIVEPATHEFFECT_PARAMETER_CPP
+
+/*
+ * Copyright (C) Johan Engelen 2007 <j.b.c.engelen@utwente.nl>
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "live_effects/parameter/parameter.h"
+#include "live_effects/effect.h"
+#include "svg/svg.h"
+#include "libnr/nr-values.h"
+#include "xml/repr.h"
+#include <gtkmm.h>
+#include "ui/widget/registered-widget.h"
+
+#include "svg/stringstream.h"
+
+#include "verbs.h"
+
+#define noLPEREALPARAM_DEBUG
+
+namespace Inkscape {
+
+namespace LivePathEffect {
+
+
+Parameter::Parameter( const Glib::ustring& label, const Glib::ustring& tip,
+                      const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr,
+                      Effect* effect )
+    : param_key(key),
+      param_wr(wr),
+      param_label(label),
+      oncanvas_editable(false),
+      param_tooltip(tip),
+      param_effect(effect)
+{
+}
+
+
+void
+Parameter::param_write_to_repr(const char * svgd)
+{
+    param_effect->getRepr()->setAttribute(param_key.c_str(), svgd);
+}
+
+/*###########################################
+ *   REAL PARAM
+ */
+ScalarParam::ScalarParam( const Glib::ustring& label, const Glib::ustring& tip,
+                      const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr,
+                      Effect* effect, gdouble default_value)
+    : Parameter(label, tip, key, wr, effect),
+      value(default_value),
+      min(-NR_HUGE),
+      max(NR_HUGE),
+      integer(false),
+      defvalue(default_value),
+      digits(2),
+      inc_step(0.1),
+      inc_page(1)
+{
+}
+
+ScalarParam::~ScalarParam()
+{
+}
+
+bool
+ScalarParam::param_readSVGValue(const gchar * strvalue)
+{
+    double newval;
+    unsigned int success = sp_svg_number_read_d(strvalue, &newval);
+    if (success == 1) {
+        param_set_value(newval);
+        return true;
+    }
+    return false;
+}
+
+gchar *
+ScalarParam::param_writeSVGValue() const
+{
+    Inkscape::SVGOStringStream os;
+    os << value;
+    gchar * str = g_strdup(os.str().c_str());
+    return str;
+}
+
+void
+ScalarParam::param_set_default()
+{
+    param_set_value(defvalue);
+}
+
+void
+ScalarParam::param_set_value(gdouble val)
+{
+    value = val;
+    if (integer)
+        value = round(value);
+    if (value > max)
+        value = max;
+    if (value < min)
+        value = min;
+}
+
+void
+ScalarParam::param_set_range(gdouble min, gdouble max)
+{
+    this->min = min;
+    this->max = max;
+
+    param_set_value(value); // reset value to see whether it is in ranges
+}
+
+void
+ScalarParam::param_make_integer(bool yes)
+{
+    integer = yes;
+    digits = 0;
+    inc_step = 1;
+    inc_page = 10;
+}
+
+Gtk::Widget *
+ScalarParam::param_newWidget(Gtk::Tooltips * /*tooltips*/)
+{
+    Inkscape::UI::Widget::RegisteredScalar *rsu = Gtk::manage( new Inkscape::UI::Widget::RegisteredScalar(
+        param_label, param_tooltip, param_key, *param_wr, param_effect->getRepr(), param_effect->getSPDoc() ) );
+
+    rsu->setValue(value);
+    rsu->setDigits(digits);
+    rsu->setIncrements(inc_step, inc_page);
+    rsu->setRange(min, max);
+    rsu->setProgrammatically = false;
+
+    rsu->set_undo_parameters(SP_VERB_DIALOG_LIVE_PATH_EFFECT, _("Change scalar parameter"));
+
+    return dynamic_cast<Gtk::Widget *> (rsu);
+}
+
+void
+ScalarParam::param_set_digits(unsigned digits)
+{
+    this->digits = digits;
+}
+
+void
+ScalarParam::param_set_increments(double step, double page)
+{
+    inc_step = step;
+    inc_page = page;
+}
+
+
+
+
+} /* namespace LivePathEffect */
+} /* namespace Inkscape */
+
+/*
+  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 :