kpresenter

KPrImageEffectDia.cpp
1/* This file is part of the KDE project
2 Copyright (C) 2002 Lukas Tinkl <lukas@kde.org>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation; either
7 version 2 of the License, or (at your option) any later version.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18*/
19
20#include <tqcombobox.h>
21#include <tqlabel.h>
22#include <tqspinbox.h>
23#include <tqwidgetstack.h>
24#include <tqcheckbox.h>
25#include <tqimage.h>
26
27#include <kimageeffect.h>
28#include <tdelocale.h>
29#include <knuminput.h>
30#include <kcolorbutton.h>
31
32#include "KPrImageEffectDia.h"
33
34KPrImageEffectDia::KPrImageEffectDia(TQWidget * parent, const char * name):
35 KDialogBase(parent, name, true, i18n("Image Effect"), Ok|Cancel, Ok)
36{
37 m_pix = TQPixmap();
38
39 m_effect = IE_NONE;
40 m_param1 = TQVariant();
41 m_param2 = TQVariant();
42 m_param3 = TQVariant();
43
44 base = new EffectBrowserBase(this, "effect_base");
45
46 setMainWidget(base);
47
48 setupSignals();
49
50 connect((TQWidget *)base->m_effectCombo, TQ_SIGNAL(activated(int)),
51 this, TQ_SLOT(effectChanged(int)));
52
53 connect(this, TQ_SIGNAL(okClicked()),
54 this, TQ_SLOT(okClicked()));
55}
56
57KPrImageEffectDia::~KPrImageEffectDia()
58{
59 delete base;
60}
61
62void KPrImageEffectDia::effectChanged(int eff)
63{
64 TQImage _tmpImage = m_origpix.convertToImage();
65
66 //clear the (unused) params
67 m_param1 = TQVariant();
68 m_param2 = TQVariant();
69 m_param3 = TQVariant();
70
71 m_effect = static_cast<ImageEffect>(eff);
72
73 switch (m_effect) {
74 case IE_CHANNEL_INTENSITY: {
75 m_param1 = TQVariant(base->chanInt_value->value());
76 m_param2 = TQVariant(base->chanInt_component->currentItem());
77 _tmpImage = KImageEffect::channelIntensity(_tmpImage, m_param1.toDouble()/100.0,
78 static_cast<KImageEffect::RGBComponent>(m_param2.toInt()));
79 break;
80 }
81 case IE_FADE: {
82 m_param1 = TQVariant(base->fade_value->value());
83 m_param2 = TQVariant(base->fade_color->color());
84 _tmpImage = KImageEffect::fade(_tmpImage, m_param1.toDouble(), m_param2.toColor());
85 break;
86 }
87 case IE_FLATTEN: {
88 m_param1 = TQVariant(base->flatten_color1->color());
89 m_param2 = TQVariant(base->flatten_color2->color());
90 _tmpImage = KImageEffect::flatten(_tmpImage, m_param1.toColor(), m_param2.toColor());
91 break;
92 }
93 case IE_INTENSITY: {
94 m_param1 = TQVariant(base->intensity_value->value());
95 _tmpImage = KImageEffect::intensity(_tmpImage, m_param1.toDouble()/100.0);
96 break;
97 }
98 case IE_DESATURATE: {
99 m_param1 = TQVariant(base->desaturate_value->value());
100 _tmpImage = KImageEffect::desaturate(_tmpImage, m_param1.toDouble());
101 break;
102 }
103 case IE_CONTRAST: {
104 m_param1 = TQVariant(base->contrast_value->value());
105 _tmpImage = KImageEffect::contrast(_tmpImage, m_param1.toInt());
106 break;
107 }
108 case IE_NORMALIZE: {
109 KImageEffect::normalize(_tmpImage);
110 break;
111 }
112 case IE_EQUALIZE: {
113 KImageEffect::equalize(_tmpImage);
114 break;
115 }
116 case IE_THRESHOLD: {
117 m_param1 = TQVariant(base->threshold_value->value());
118 KImageEffect::threshold(_tmpImage, m_param1.toInt());
119 break;
120 }
121 case IE_SOLARIZE: {
122 m_param1 = TQVariant(base->solarize_value->value());
123 KImageEffect::solarize(_tmpImage, m_param1.toDouble());
124 break;
125 }
126 case IE_EMBOSS: {
127 _tmpImage = KImageEffect::emboss(_tmpImage);
128 break;
129 }
130 case IE_DESPECKLE: {
131 _tmpImage = KImageEffect::despeckle(_tmpImage);
132 break;
133 }
134 case IE_CHARCOAL: {
135 m_param1 = TQVariant(base->charcoal_value->value());
136 _tmpImage = KImageEffect::charcoal(_tmpImage, m_param1.toDouble());
137 break;
138 }
139 case IE_NOISE: {
140 m_param1 = TQVariant(base->noise_type->currentItem());
141 _tmpImage = KImageEffect::addNoise(_tmpImage, static_cast<KImageEffect::NoiseType>(m_param1.toInt()));
142 break;
143 }
144 case IE_BLUR: {
145 m_param1 = TQVariant(base->blur_value->value());
146 _tmpImage = KImageEffect::blur(_tmpImage, m_param1.toDouble());
147 break;
148 }
149 case IE_EDGE: {
150 m_param1 = TQVariant(base->edge_value->value());
151 _tmpImage = KImageEffect::edge(_tmpImage, m_param1.toDouble());
152 break;
153 }
154 case IE_IMPLODE: {
155 m_param1 = TQVariant(base->implode_value->value());
156 _tmpImage = KImageEffect::implode(_tmpImage, m_param1.toDouble());
157 break;
158 }
159 case IE_OIL_PAINT: {
160 m_param1 = TQVariant(base->oilPaint_radius->value());
161 _tmpImage = KImageEffect::oilPaint(_tmpImage, m_param1.toInt());
162 break;
163 }
164 case IE_SHARPEN: {
165 m_param1 = TQVariant(base->sharpen_value->value());
166 _tmpImage = KImageEffect::sharpen(_tmpImage, m_param1.toDouble());
167 break;
168 }
169 case IE_SPREAD: {
170 m_param1 = TQVariant(base->spread_value->value());
171 _tmpImage = KImageEffect::spread(_tmpImage, m_param1.toInt());
172 break;
173 }
174 case IE_SHADE: {
175 m_param1 = TQVariant(base->shade_color->isChecked());
176 m_param2 = TQVariant(base->shade_azimuth->value());
177 m_param3 = TQVariant(base->shade_elevation->value());
178 _tmpImage = KImageEffect::shade(_tmpImage, m_param1.toBool(), m_param2.toDouble(), m_param3.toDouble());
179 break;
180 }
181 case IE_SWIRL: {
182 m_param1 = TQVariant(base->swirl_value->value());
183 _tmpImage = KImageEffect::swirl(_tmpImage, m_param1.toDouble());
184 break;
185 }
186 case IE_WAVE: {
187 m_param1 = TQVariant(base->wave_amplitude->value());
188 m_param2 = TQVariant(base->wave_length->value());
189 _tmpImage = KImageEffect::wave(_tmpImage, m_param1.toDouble(), m_param2.toDouble());
190 break;
191 }
192 case IE_NONE:
193 default:
194 break;
195 }
196
197 m_pix.convertFromImage(_tmpImage);
198
199 updatePreview();
200}
201
202void KPrImageEffectDia::okClicked()
203{
204 accept();
205}
206
207
208void KPrImageEffectDia::setPixmap(TQPixmap pix)
209{
210 m_pix = pix;
211 m_origpix = pix;
212 m_pix.detach();
213 m_origpix.detach();
214}
215
216void KPrImageEffectDia::updatePreview()
217{
218 base->m_previewLabel->setPixmap(m_pix);
219 base->m_previewLabel->repaint(false);
220}
221
222void KPrImageEffectDia::setEffect(ImageEffect eff, TQVariant p1, TQVariant p2, TQVariant p3)
223{
224 m_effect = eff;
225 m_param1 = p1;
226 m_param2 = p2;
227 m_param3 = p3;
228
229 switch (m_effect) {
230 case IE_CHANNEL_INTENSITY: {
231 base->chanInt_value->setValue(m_param1.toInt());
232 base->chanInt_component->setCurrentItem(m_param2.toInt());
233 break;
234 }
235 case IE_FADE: {
236 base->fade_value->setValue(m_param1.toDouble());
237 base->fade_color->setColor(m_param2.toColor());
238 break;
239 }
240 case IE_FLATTEN: {
241 base->flatten_color1->setColor(m_param1.toColor());
242 base->flatten_color2->setColor(m_param2.toColor());
243 break;
244 }
245 case IE_INTENSITY: {
246 base->intensity_value->setValue(m_param1.toInt());
247 break;
248 }
249 case IE_DESATURATE: {
250 base->desaturate_value->setValue(m_param1.toDouble());
251 break;
252 }
253 case IE_CONTRAST: {
254 base->contrast_value->setValue(m_param1.toInt());
255 break;
256 }
257 case IE_THRESHOLD: {
258 base->threshold_value->setValue(m_param1.toInt());
259 break;
260 }
261 case IE_SOLARIZE: {
262 base->solarize_value->setValue(m_param1.toDouble());
263 break;
264 }
265 case IE_CHARCOAL: {
266 base->charcoal_value->setValue(m_param1.toDouble());
267 break;
268 }
269 case IE_NOISE: {
270 base->noise_type->setCurrentItem(m_param1.toInt());
271 break;
272 }
273 case IE_BLUR: {
274 base->blur_value->setValue(m_param1.toDouble());
275 break;
276 }
277 case IE_EDGE: {
278 base->edge_value->setValue(m_param1.toDouble());
279 break;
280 }
281 case IE_IMPLODE: {
282 base->implode_value->setValue(m_param1.toDouble());
283 break;
284 }
285 case IE_OIL_PAINT: {
286 base->oilPaint_radius->setValue(m_param1.toInt());
287 break;
288 }
289 case IE_SHARPEN: {
290 base->sharpen_value->setValue(m_param1.toDouble());
291 break;
292 }
293 case IE_SPREAD: {
294 base->spread_value->setValue(m_param1.toInt());
295 break;
296 }
297 case IE_SHADE: {
298 base->shade_color->setChecked(m_param1.toBool());
299 base->shade_azimuth->setValue(m_param2.toDouble());
300 base->shade_elevation->setValue(m_param3.toDouble());
301 break;
302 }
303 case IE_SWIRL: {
304 base->swirl_value->setValue(m_param1.toDouble());
305 break;
306 }
307 case IE_WAVE: {
308 base->wave_amplitude->setValue(m_param1.toDouble());
309 base->wave_length->setValue(m_param2.toDouble());
310 break;
311 }
312
313 //no params
314 case IE_NORMALIZE:
315 case IE_EQUALIZE:
316 case IE_EMBOSS:
317 case IE_DESPECKLE:
318
319 case IE_NONE:
320 default:
321 break;
322 }
323
324 base->m_effectCombo->setCurrentItem(static_cast<int>(m_effect));
325 base->m_widgetStack->raiseWidget(static_cast<int>(m_effect)); //bug in TQt? the above doesn't emit this :(
326}
327
328void KPrImageEffectDia::showEvent(TQShowEvent * e)
329{
330 KDialogBase::showEvent(e);
331 effectChanged((int)m_effect);
332}
333
334void KPrImageEffectDia::setupSignals()
335{
336 connect((TQWidget *)base->chanInt_value, TQ_SIGNAL(valueChanged(int)),
337 this, TQ_SLOT(effectParamChanged()));
338 connect((TQWidget *)base->chanInt_component, TQ_SIGNAL(activated(int)),
339 this, TQ_SLOT(effectParamChanged()));
340
341 connect((TQWidget *)base->fade_value, TQ_SIGNAL(valueChanged(double)),
342 this, TQ_SLOT(effectParamChanged()));
343 connect((TQWidget *)base->fade_color, TQ_SIGNAL(changed(const TQColor&)),
344 this, TQ_SLOT(effectParamChanged()));
345
346 connect((TQWidget *)base->flatten_color1, TQ_SIGNAL(changed(const TQColor&)),
347 this, TQ_SLOT(effectParamChanged()));
348 connect((TQWidget *)base->flatten_color2, TQ_SIGNAL(changed(const TQColor&)),
349 this, TQ_SLOT(effectParamChanged()));
350
351 connect((TQWidget *)base->intensity_value, TQ_SIGNAL(valueChanged(int)),
352 this, TQ_SLOT(effectParamChanged()));
353
354 connect((TQWidget *)base->desaturate_value, TQ_SIGNAL(valueChanged(double)),
355 this, TQ_SLOT(effectParamChanged()));
356
357 connect((TQWidget *)base->contrast_value, TQ_SIGNAL(valueChanged(int)),
358 this, TQ_SLOT(effectParamChanged()));
359
360 connect((TQWidget *)base->threshold_value, TQ_SIGNAL(valueChanged(int)),
361 this, TQ_SLOT(effectParamChanged()));
362
363 connect((TQWidget *)base->solarize_value, TQ_SIGNAL(valueChanged(double)),
364 this, TQ_SLOT(effectParamChanged()));
365
366 connect((TQWidget *)base->charcoal_value, TQ_SIGNAL(valueChanged(double)),
367 this, TQ_SLOT(effectParamChanged()));
368
369 connect((TQWidget *)base->noise_type, TQ_SIGNAL(activated(int)),
370 this, TQ_SLOT(effectParamChanged()));
371
372 connect((TQWidget *)base->blur_value, TQ_SIGNAL(valueChanged(double)),
373 this, TQ_SLOT(effectParamChanged()));
374
375 connect((TQWidget *)base->edge_value, TQ_SIGNAL(valueChanged(double)),
376 this, TQ_SLOT(effectParamChanged()));
377
378 connect((TQWidget *)base->implode_value, TQ_SIGNAL(valueChanged(double)),
379 this, TQ_SLOT(effectParamChanged()));
380
381 connect((TQWidget *)base->oilPaint_radius, TQ_SIGNAL(valueChanged(int)),
382 this, TQ_SLOT(effectParamChanged()));
383
384 connect((TQWidget *)base->sharpen_value, TQ_SIGNAL(valueChanged(double)),
385 this, TQ_SLOT(effectParamChanged()));
386
387 connect((TQWidget *)base->spread_value, TQ_SIGNAL(valueChanged(int)),
388 this, TQ_SLOT(effectParamChanged()));
389
390 connect((TQWidget *)base->shade_color, TQ_SIGNAL(toggled(bool)),
391 this, TQ_SLOT(effectParamChanged()));
392 connect((TQWidget *)base->shade_elevation, TQ_SIGNAL(valueChanged(double)),
393 this, TQ_SLOT(effectParamChanged()));
394 connect((TQWidget *)base->shade_azimuth, TQ_SIGNAL(valueChanged(double)),
395 this, TQ_SLOT(effectParamChanged()));
396
397 connect((TQWidget *)base->swirl_value, TQ_SIGNAL(valueChanged(double)),
398 this, TQ_SLOT(effectParamChanged()));
399
400 connect((TQWidget *)base->wave_amplitude, TQ_SIGNAL(valueChanged(double)),
401 this, TQ_SLOT(effectParamChanged()));
402 connect((TQWidget *)base->wave_length, TQ_SIGNAL(valueChanged(double)),
403 this, TQ_SLOT(effectParamChanged()));
404}
405
406void KPrImageEffectDia::effectParamChanged()
407{
408 effectChanged(base->m_effectCombo->currentItem());
409}
410
411#include "KPrImageEffectDia.moc"