Code

Add checkbox for LPEs to temporarily disable them on canvas (but keep them applied...
[inkscape.git] / src / live_effects / parameter / parameter.cpp
index 500578db464a75fd1cdfed451b29cb7b7abae47e..527f2fdd925ccf37bbc707d4c0454b44a0d7a61a 100644 (file)
@@ -10,9 +10,9 @@
 #include "live_effects/effect.h"
 #include "svg/svg.h"
 #include "libnr/nr-values.h"
-
+#include "xml/repr.h"
 #include <gtkmm.h>
-#include "ui/widget/scalar.h"
+#include "ui/widget/registered-widget.h"
 
 #include "svg/stringstream.h"
 
@@ -28,16 +28,21 @@ namespace LivePathEffect {
 Parameter::Parameter( const Glib::ustring& label, const Glib::ustring& tip,
                       const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr,
                       Effect* effect )
-    : oncanvas_editable(false)
+    : param_key(key),
+      param_wr(wr),
+      param_label(label),
+      oncanvas_editable(false),
+      param_tooltip(tip),
+      param_effect(effect)
 {
-    param_label = label;
-    param_tooltip = tip;
-    param_key = key;
-    param_wr = wr;
-    param_effect = effect;
 }
 
 
+void
+Parameter::param_write_to_repr(const char * svgd)
+{
+    param_effect->getRepr()->setAttribute(param_key.c_str(), svgd);
+}
 
 /*###########################################
  *   REAL PARAM
@@ -45,23 +50,20 @@ Parameter::Parameter( const Glib::ustring& label, const Glib::ustring& tip,
 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)
+    : 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)
 {
-    defvalue = default_value;
-    value = defvalue;
-    min = -NR_HUGE;
-    max = NR_HUGE;
-    integer = false;
-    rsu = NULL;
-    inc_step = 0.1;
-    inc_page = 1;
-    digits = 2;
 }
 
 ScalarParam::~ScalarParam()
 {
-    if (rsu)
-        delete rsu;
 }
 
 bool
@@ -101,9 +103,6 @@ ScalarParam::param_set_value(gdouble val)
         value = max;
     if (value < min)
         value = min;
-
-    if (rsu && !rsu->is_updating())
-        rsu->setValue(value);
 }
 
 void
@@ -111,8 +110,6 @@ ScalarParam::param_set_range(gdouble min, gdouble max)
 {
     this->min = min;
     this->max = max;
-    if (rsu)
-        rsu->getS()->setRange(this->min, this->max);
 
     param_set_value(value); // reset value to see whether it is in ranges
 }
@@ -124,35 +121,29 @@ ScalarParam::param_make_integer(bool yes)
     digits = 0;
     inc_step = 1;
     inc_page = 10;
-    if (rsu) {
-        rsu->getS()->setDigits(digits);
-        rsu->getS()->setIncrements(inc_step, inc_page);
-    }
 }
 
 Gtk::Widget *
-ScalarParam::param_getWidget()
+ScalarParam::param_newWidget(Gtk::Tooltips * /*tooltips*/)
 {
-    if (!rsu) {
-        rsu = new Inkscape::UI::Widget::RegisteredScalar();
-        rsu->init(param_label, param_tooltip, param_key, *param_wr, param_effect->getRepr(), param_effect->getSPDoc());
-        rsu->setValue(value);
-        rsu->getS()->setDigits(digits);
-        rsu->getS()->setIncrements(inc_step, inc_page);
-        rsu->getS()->setRange(min, max);
-
-        rsu->set_undo_parameters(SP_VERB_DIALOG_LIVE_PATH_EFFECT, _("Change scalar parameter"));
-    }
-    return dynamic_cast<Gtk::Widget *> (rsu->getS());
+    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;
-    if (rsu) {
-        rsu->getS()->setDigits(digits);
-    }
 }
 
 void
@@ -160,9 +151,6 @@ ScalarParam::param_set_increments(double step, double page)
 {
     inc_step = step;
     inc_page = page;
-    if (rsu) {
-        rsu->getS()->setIncrements(inc_step, inc_page);
-    }
 }