Code

LPE:
[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 }\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)\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);\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