f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm/*
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm * Copyright (C) Johan Engelen 2007 <j.b.c.engelen@utwente.nl>
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm *
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm * Released under GNU GPL, read the file 'COPYING' for more information
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm */
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
5c45bb188ab729e501e48732842cb9de6a9813beAlex Valavanis#include "ui/widget/registered-widget.h"
eb4caa8f4cdc2955b58dcd2de06fe770533414c8Jon A. Cruz#include <glibmm/i18n.h>
eb4caa8f4cdc2955b58dcd2de06fe770533414c8Jon A. Cruz
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm#include "live_effects/parameter/parameter.h"
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm#include "live_effects/effect.h"
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm#include "svg/svg.h"
d431763a9ec8059aa4962688de8144319969fb0fjohanengelen#include "xml/repr.h"
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm#include "svg/stringstream.h"
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm#include "verbs.h"
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm#define noLPEREALPARAM_DEBUG
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrmnamespace Inkscape {
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrmnamespace LivePathEffect {
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrmParameter::Parameter( const Glib::ustring& label, const Glib::ustring& tip,
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr,
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm Effect* effect )
b5a129ca7cf5c8e074b39ea5dbc2cc978187078bjohanengelen : param_key(key),
b5a129ca7cf5c8e074b39ea5dbc2cc978187078bjohanengelen param_wr(wr),
b5a129ca7cf5c8e074b39ea5dbc2cc978187078bjohanengelen param_label(label),
b5a129ca7cf5c8e074b39ea5dbc2cc978187078bjohanengelen oncanvas_editable(false),
cc618cb0faf84b6f5ab2cc9802b29d03f6a22f97Jon A. Cruz widget_is_visible(true),
b5a129ca7cf5c8e074b39ea5dbc2cc978187078bjohanengelen param_tooltip(tip),
cc618cb0faf84b6f5ab2cc9802b29d03f6a22f97Jon A. Cruz param_effect(effect)
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm{
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm}
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
0903335a0099bd7ee779925f43a15a2216a0e863johanengelenvoid
0903335a0099bd7ee779925f43a15a2216a0e863johanengelenParameter::param_write_to_repr(const char * svgd)
0903335a0099bd7ee779925f43a15a2216a0e863johanengelen{
0903335a0099bd7ee779925f43a15a2216a0e863johanengelen param_effect->getRepr()->setAttribute(param_key.c_str(), svgd);
0903335a0099bd7ee779925f43a15a2216a0e863johanengelen}
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
cef9e2c431b417aea98429860c6021849f099fcfKris De Gussemvoid Parameter::write_to_SVG(void)
cef9e2c431b417aea98429860c6021849f099fcfKris De Gussem{
cef9e2c431b417aea98429860c6021849f099fcfKris De Gussem gchar * str = param_getSVGValue();
cef9e2c431b417aea98429860c6021849f099fcfKris De Gussem param_write_to_repr(str);
cef9e2c431b417aea98429860c6021849f099fcfKris De Gussem g_free(str);
cef9e2c431b417aea98429860c6021849f099fcfKris De Gussem}
c11199b2b0b6b7fbfe61f562566e0cd15604cc43Liam P. White
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm/*###########################################
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm * REAL PARAM
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm */
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrmScalarParam::ScalarParam( const Glib::ustring& label, const Glib::ustring& tip,
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr,
3ab4e87511c6a42f29370bf22a9afcf759ca1d0dJabiertxof Effect* effect, gdouble default_value, bool no_widget)
b5a129ca7cf5c8e074b39ea5dbc2cc978187078bjohanengelen : Parameter(label, tip, key, wr, effect),
b5a129ca7cf5c8e074b39ea5dbc2cc978187078bjohanengelen value(default_value),
c11199b2b0b6b7fbfe61f562566e0cd15604cc43Liam P. White min(-SCALARPARAM_G_MAXDOUBLE),
c11199b2b0b6b7fbfe61f562566e0cd15604cc43Liam P. White max(SCALARPARAM_G_MAXDOUBLE),
b5a129ca7cf5c8e074b39ea5dbc2cc978187078bjohanengelen integer(false),
b5a129ca7cf5c8e074b39ea5dbc2cc978187078bjohanengelen defvalue(default_value),
b5a129ca7cf5c8e074b39ea5dbc2cc978187078bjohanengelen digits(2),
b5a129ca7cf5c8e074b39ea5dbc2cc978187078bjohanengelen inc_step(0.1),
ea3e4fdbdbf0a48ae887b096d301549da77d5707Johan Engelen inc_page(1),
a7b98b4dadda9f675e57ee1b78a9e1d2a5b3844fjtx add_slider(false),
3ab4e87511c6a42f29370bf22a9afcf759ca1d0dJabiertxof overwrite_widget(false),
3ab4e87511c6a42f29370bf22a9afcf759ca1d0dJabiertxof hide_widget(no_widget)
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm{
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm}
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrmScalarParam::~ScalarParam()
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm{
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm}
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrmbool
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrmScalarParam::param_readSVGValue(const gchar * strvalue)
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm{
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm double newval;
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm unsigned int success = sp_svg_number_read_d(strvalue, &newval);
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm if (success == 1) {
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm param_set_value(newval);
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm return true;
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm }
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm return false;
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm}
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrmgchar *
79291918d036d77d586b6eba265d8d2ac0a7fee5cilixScalarParam::param_getSVGValue() const
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm{
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm Inkscape::SVGOStringStream os;
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm os << value;
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm gchar * str = g_strdup(os.str().c_str());
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm return str;
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm}
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrmvoid
eaa9bdc7bf7b73397e536edd47490d84e4420bd8bryceScalarParam::param_set_default()
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm{
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm param_set_value(defvalue);
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm}
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrmvoid
eaa9bdc7bf7b73397e536edd47490d84e4420bd8bryceScalarParam::param_set_value(gdouble val)
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm{
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm value = val;
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm if (integer)
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm value = round(value);
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm if (value > max)
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm value = max;
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm if (value < min)
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm value = min;
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm}
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrmvoid
eaa9bdc7bf7b73397e536edd47490d84e4420bd8bryceScalarParam::param_set_range(gdouble min, gdouble max)
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm{
f83dd38ed9c631b7644b7c82c821fa9fbbb82352Liam P. White // if you look at client code, you'll see that many effects
f83dd38ed9c631b7644b7c82c821fa9fbbb82352Liam P. White // has a tendency to set an upper range of Geom::infinity().
f83dd38ed9c631b7644b7c82c821fa9fbbb82352Liam P. White // Once again, in gtk2, this is not a problem. But in gtk3,
f83dd38ed9c631b7644b7c82c821fa9fbbb82352Liam P. White // widgets get allocated the amount of size they ask for,
f83dd38ed9c631b7644b7c82c821fa9fbbb82352Liam P. White // leading to excessively long widgets.
f83dd38ed9c631b7644b7c82c821fa9fbbb82352Liam P. White
f83dd38ed9c631b7644b7c82c821fa9fbbb82352Liam P. White if (min >= -SCALARPARAM_G_MAXDOUBLE) {
f83dd38ed9c631b7644b7c82c821fa9fbbb82352Liam P. White this->min = min;
f83dd38ed9c631b7644b7c82c821fa9fbbb82352Liam P. White } else {
f83dd38ed9c631b7644b7c82c821fa9fbbb82352Liam P. White this->min = -SCALARPARAM_G_MAXDOUBLE;
f83dd38ed9c631b7644b7c82c821fa9fbbb82352Liam P. White }
f83dd38ed9c631b7644b7c82c821fa9fbbb82352Liam P. White if (max <= SCALARPARAM_G_MAXDOUBLE) {
f83dd38ed9c631b7644b7c82c821fa9fbbb82352Liam P. White this->max = max;
f83dd38ed9c631b7644b7c82c821fa9fbbb82352Liam P. White } else {
f83dd38ed9c631b7644b7c82c821fa9fbbb82352Liam P. White this->max = SCALARPARAM_G_MAXDOUBLE;
f83dd38ed9c631b7644b7c82c821fa9fbbb82352Liam P. White }
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm param_set_value(value); // reset value to see whether it is in ranges
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm}
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrmvoid
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrmScalarParam::param_make_integer(bool yes)
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm{
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm integer = yes;
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm digits = 0;
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm inc_step = 1;
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm inc_page = 10;
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm}
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
106bf69f0520ef3b349214008cc1f91c68e69daaJabiertxofvoid
a7b98b4dadda9f675e57ee1b78a9e1d2a5b3844fjtxScalarParam::param_overwrite_widget(bool overwrite_widget)
106bf69f0520ef3b349214008cc1f91c68e69daaJabiertxof{
a7b98b4dadda9f675e57ee1b78a9e1d2a5b3844fjtx this->overwrite_widget = overwrite_widget;
106bf69f0520ef3b349214008cc1f91c68e69daaJabiertxof}
106bf69f0520ef3b349214008cc1f91c68e69daaJabiertxof
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrmGtk::Widget *
5cf332777b4c27336d64c273ac63bce3ee27a53dAlex ValavanisScalarParam::param_newWidget()
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm{
3ab4e87511c6a42f29370bf22a9afcf759ca1d0dJabiertxof if(!hide_widget){
3ab4e87511c6a42f29370bf22a9afcf759ca1d0dJabiertxof Inkscape::UI::Widget::RegisteredScalar *rsu = Gtk::manage( new Inkscape::UI::Widget::RegisteredScalar(
3ab4e87511c6a42f29370bf22a9afcf759ca1d0dJabiertxof param_label, param_tooltip, param_key, *param_wr, param_effect->getRepr(), param_effect->getSPDoc() ) );
3ab4e87511c6a42f29370bf22a9afcf759ca1d0dJabiertxof
3ab4e87511c6a42f29370bf22a9afcf759ca1d0dJabiertxof rsu->setValue(value);
3ab4e87511c6a42f29370bf22a9afcf759ca1d0dJabiertxof rsu->setDigits(digits);
3ab4e87511c6a42f29370bf22a9afcf759ca1d0dJabiertxof rsu->setIncrements(inc_step, inc_page);
3ab4e87511c6a42f29370bf22a9afcf759ca1d0dJabiertxof rsu->setRange(min, max);
3ab4e87511c6a42f29370bf22a9afcf759ca1d0dJabiertxof rsu->setProgrammatically = false;
3ab4e87511c6a42f29370bf22a9afcf759ca1d0dJabiertxof if (add_slider) {
3ab4e87511c6a42f29370bf22a9afcf759ca1d0dJabiertxof rsu->addSlider();
3ab4e87511c6a42f29370bf22a9afcf759ca1d0dJabiertxof }
3ab4e87511c6a42f29370bf22a9afcf759ca1d0dJabiertxof if(!overwrite_widget){
3ab4e87511c6a42f29370bf22a9afcf759ca1d0dJabiertxof rsu->set_undo_parameters(SP_VERB_DIALOG_LIVE_PATH_EFFECT, _("Change scalar parameter"));
3ab4e87511c6a42f29370bf22a9afcf759ca1d0dJabiertxof }
3ab4e87511c6a42f29370bf22a9afcf759ca1d0dJabiertxof return dynamic_cast<Gtk::Widget *> (rsu);
3ab4e87511c6a42f29370bf22a9afcf759ca1d0dJabiertxof } else {
3ab4e87511c6a42f29370bf22a9afcf759ca1d0dJabiertxof return NULL;
a7b98b4dadda9f675e57ee1b78a9e1d2a5b3844fjtx }
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm}
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrmvoid
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrmScalarParam::param_set_digits(unsigned digits)
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm{
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm this->digits = digits;
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm}
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrmvoid
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrmScalarParam::param_set_increments(double step, double page)
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm{
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm inc_step = step;
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm inc_page = page;
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm}
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm} /* namespace LivePathEffect */
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm} /* namespace Inkscape */
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm/*
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm Local Variables:
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm mode:c++
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm c-file-style:"stroustrup"
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm indent-tabs-mode:nil
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm fill-column:99
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm End:
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm*/
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :