Code

add verticalpattern checkbox to path-along-path and some parameters that are not...
[inkscape.git] / src / live_effects / parameter / parameter.cpp
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