From 4ad7f2486b812babdc497155bd228759ac2beccc Mon Sep 17 00:00:00 2001 From: johanengelen Date: Sun, 19 Aug 2007 20:34:48 +0000 Subject: [PATCH] Add default value stuff for LPE parameters --- src/live_effects/effect.cpp | 19 +++++++++++++------ src/live_effects/parameter/enum.h | 24 ++++++++++++++++++------ src/live_effects/parameter/parameter.cpp | 24 +++++++++++++++++++----- src/live_effects/parameter/parameter.h | 8 +++++++- src/live_effects/parameter/path.cpp | 11 ++++++++++- src/live_effects/parameter/path.h | 6 +++++- src/live_effects/parameter/point.cpp | 10 ++++++++-- src/live_effects/parameter/point.h | 5 ++++- 8 files changed, 84 insertions(+), 23 deletions(-) diff --git a/src/live_effects/effect.cpp b/src/live_effects/effect.cpp index 901b80fcc..1e86ab479 100644 --- a/src/live_effects/effect.cpp +++ b/src/live_effects/effect.cpp @@ -129,7 +129,7 @@ std::vector Effect::doEffect (std::vector & path_in) { Geom::Piecewise > pwd2_in; - // FIXME: find standard function to convert std::vector ==> Piecewise< D2 > + for (unsigned int i=0; i < path_in.size(); i++) { pwd2_in.concat( path_in[i].toPwSb() ); } @@ -169,11 +169,18 @@ Effect::setParameter(Inkscape::XML::Node * repr, const gchar * key, const gchar param_map_type::iterator it = param_map.find(stringkey); if (it != param_map.end()) { - bool accepted = it->second->param_readSVGValue(new_value); - /* think: can this backfire and create infinite loop when started with unacceptable old_value? - if (!accepted) { // change was not accepted, so change it back. - repr->setAttribute(key, old_value); - } */ + if (new_value) { + bool accepted = it->second->param_readSVGValue(new_value); + if (!accepted) { + g_warning("Effect::setParameter - '%s' not accepted for %s", new_value, key); + // change was not accepted, so change it back. + // think: can this backfire and create infinite loop when started with unacceptable old_value? + // repr->setAttribute(key, old_value); + } + } else { + // set default value + it->second->param_set_default(); + } } } diff --git a/src/live_effects/parameter/enum.h b/src/live_effects/parameter/enum.h index bfc9fd352..9b8c0f91e 100644 --- a/src/live_effects/parameter/enum.h +++ b/src/live_effects/parameter/enum.h @@ -30,11 +30,12 @@ public: const Util::EnumDataConverter& c, Inkscape::UI::Widget::Registry* wr, Effect* effect, - E defvalue) + E default_value) : Parameter(label, tip, key, wr, effect) { regenum = NULL; enumdataconv = &c; + defvalue = default_value; value = defvalue; }; ~EnumParam() { @@ -53,12 +54,12 @@ public: }; bool param_readSVGValue(const gchar * strvalue) { - if (!strvalue) return false; + if (!strvalue) { + param_set_default(); + return true; + } - value = enumdataconv->get_id_from_key(Glib::ustring(strvalue)); - - if (regenum) - regenum->combobox()->set_active_by_id(value); + param_set_value( enumdataconv->get_id_from_key(Glib::ustring(strvalue)) ); return true; }; @@ -71,12 +72,23 @@ public: return value; } + void param_set_default() { + param_set_value(defvalue); + } + + void param_set_value(E val) { + value = val; + if (regenum) + regenum->combobox()->set_active_by_id(value); + } + private: EnumParam(const EnumParam&); EnumParam& operator=(const EnumParam&); UI::Widget::RegisteredEnum * regenum; E value; + E defvalue; const Util::EnumDataConverter * enumdataconv; }; diff --git a/src/live_effects/parameter/parameter.cpp b/src/live_effects/parameter/parameter.cpp index beaafcc22..91df62e81 100644 --- a/src/live_effects/parameter/parameter.cpp +++ b/src/live_effects/parameter/parameter.cpp @@ -42,10 +42,11 @@ Parameter::Parameter( const Glib::ustring& label, const Glib::ustring& tip, */ RealParam::RealParam( const Glib::ustring& label, const Glib::ustring& tip, const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr, - Effect* effect, gdouble initial_value) + Effect* effect, gdouble default_value) : Parameter(label, tip, key, wr, effect) { - value = initial_value; + defvalue = default_value; + value = defvalue; rsu = NULL; } @@ -61,9 +62,7 @@ RealParam::param_readSVGValue(const gchar * strvalue) double newval; unsigned int success = sp_svg_number_read_d(strvalue, &newval); if (success == 1) { - value = newval; - if (rsu) - rsu->setValue(value); + param_set_value(newval); return true; } return false; @@ -78,6 +77,21 @@ RealParam::param_writeSVGValue() const return str; } +void +RealParam::param_set_default() +{ + param_set_value(defvalue); +} + +void +RealParam::param_set_value(gdouble val) +{ + value = val; + if (rsu) + rsu->setValue(value); +} + + Gtk::Widget * RealParam::param_getWidget() { diff --git a/src/live_effects/parameter/parameter.h b/src/live_effects/parameter/parameter.h index 93cdc94ee..942def5b8 100644 --- a/src/live_effects/parameter/parameter.h +++ b/src/live_effects/parameter/parameter.h @@ -38,6 +38,8 @@ public: virtual bool param_readSVGValue(const gchar * strvalue) = 0; // returns true if new value is valid / accepted. virtual gchar * param_writeSVGValue() const = 0; + 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; @@ -65,12 +67,15 @@ public: const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr, Effect* effect, - gdouble initial_value = 1.0); + gdouble default_value = 1.0); ~RealParam(); bool param_readSVGValue(const gchar * strvalue); gchar * param_writeSVGValue() const; + void param_set_default(); + void param_set_value(gdouble val); + Gtk::Widget * param_getWidget(); inline operator gdouble() @@ -81,6 +86,7 @@ private: RealParam& operator=(const RealParam&); gdouble value; + gdouble defvalue; Inkscape::UI::Widget::RegisteredScalar * rsu; }; diff --git a/src/live_effects/parameter/path.cpp b/src/live_effects/parameter/path.cpp index d2615901f..f24fa933a 100644 --- a/src/live_effects/parameter/path.cpp +++ b/src/live_effects/parameter/path.cpp @@ -33,11 +33,12 @@ namespace LivePathEffect { PathParam::PathParam( const Glib::ustring& label, const Glib::ustring& tip, const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr, - Effect* effect, const gchar * defvalue) + Effect* effect, const gchar * default_value) : Parameter(label, tip, key, wr, effect) { _widget = NULL; _tooltips = NULL; + defvalue = g_strdup(default_value); param_readSVGValue(defvalue); } @@ -46,6 +47,14 @@ PathParam::~PathParam() if (_tooltips) delete _tooltips; // _widget is managed by GTK so do not delete! + + g_free(defvalue); +} + +void +PathParam::param_set_default() +{ + param_readSVGValue(defvalue); } bool diff --git a/src/live_effects/parameter/path.h b/src/live_effects/parameter/path.h index 18ffe5321..0b0d5f633 100644 --- a/src/live_effects/parameter/path.h +++ b/src/live_effects/parameter/path.h @@ -30,7 +30,7 @@ public: const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr, Effect* effect, - const gchar * defvalue = "M0,0 L1,1"); + const gchar * default_value = "M0,0 L1,1"); ~PathParam(); Gtk::Widget * param_getWidget(); @@ -38,6 +38,8 @@ public: bool param_readSVGValue(const gchar * strvalue); gchar * param_writeSVGValue() const; + void param_set_default(); + sigc::signal signal_path_pasted; private: @@ -51,6 +53,8 @@ private: void on_edit_button_click(); void on_paste_button_click(); + + gchar * defvalue; }; diff --git a/src/live_effects/parameter/point.cpp b/src/live_effects/parameter/point.cpp index 39208ad62..3c42dcbfe 100644 --- a/src/live_effects/parameter/point.cpp +++ b/src/live_effects/parameter/point.cpp @@ -29,8 +29,8 @@ namespace LivePathEffect { PointParam::PointParam( const Glib::ustring& label, const Glib::ustring& tip, const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr, - Effect* effect, Geom::Point defvalue ) - : Geom::Point(defvalue), Parameter(label, tip, key, wr, effect) + Effect* effect, Geom::Point default_value ) + : Geom::Point(default_value), Parameter(label, tip, key, wr, effect), defvalue(default_value) { _widget = NULL; pointwdg = NULL; @@ -49,6 +49,12 @@ PointParam::~PointParam() g_object_unref (G_OBJECT (knot)); } +void +PointParam::param_set_default() +{ + param_setValue(defvalue); +} + bool PointParam::param_readSVGValue(const gchar * strvalue) { diff --git a/src/live_effects/parameter/point.h b/src/live_effects/parameter/point.h index 368ab63ed..c1d6681a2 100644 --- a/src/live_effects/parameter/point.h +++ b/src/live_effects/parameter/point.h @@ -32,7 +32,7 @@ public: const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr, Effect* effect, - Geom::Point defvalue = Geom::Point(0,0)); + Geom::Point default_value = Geom::Point(0,0)); ~PointParam(); Gtk::Widget * param_getWidget(); @@ -41,6 +41,7 @@ public: gchar * param_writeSVGValue() const; void param_setValue(Geom::Point newpoint); + void param_set_default(); private: PointParam(const PointParam&); @@ -52,6 +53,8 @@ private: void on_button_click(); SPKnot *knot; + + Geom::Point defvalue; }; -- 2.30.2