parameter.cpp revision cc618cb0faf84b6f5ab2cc9802b29d03f6a22f97
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh#define INKSCAPE_LIVEPATHEFFECT_PARAMETER_CPP
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh/*
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh * Copyright (C) Johan Engelen 2007 <j.b.c.engelen@utwente.nl>
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh *
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh * Released under GNU GPL, read the file 'COPYING' for more information
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh */
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh#include "live_effects/parameter/parameter.h"
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh#include "live_effects/effect.h"
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh#include "svg/svg.h"
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh#include "libnr/nr-values.h"
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh#include "xml/repr.h"
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh#include <gtkmm.h>
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh#include "ui/widget/registered-widget.h"
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh#include "svg/stringstream.h"
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh#include "verbs.h"
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh#define noLPEREALPARAM_DEBUG
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh
3711b3e25395437ee0a09dbbb2a76d999c4ef322mikloshnamespace Inkscape {
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh
7a7fa095a483e8b652af9f00e5169f62c84f09b9mikloshnamespace LivePathEffect {
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh
7a7fa095a483e8b652af9f00e5169f62c84f09b9mikloshParameter::Parameter( const Glib::ustring& label, const Glib::ustring& tip,
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr,
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh Effect* effect )
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh : param_key(key),
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh param_wr(wr),
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh param_label(label),
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh oncanvas_editable(false),
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh widget_is_visible(true),
b5b35fce2e3df933e5223ef6645d814eacf51cfamiklosh param_tooltip(tip),
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh param_effect(effect)
fba63a357654d8b3e84c60007e40aa698cd45d19miklosh{
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh}
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh
7a7fa095a483e8b652af9f00e5169f62c84f09b9mikloshvoid
3711b3e25395437ee0a09dbbb2a76d999c4ef322mikloshParameter::param_write_to_repr(const char * svgd)
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh{
dc4f69a188c203f2fdc65f22d0d57904a8c52dd7miklosh param_effect->getRepr()->setAttribute(param_key.c_str(), svgd);
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh}
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh/*###########################################
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh * REAL PARAM
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh */
7a7fa095a483e8b652af9f00e5169f62c84f09b9mikloshScalarParam::ScalarParam( const Glib::ustring& label, const Glib::ustring& tip,
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr,
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh Effect* effect, gdouble default_value)
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh : Parameter(label, tip, key, wr, effect),
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh value(default_value),
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh min(-NR_HUGE),
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh max(NR_HUGE),
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh integer(false),
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh defvalue(default_value),
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh digits(2),
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh inc_step(0.1),
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh inc_page(1)
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh{
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh}
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emikloshScalarParam::~ScalarParam()
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh{
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh}
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emikloshbool
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emikloshScalarParam::param_readSVGValue(const gchar * strvalue)
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh{
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh double newval;
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh unsigned int success = sp_svg_number_read_d(strvalue, &newval);
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh if (success == 1) {
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh param_set_value(newval);
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh return true;
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh }
68664e00e2372534b4df2fdc5f54f836bafece18miklosh return false;
1cda9431ef400135f5e1bd899a94b921bdad0eafmiklosh}
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh
68664e00e2372534b4df2fdc5f54f836bafece18mikloshgchar *
dc4f69a188c203f2fdc65f22d0d57904a8c52dd7mikloshScalarParam::param_getSVGValue() const
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh{
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh Inkscape::SVGOStringStream os;
a4d12a5147f3d1d6b568a326e39ef5dca384248dmiklosh os << value;
1667116521643e2475184b048e0abb77a2aa9735miklosh gchar * str = g_strdup(os.str().c_str());
cb814cb0df20053ca3ef16ce55da474435daf045miklosh return str;
cb814cb0df20053ca3ef16ce55da474435daf045miklosh}
cb814cb0df20053ca3ef16ce55da474435daf045miklosh
cb814cb0df20053ca3ef16ce55da474435daf045mikloshvoid
7a7fa095a483e8b652af9f00e5169f62c84f09b9mikloshScalarParam::param_set_default()
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh{
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh param_set_value(defvalue);
1cda9431ef400135f5e1bd899a94b921bdad0eafmiklosh}
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh
68664e00e2372534b4df2fdc5f54f836bafece18mikloshvoid
dc4f69a188c203f2fdc65f22d0d57904a8c52dd7mikloshScalarParam::param_set_value(gdouble val)
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh{
cb814cb0df20053ca3ef16ce55da474435daf045miklosh value = val;
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh if (integer)
1667116521643e2475184b048e0abb77a2aa9735miklosh value = round(value);
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh if (value > max)
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh value = max;
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh if (value < min)
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh value = min;
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh}
1667116521643e2475184b048e0abb77a2aa9735miklosh
1667116521643e2475184b048e0abb77a2aa9735mikloshvoid
1667116521643e2475184b048e0abb77a2aa9735mikloshScalarParam::param_set_range(gdouble min, gdouble max)
1667116521643e2475184b048e0abb77a2aa9735miklosh{
1667116521643e2475184b048e0abb77a2aa9735miklosh this->min = min;
1667116521643e2475184b048e0abb77a2aa9735miklosh this->max = max;
1667116521643e2475184b048e0abb77a2aa9735miklosh
1667116521643e2475184b048e0abb77a2aa9735miklosh param_set_value(value); // reset value to see whether it is in ranges
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh}
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emikloshvoid
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emikloshScalarParam::param_make_integer(bool yes)
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh{
1667116521643e2475184b048e0abb77a2aa9735miklosh integer = yes;
1667116521643e2475184b048e0abb77a2aa9735miklosh digits = 0;
1667116521643e2475184b048e0abb77a2aa9735miklosh inc_step = 1;
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh inc_page = 10;
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh}
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh
3711b3e25395437ee0a09dbbb2a76d999c4ef322mikloshGtk::Widget *
3711b3e25395437ee0a09dbbb2a76d999c4ef322mikloshScalarParam::param_newWidget(Gtk::Tooltips * /*tooltips*/)
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh{
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh Inkscape::UI::Widget::RegisteredScalar *rsu = Gtk::manage( new Inkscape::UI::Widget::RegisteredScalar(
68664e00e2372534b4df2fdc5f54f836bafece18miklosh param_label, param_tooltip, param_key, *param_wr, param_effect->getRepr(), param_effect->getSPDoc() ) );
68664e00e2372534b4df2fdc5f54f836bafece18miklosh
68664e00e2372534b4df2fdc5f54f836bafece18miklosh rsu->setValue(value);
68664e00e2372534b4df2fdc5f54f836bafece18miklosh rsu->setDigits(digits);
68664e00e2372534b4df2fdc5f54f836bafece18miklosh rsu->setIncrements(inc_step, inc_page);
68664e00e2372534b4df2fdc5f54f836bafece18miklosh rsu->setRange(min, max);
68664e00e2372534b4df2fdc5f54f836bafece18miklosh rsu->setProgrammatically = false;
68664e00e2372534b4df2fdc5f54f836bafece18miklosh
68664e00e2372534b4df2fdc5f54f836bafece18miklosh rsu->set_undo_parameters(SP_VERB_DIALOG_LIVE_PATH_EFFECT, _("Change scalar parameter"));
68664e00e2372534b4df2fdc5f54f836bafece18miklosh
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh return dynamic_cast<Gtk::Widget *> (rsu);
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh}
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emikloshvoid
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emikloshScalarParam::param_set_digits(unsigned digits)
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh{
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh this->digits = digits;
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh}
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emikloshvoid
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emikloshScalarParam::param_set_increments(double step, double page)
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh{
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh inc_step = step;
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh inc_page = page;
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh}
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh
c53f16f52840e8c0f2be9c1cc3af633c0ba1552emiklosh} /* namespace LivePathEffect */
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh} /* namespace Inkscape */
7a7fa095a483e8b652af9f00e5169f62c84f09b9miklosh
1667116521643e2475184b048e0abb77a2aa9735miklosh/*
1667116521643e2475184b048e0abb77a2aa9735miklosh Local Variables:
1667116521643e2475184b048e0abb77a2aa9735miklosh mode:c++
3711b3e25395437ee0a09dbbb2a76d999c4ef322miklosh c-file-style:"stroustrup"
1667116521643e2475184b048e0abb77a2aa9735miklosh c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
1667116521643e2475184b048e0abb77a2aa9735miklosh indent-tabs-mode:nil
1667116521643e2475184b048e0abb77a2aa9735miklosh fill-column:99
1667116521643e2475184b048e0abb77a2aa9735miklosh End:
1667116521643e2475184b048e0abb77a2aa9735miklosh*/
1667116521643e2475184b048e0abb77a2aa9735miklosh// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
1667116521643e2475184b048e0abb77a2aa9735miklosh