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 inc_step = 0.1;\r
56 inc_page = 1;\r
57 digits = 2;\r
58 }\r
59 \r
60 ScalarParam::~ScalarParam()\r
61 {\r
62 if (rsu)\r
63 delete rsu;\r
64 }\r
65 \r
66 bool\r
67 ScalarParam::param_readSVGValue(const gchar * strvalue)\r
68 {\r
69 double newval;\r
70 unsigned int success = sp_svg_number_read_d(strvalue, &newval);\r
71 if (success == 1) {\r
72 param_set_value(newval);\r
73 return true;\r
74 }\r
75 return false;\r
76 }\r
77 \r
78 gchar *\r
79 ScalarParam::param_writeSVGValue() const\r
80 {\r
81 Inkscape::SVGOStringStream os;\r
82 os << value;\r
83 gchar * str = g_strdup(os.str().c_str());\r
84 return str;\r
85 }\r
86 \r
87 void\r
88 ScalarParam::param_set_default() \r
89 {\r
90 param_set_value(defvalue);\r
91 }\r
92 \r
93 void\r
94 ScalarParam::param_set_value(gdouble val) \r
95 {\r
96 value = val;\r
97 if (integer)\r
98 value = round(value);\r
99 if (value > max)\r
100 value = max;\r
101 if (value < min)\r
102 value = min;\r
103 \r
104 if (rsu && !rsu->is_updating())\r
105 rsu->setValue(value);\r
106 }\r
107 \r
108 void\r
109 ScalarParam::param_set_range(gdouble min, gdouble max) \r
110 {\r
111 this->min = min;\r
112 this->max = max;\r
113 if (rsu)\r
114 rsu->getS()->setRange(min, max);\r
115 \r
116 param_set_value(value); // reset value to see whether it is in ranges\r
117 }\r
118 \r
119 void\r
120 ScalarParam::param_make_integer(bool yes)\r
121 {\r
122 integer = yes;\r
123 digits = 0;\r
124 inc_step = 1;\r
125 inc_page = 10;\r
126 if (rsu) {\r
127 rsu->getS()->setDigits(digits);\r
128 rsu->getS()->setIncrements(inc_step, inc_page);\r
129 }\r
130 }\r
131 \r
132 Gtk::Widget *\r
133 ScalarParam::param_getWidget()\r
134 {\r
135 if (!rsu) {\r
136 rsu = new Inkscape::UI::Widget::RegisteredScalar();\r
137 rsu->init(param_label, param_tooltip, param_key, *param_wr, param_effect->getRepr(), param_effect->getSPDoc());\r
138 rsu->setValue(value);\r
139 rsu->getS()->setDigits(digits);\r
140 rsu->getS()->setIncrements(inc_step, inc_page);\r
141 \r
142 rsu->set_undo_parameters(SP_VERB_DIALOG_LIVE_PATH_EFFECT, _("Change scalar parameter"));\r
143 }\r
144 return dynamic_cast<Gtk::Widget *> (rsu->getS());\r
145 }\r
146 \r
147 void\r
148 ScalarParam::param_set_digits(unsigned digits)\r
149 {\r
150 this->digits = digits;\r
151 if (rsu) {\r
152 rsu->getS()->setDigits(digits);\r
153 }\r
154 }\r
155 \r
156 void\r
157 ScalarParam::param_set_increments(double step, double page)\r
158 {\r
159 inc_step = step;\r
160 inc_page = page;\r
161 if (rsu) {\r
162 rsu->getS()->setIncrements(inc_step, inc_page);\r
163 }\r
164 }\r
165 \r
166 \r
167 \r
168 \r
169 } /* namespace LivePathEffect */\r
170 } /* namespace Inkscape */\r
171 \r
172 /*\r
173 Local Variables:\r
174 mode:c++\r
175 c-file-style:"stroustrup"\r
176 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))\r
177 indent-tabs-mode:nil\r
178 fill-column:99\r
179 End:\r
180 */\r
181 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :\r