Code

add verticalpattern checkbox to path-along-path and some parameters that are not...
[inkscape.git] / src / live_effects / parameter / enum.h
1 #ifndef INKSCAPE_LIVEPATHEFFECT_PARAMETER_ENUM_H\r
2 #define INKSCAPE_LIVEPATHEFFECT_PARAMETER_ENUM_H\r
3 \r
4 /*\r
5  * Inkscape::LivePathEffectParameters\r
6  *\r
7 * Copyright (C) Johan Engelen 2007 <j.b.c.engelen@utwente.nl>\r
8  *\r
9  * Released under GNU GPL, read the file 'COPYING' for more information\r
10  */\r
11 \r
12 #include <glib/gtypes.h>\r
13 \r
14 #include "ui/widget/registry.h"\r
15 #include "ui/widget/registered-enums.h"\r
16 #include <gtkmm/tooltips.h>\r
17 \r
18 #include "live_effects/parameter/parameter.h"\r
19 #include "verbs.h"\r
20 \r
21 namespace Inkscape {\r
22 \r
23 namespace LivePathEffect {\r
24 \r
25 template<typename E> class EnumParam : public Parameter {\r
26 public:\r
27     EnumParam(  const Glib::ustring& label,\r
28                 const Glib::ustring& tip,\r
29                 const Glib::ustring& key,\r
30                 const Util::EnumDataConverter<E>& c,\r
31                 Inkscape::UI::Widget::Registry* wr,\r
32                 Effect* effect,\r
33                 E default_value)\r
34         : Parameter(label, tip, key, wr, effect)\r
35     {\r
36         regenum = NULL;\r
37         enumdataconv = &c;\r
38         defvalue = default_value;\r
39         value = defvalue;\r
40     };\r
41     ~EnumParam() {\r
42         if (regenum)\r
43             delete regenum;\r
44     };\r
45 \r
46     Gtk::Widget * param_getWidget() {\r
47         if (!regenum) {\r
48             regenum = new Inkscape::UI::Widget::RegisteredEnum<E>();\r
49             regenum->init(param_label, param_tooltip, param_key, *enumdataconv, *param_wr, param_effect->getRepr(), param_effect->getSPDoc());\r
50             regenum->combobox()->set_active_by_id(value);\r
51             regenum->set_undo_parameters(SP_VERB_DIALOG_LIVE_PATH_EFFECT, _("Change enum parameter"));\r
52         }\r
53         return dynamic_cast<Gtk::Widget *> (regenum->labelled);\r
54     };\r
55 \r
56     bool param_readSVGValue(const gchar * strvalue) {\r
57         if (!strvalue) {\r
58             param_set_default();\r
59             return true;\r
60         }\r
61 \r
62         param_set_value( enumdataconv->get_id_from_key(Glib::ustring(strvalue)) );\r
63 \r
64         return true;\r
65     };\r
66     gchar * param_writeSVGValue() const {\r
67         gchar * str = g_strdup( enumdataconv->get_key(value).c_str() );\r
68         return str;\r
69     };\r
70 \r
71     E get_value() const {\r
72         return value;\r
73     }\r
74 \r
75     void param_set_default() {\r
76         param_set_value(defvalue);\r
77     }\r
78 \r
79     void param_set_value(E val) {\r
80         value = val;\r
81         if (regenum)\r
82             regenum->combobox()->set_active_by_id(value);\r
83     }\r
84 \r
85 private:\r
86     EnumParam(const EnumParam&);\r
87     EnumParam& operator=(const EnumParam&);\r
88 \r
89     UI::Widget::RegisteredEnum<E> * regenum;\r
90     E value;\r
91     E defvalue;\r
92 \r
93     const Util::EnumDataConverter<E> * enumdataconv;\r
94 };\r
95 \r
96 \r
97 }; //namespace LivePathEffect\r
98 \r
99 }; //namespace Inkscape\r
100 \r
101 #endif\r