enum.h revision f07bfd5a05d43a6d11f7cd442f085149092dea88
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm#ifndef INKSCAPE_LIVEPATHEFFECT_PARAMETER_ENUM_H
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm#define INKSCAPE_LIVEPATHEFFECT_PARAMETER_ENUM_H
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm/*
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm * Inkscape::LivePathEffectParameters
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm *
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm* Copyright (C) Johan Engelen 2007 <j.b.c.engelen@utwente.nl>
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm *
ddc251b3cf95b0097b6a5ee39ea132bd4d7d5cbcjohanengelen * Released under GNU GPL, read the file 'COPYING' for more information
ddc251b3cf95b0097b6a5ee39ea132bd4d7d5cbcjohanengelen */
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm#include <glib/gtypes.h>
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm#include "ui/widget/registry.h"
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm#include "ui/widget/registered-enums.h"
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm#include <gtkmm/tooltips.h>
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm#include "live_effects/parameter/parameter.h"
6656f193fdace606d1b162d6dea0223bc295f0a6cilix#include "verbs.h"
6656f193fdace606d1b162d6dea0223bc295f0a6cilix
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrmnamespace Inkscape {
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrmnamespace LivePathEffect {
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrmtemplate<typename E> class EnumParam : public Parameter {
d9c673867f424647c1586c356cc0ac1d34d0a98ajohanengelenpublic:
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm EnumParam( const Glib::ustring& label,
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm const Glib::ustring& tip,
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm const Glib::ustring& key,
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm const Util::EnumDataConverter<E>& c,
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm Inkscape::UI::Widget::Registry* wr,
ddc251b3cf95b0097b6a5ee39ea132bd4d7d5cbcjohanengelen Effect* effect,
ddc251b3cf95b0097b6a5ee39ea132bd4d7d5cbcjohanengelen E default_value)
ddc251b3cf95b0097b6a5ee39ea132bd4d7d5cbcjohanengelen : Parameter(label, tip, key, wr, effect)
ddc251b3cf95b0097b6a5ee39ea132bd4d7d5cbcjohanengelen {
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm regenum = NULL;
8c39cbeab9949a0a7d6ae66b768a7352019e42f8johanengelen enumdataconv = &c;
072916d0ef7dccd696b59381f50bcf776abccefbjohanengelen defvalue = default_value;
dc98accfae7a38326b92d74fa4330ac8ccb5b778jfbarraud value = defvalue;
dc98accfae7a38326b92d74fa4330ac8ccb5b778jfbarraud };
dc98accfae7a38326b92d74fa4330ac8ccb5b778jfbarraud ~EnumParam() {
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm if (regenum)
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm delete regenum;
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm };
8d9f5d586a04809427ce1df284a5720112177991cilix
70eb1fc448cb08acf3468f80fa2296c03b32afd2cilix Gtk::Widget * param_getWidget() {
c169f6cddd2da06cfb761339f445bbd8866f72a8buliabyak if (!regenum) {
0563fd55cbad59e8a878e6d4cbbdd8e47f74488djohanengelen regenum = new Inkscape::UI::Widget::RegisteredEnum<E>();
0cc5b8d2f7b87c4222ee3662071bef1cb1f22b06bgk regenum->init(param_label, param_tooltip, param_key, *enumdataconv, *param_wr, param_effect->getRepr(), param_effect->getSPDoc());
0563fd55cbad59e8a878e6d4cbbdd8e47f74488djohanengelen regenum->combobox()->set_active_by_id(value);
f4db63be4e929f4706410914295deccaceea19cdcilix regenum->set_undo_parameters(SP_VERB_DIALOG_LIVE_PATH_EFFECT, _("Change enum parameter"));
ab99111a42436818e6902e044c8f3af2b724263bcilix }
e54ce05030e6aab675331e18f46f029f55ed1bf0cilix return dynamic_cast<Gtk::Widget *> (regenum->labelled);
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm };
56542e2b97ec8826cc692153b0e2d4f5ac8ef913johanengelen
56542e2b97ec8826cc692153b0e2d4f5ac8ef913johanengelen bool param_readSVGValue(const gchar * strvalue) {
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm if (!strvalue) {
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm param_set_default();
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm return true;
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm }
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm param_set_value( enumdataconv->get_id_from_key(Glib::ustring(strvalue)) );
072916d0ef7dccd696b59381f50bcf776abccefbjohanengelen
8c39cbeab9949a0a7d6ae66b768a7352019e42f8johanengelen return true;
dc98accfae7a38326b92d74fa4330ac8ccb5b778jfbarraud };
dc98accfae7a38326b92d74fa4330ac8ccb5b778jfbarraud gchar * param_writeSVGValue() const {
dc98accfae7a38326b92d74fa4330ac8ccb5b778jfbarraud gchar * str = g_strdup( enumdataconv->get_key(value).c_str() );
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm return str;
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm };
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm E get_value() const {
0563fd55cbad59e8a878e6d4cbbdd8e47f74488djohanengelen return value;
8d9f5d586a04809427ce1df284a5720112177991cilix }
70eb1fc448cb08acf3468f80fa2296c03b32afd2cilix
c169f6cddd2da06cfb761339f445bbd8866f72a8buliabyak void param_set_default() {
0563fd55cbad59e8a878e6d4cbbdd8e47f74488djohanengelen param_set_value(defvalue);
0cc5b8d2f7b87c4222ee3662071bef1cb1f22b06bgk }
0563fd55cbad59e8a878e6d4cbbdd8e47f74488djohanengelen
f4db63be4e929f4706410914295deccaceea19cdcilix void param_set_value(E val) {
0563fd55cbad59e8a878e6d4cbbdd8e47f74488djohanengelen value = val;
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm if (regenum)
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm regenum->combobox()->set_active_by_id(value);
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm }
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrmprivate:
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm EnumParam(const EnumParam&);
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm EnumParam& operator=(const EnumParam&);
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm
8c39cbeab9949a0a7d6ae66b768a7352019e42f8johanengelen UI::Widget::RegisteredEnum<E> * regenum;
92fe3142613d000eff89db8a983b3b18b14eee79johanengelen E value;
f07bfd5a05d43a6d11f7cd442f085149092dea88pjrm E defvalue;
072916d0ef7dccd696b59381f50bcf776abccefbjohanengelen
92fe3142613d000eff89db8a983b3b18b14eee79johanengelen const Util::EnumDataConverter<E> * enumdataconv;
42e99769805c14a5cc01c805faa3c3b03f9dd1c0johanengelen};
dc98accfae7a38326b92d74fa4330ac8ccb5b778jfbarraud
92fe3142613d000eff89db8a983b3b18b14eee79johanengelen
dc98accfae7a38326b92d74fa4330ac8ccb5b778jfbarraud}; //namespace LivePathEffect
dc98accfae7a38326b92d74fa4330ac8ccb5b778jfbarraud
92fe3142613d000eff89db8a983b3b18b14eee79johanengelen}; //namespace Inkscape
dc98accfae7a38326b92d74fa4330ac8ccb5b778jfbarraud
dc98accfae7a38326b92d74fa4330ac8ccb5b778jfbarraud#endif
92fe3142613d000eff89db8a983b3b18b14eee79johanengelen