0e9295a20bebb26d15455c302278ce90c6dabb45
1 #define INKSCAPE_LIVEPATHEFFECT_PARAMETER_CPP\r
2 \r
3 /*\r
4 * Copyright (C) Johan Engelen 2007 <j.b.c.engelen@utwente.nl>\r
5 *\r
6 * Released under GNU GPL, read the file 'COPYING' for more information\r
7 */\r
8 \r
9 #include "live_effects/parameter/parameter.h"\r
10 #include "live_effects/effect.h"\r
11 #include "svg/svg.h"\r
12 #include "libnr/nr-values.h"\r
13 \r
14 #include <gtkmm.h>\r
15 #include "ui/widget/scalar.h"\r
16 \r
17 #include "svg/stringstream.h"\r
18 \r
19 #include "verbs.h"\r
20 \r
21 #define noLPEREALPARAM_DEBUG\r
22 \r
23 namespace Inkscape {\r
24 \r
25 namespace LivePathEffect {\r
26 \r
27 \r
28 Parameter::Parameter( const Glib::ustring& label, const Glib::ustring& tip,\r
29 const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr,\r
30 Effect* effect )\r
31 {\r
32 param_label = label;\r
33 param_tooltip = tip;\r
34 param_key = key;\r
35 param_wr = wr;\r
36 param_effect = effect;\r
37 }\r
38 \r
39 \r
40 \r
41 /*###########################################\r
42 * REAL PARAM\r
43 */\r
44 ScalarParam::ScalarParam( const Glib::ustring& label, const Glib::ustring& tip,\r
45 const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr,\r
46 Effect* effect, gdouble default_value)\r
47 : Parameter(label, tip, key, wr, effect)\r
48 {\r
49 defvalue = default_value;\r
50 value = defvalue;\r
51 min = -NR_HUGE;\r
52 max = NR_HUGE;\r
53 integer = false;\r
54 rsu = NULL;\r
55 }\r
56 \r
57 ScalarParam::~ScalarParam()\r
58 {\r
59 if (rsu)\r
60 delete rsu;\r
61 }\r
62 \r
63 bool\r
64 ScalarParam::param_readSVGValue(const gchar * strvalue)\r
65 {\r
66 double newval;\r
67 unsigned int success = sp_svg_number_read_d(strvalue, &newval);\r
68 if (success == 1) {\r
69 param_set_value(newval);\r
70 return true;\r
71 }\r
72 return false;\r
73 }\r
74 \r
75 gchar *\r
76 ScalarParam::param_writeSVGValue() const\r
77 {\r
78 Inkscape::SVGOStringStream os;\r
79 os << value;\r
80 gchar * str = g_strdup(os.str().c_str());\r
81 return str;\r
82 }\r
83 \r
84 void\r
85 ScalarParam::param_set_default() \r
86 {\r
87 param_set_value(defvalue);\r
88 }\r
89 \r
90 void\r
91 ScalarParam::param_set_value(gdouble val) \r
92 {\r
93 value = val;\r
94 if (integer)\r
95 value = round(value);\r
96 if (value > max)\r
97 value = max;\r
98 if (value < min)\r
99 value = min;\r
100 \r
101 if (rsu && !rsu->is_updating())\r
102 rsu->setValue(value);\r
103 }\r
104 \r
105 void\r
106 ScalarParam::param_set_range(gdouble min, gdouble max) \r
107 {\r
108 this->min = min;\r
109 this->max = max;\r
110 if (rsu)\r
111 rsu->getS()->setRange(min, max);\r
112 \r
113 param_set_value(value); // reset value to see whether it is in ranges\r
114 }\r
115 \r
116 void\r
117 ScalarParam::param_make_integer(bool yes)\r
118 {\r
119 integer = yes;\r
120 if (rsu) {\r
121 rsu->getS()->setDigits(0);\r
122 rsu->getS()->setIncrements(1, 10);\r
123 }\r
124 }\r
125 \r
126 Gtk::Widget *\r
127 ScalarParam::param_getWidget()\r
128 {\r
129 if (!rsu) {\r
130 rsu = new Inkscape::UI::Widget::RegisteredScalar();\r
131 rsu->init(param_label, param_tooltip, param_key, *param_wr, param_effect->getRepr(), param_effect->getSPDoc());\r
132 rsu->setValue(value);\r
133 if (integer)\r
134 param_make_integer();\r
135 \r
136 rsu->set_undo_parameters(SP_VERB_DIALOG_LIVE_PATH_EFFECT, _("Change scalar parameter"));\r
137 }\r
138 return dynamic_cast<Gtk::Widget *> (rsu->getS());\r
139 }\r
140 \r
141 \r
142 } /* namespace LivePathEffect */\r
143 } /* namespace Inkscape */\r
144 \r
145 /*\r
146 Local Variables:\r
147 mode:c++\r
148 c-file-style:"stroustrup"\r
149 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))\r
150 indent-tabs-mode:nil\r
151 fill-column:99\r
152 End:\r
153 */\r
154 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :\r