00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <qcombobox.h>
00022 #include <qlabel.h>
00023 #include <qspinbox.h>
00024 #include <qwidgetstack.h>
00025 #include <qcheckbox.h>
00026 #include <qimage.h>
00027
00028 #include <kimageeffect.h>
00029 #include <klocale.h>
00030 #include <knuminput.h>
00031 #include <kcolorbutton.h>
00032
00033 #include "KPrImageEffectDia.h"
00034
00035 KPrImageEffectDia::KPrImageEffectDia(QWidget * parent, const char * name):
00036 KDialogBase(parent, name, true, i18n("Image Effect"), Ok|Cancel, Ok)
00037 {
00038 m_pix = QPixmap();
00039
00040 m_effect = IE_NONE;
00041 m_param1 = QVariant();
00042 m_param2 = QVariant();
00043 m_param3 = QVariant();
00044
00045 base = new EffectBrowserBase(this, "effect_base");
00046
00047 setMainWidget(base);
00048
00049 setupSignals();
00050
00051 connect((QWidget *)base->m_effectCombo, SIGNAL(activated(int)),
00052 this, SLOT(effectChanged(int)));
00053
00054 connect(this, SIGNAL(okClicked()),
00055 this, SLOT(okClicked()));
00056 }
00057
00058 KPrImageEffectDia::~KPrImageEffectDia()
00059 {
00060 delete base;
00061 }
00062
00063 void KPrImageEffectDia::effectChanged(int eff)
00064 {
00065 QImage _tmpImage = m_origpix.convertToImage();
00066
00067
00068 m_param1 = QVariant();
00069 m_param2 = QVariant();
00070 m_param3 = QVariant();
00071
00072 m_effect = static_cast<ImageEffect>(eff);
00073
00074 switch (m_effect) {
00075 case IE_CHANNEL_INTENSITY: {
00076 m_param1 = QVariant(base->chanInt_value->value());
00077 m_param2 = QVariant(base->chanInt_component->currentItem());
00078 _tmpImage = KImageEffect::channelIntensity(_tmpImage, m_param1.toDouble()/100.0,
00079 static_cast<KImageEffect::RGBComponent>(m_param2.toInt()));
00080 break;
00081 }
00082 case IE_FADE: {
00083 m_param1 = QVariant(base->fade_value->value());
00084 m_param2 = QVariant(base->fade_color->color());
00085 _tmpImage = KImageEffect::fade(_tmpImage, m_param1.toDouble(), m_param2.toColor());
00086 break;
00087 }
00088 case IE_FLATTEN: {
00089 m_param1 = QVariant(base->flatten_color1->color());
00090 m_param2 = QVariant(base->flatten_color2->color());
00091 _tmpImage = KImageEffect::flatten(_tmpImage, m_param1.toColor(), m_param2.toColor());
00092 break;
00093 }
00094 case IE_INTENSITY: {
00095 m_param1 = QVariant(base->intensity_value->value());
00096 _tmpImage = KImageEffect::intensity(_tmpImage, m_param1.toDouble()/100.0);
00097 break;
00098 }
00099 case IE_DESATURATE: {
00100 m_param1 = QVariant(base->desaturate_value->value());
00101 _tmpImage = KImageEffect::desaturate(_tmpImage, m_param1.toDouble());
00102 break;
00103 }
00104 case IE_CONTRAST: {
00105 m_param1 = QVariant(base->contrast_value->value());
00106 _tmpImage = KImageEffect::contrast(_tmpImage, m_param1.toInt());
00107 break;
00108 }
00109 case IE_NORMALIZE: {
00110 KImageEffect::normalize(_tmpImage);
00111 break;
00112 }
00113 case IE_EQUALIZE: {
00114 KImageEffect::equalize(_tmpImage);
00115 break;
00116 }
00117 case IE_THRESHOLD: {
00118 m_param1 = QVariant(base->threshold_value->value());
00119 KImageEffect::threshold(_tmpImage, m_param1.toInt());
00120 break;
00121 }
00122 case IE_SOLARIZE: {
00123 m_param1 = QVariant(base->solarize_value->value());
00124 KImageEffect::solarize(_tmpImage, m_param1.toDouble());
00125 break;
00126 }
00127 case IE_EMBOSS: {
00128 _tmpImage = KImageEffect::emboss(_tmpImage);
00129 break;
00130 }
00131 case IE_DESPECKLE: {
00132 _tmpImage = KImageEffect::despeckle(_tmpImage);
00133 break;
00134 }
00135 case IE_CHARCOAL: {
00136 m_param1 = QVariant(base->charcoal_value->value());
00137 _tmpImage = KImageEffect::charcoal(_tmpImage, m_param1.toDouble());
00138 break;
00139 }
00140 case IE_NOISE: {
00141 m_param1 = QVariant(base->noise_type->currentItem());
00142 _tmpImage = KImageEffect::addNoise(_tmpImage, static_cast<KImageEffect::NoiseType>(m_param1.toInt()));
00143 break;
00144 }
00145 case IE_BLUR: {
00146 m_param1 = QVariant(base->blur_value->value());
00147 _tmpImage = KImageEffect::blur(_tmpImage, m_param1.toDouble());
00148 break;
00149 }
00150 case IE_EDGE: {
00151 m_param1 = QVariant(base->edge_value->value());
00152 _tmpImage = KImageEffect::edge(_tmpImage, m_param1.toDouble());
00153 break;
00154 }
00155 case IE_IMPLODE: {
00156 m_param1 = QVariant(base->implode_value->value());
00157 _tmpImage = KImageEffect::implode(_tmpImage, m_param1.toDouble());
00158 break;
00159 }
00160 case IE_OIL_PAINT: {
00161 m_param1 = QVariant(base->oilPaint_radius->value());
00162 _tmpImage = KImageEffect::oilPaint(_tmpImage, m_param1.toInt());
00163 break;
00164 }
00165 case IE_SHARPEN: {
00166 m_param1 = QVariant(base->sharpen_value->value());
00167 _tmpImage = KImageEffect::sharpen(_tmpImage, m_param1.toDouble());
00168 break;
00169 }
00170 case IE_SPREAD: {
00171 m_param1 = QVariant(base->spread_value->value());
00172 _tmpImage = KImageEffect::spread(_tmpImage, m_param1.toInt());
00173 break;
00174 }
00175 case IE_SHADE: {
00176 m_param1 = QVariant(base->shade_color->isChecked());
00177 m_param2 = QVariant(base->shade_azimuth->value());
00178 m_param3 = QVariant(base->shade_elevation->value());
00179 _tmpImage = KImageEffect::shade(_tmpImage, m_param1.toBool(), m_param2.toDouble(), m_param3.toDouble());
00180 break;
00181 }
00182 case IE_SWIRL: {
00183 m_param1 = QVariant(base->swirl_value->value());
00184 _tmpImage = KImageEffect::swirl(_tmpImage, m_param1.toDouble());
00185 break;
00186 }
00187 case IE_WAVE: {
00188 m_param1 = QVariant(base->wave_amplitude->value());
00189 m_param2 = QVariant(base->wave_length->value());
00190 _tmpImage = KImageEffect::wave(_tmpImage, m_param1.toDouble(), m_param2.toDouble());
00191 break;
00192 }
00193 case IE_NONE:
00194 default:
00195 break;
00196 }
00197
00198 m_pix.convertFromImage(_tmpImage);
00199
00200 updatePreview();
00201 }
00202
00203 void KPrImageEffectDia::okClicked()
00204 {
00205 accept();
00206 }
00207
00208
00209 void KPrImageEffectDia::setPixmap(QPixmap pix)
00210 {
00211 m_pix = pix;
00212 m_origpix = pix;
00213 m_pix.detach();
00214 m_origpix.detach();
00215 }
00216
00217 void KPrImageEffectDia::updatePreview()
00218 {
00219 base->m_previewLabel->setPixmap(m_pix);
00220 base->m_previewLabel->repaint(false);
00221 }
00222
00223 void KPrImageEffectDia::setEffect(ImageEffect eff, QVariant p1, QVariant p2, QVariant p3)
00224 {
00225 m_effect = eff;
00226 m_param1 = p1;
00227 m_param2 = p2;
00228 m_param3 = p3;
00229
00230 switch (m_effect) {
00231 case IE_CHANNEL_INTENSITY: {
00232 base->chanInt_value->setValue(m_param1.toInt());
00233 base->chanInt_component->setCurrentItem(m_param2.toInt());
00234 break;
00235 }
00236 case IE_FADE: {
00237 base->fade_value->setValue(m_param1.toDouble());
00238 base->fade_color->setColor(m_param2.toColor());
00239 break;
00240 }
00241 case IE_FLATTEN: {
00242 base->flatten_color1->setColor(m_param1.toColor());
00243 base->flatten_color2->setColor(m_param2.toColor());
00244 break;
00245 }
00246 case IE_INTENSITY: {
00247 base->intensity_value->setValue(m_param1.toInt());
00248 break;
00249 }
00250 case IE_DESATURATE: {
00251 base->desaturate_value->setValue(m_param1.toDouble());
00252 break;
00253 }
00254 case IE_CONTRAST: {
00255 base->contrast_value->setValue(m_param1.toInt());
00256 break;
00257 }
00258 case IE_THRESHOLD: {
00259 base->threshold_value->setValue(m_param1.toInt());
00260 break;
00261 }
00262 case IE_SOLARIZE: {
00263 base->solarize_value->setValue(m_param1.toDouble());
00264 break;
00265 }
00266 case IE_CHARCOAL: {
00267 base->charcoal_value->setValue(m_param1.toDouble());
00268 break;
00269 }
00270 case IE_NOISE: {
00271 base->noise_type->setCurrentItem(m_param1.toInt());
00272 break;
00273 }
00274 case IE_BLUR: {
00275 base->blur_value->setValue(m_param1.toDouble());
00276 break;
00277 }
00278 case IE_EDGE: {
00279 base->edge_value->setValue(m_param1.toDouble());
00280 break;
00281 }
00282 case IE_IMPLODE: {
00283 base->implode_value->setValue(m_param1.toDouble());
00284 break;
00285 }
00286 case IE_OIL_PAINT: {
00287 base->oilPaint_radius->setValue(m_param1.toInt());
00288 break;
00289 }
00290 case IE_SHARPEN: {
00291 base->sharpen_value->setValue(m_param1.toDouble());
00292 break;
00293 }
00294 case IE_SPREAD: {
00295 base->spread_value->setValue(m_param1.toInt());
00296 break;
00297 }
00298 case IE_SHADE: {
00299 base->shade_color->setChecked(m_param1.toBool());
00300 base->shade_azimuth->setValue(m_param2.toDouble());
00301 base->shade_elevation->setValue(m_param3.toDouble());
00302 break;
00303 }
00304 case IE_SWIRL: {
00305 base->swirl_value->setValue(m_param1.toDouble());
00306 break;
00307 }
00308 case IE_WAVE: {
00309 base->wave_amplitude->setValue(m_param1.toDouble());
00310 base->wave_length->setValue(m_param2.toDouble());
00311 break;
00312 }
00313
00314
00315 case IE_NORMALIZE:
00316 case IE_EQUALIZE:
00317 case IE_EMBOSS:
00318 case IE_DESPECKLE:
00319
00320 case IE_NONE:
00321 default:
00322 break;
00323 }
00324
00325 base->m_effectCombo->setCurrentItem(static_cast<int>(m_effect));
00326 base->m_widgetStack->raiseWidget(static_cast<int>(m_effect));
00327 }
00328
00329 void KPrImageEffectDia::showEvent(QShowEvent * e)
00330 {
00331 KDialogBase::showEvent(e);
00332 effectChanged((int)m_effect);
00333 }
00334
00335 void KPrImageEffectDia::setupSignals()
00336 {
00337 connect((QWidget *)base->chanInt_value, SIGNAL(valueChanged(int)),
00338 this, SLOT(effectParamChanged()));
00339 connect((QWidget *)base->chanInt_component, SIGNAL(activated(int)),
00340 this, SLOT(effectParamChanged()));
00341
00342 connect((QWidget *)base->fade_value, SIGNAL(valueChanged(double)),
00343 this, SLOT(effectParamChanged()));
00344 connect((QWidget *)base->fade_color, SIGNAL(changed(const QColor&)),
00345 this, SLOT(effectParamChanged()));
00346
00347 connect((QWidget *)base->flatten_color1, SIGNAL(changed(const QColor&)),
00348 this, SLOT(effectParamChanged()));
00349 connect((QWidget *)base->flatten_color2, SIGNAL(changed(const QColor&)),
00350 this, SLOT(effectParamChanged()));
00351
00352 connect((QWidget *)base->intensity_value, SIGNAL(valueChanged(int)),
00353 this, SLOT(effectParamChanged()));
00354
00355 connect((QWidget *)base->desaturate_value, SIGNAL(valueChanged(double)),
00356 this, SLOT(effectParamChanged()));
00357
00358 connect((QWidget *)base->contrast_value, SIGNAL(valueChanged(int)),
00359 this, SLOT(effectParamChanged()));
00360
00361 connect((QWidget *)base->threshold_value, SIGNAL(valueChanged(int)),
00362 this, SLOT(effectParamChanged()));
00363
00364 connect((QWidget *)base->solarize_value, SIGNAL(valueChanged(double)),
00365 this, SLOT(effectParamChanged()));
00366
00367 connect((QWidget *)base->charcoal_value, SIGNAL(valueChanged(double)),
00368 this, SLOT(effectParamChanged()));
00369
00370 connect((QWidget *)base->noise_type, SIGNAL(activated(int)),
00371 this, SLOT(effectParamChanged()));
00372
00373 connect((QWidget *)base->blur_value, SIGNAL(valueChanged(double)),
00374 this, SLOT(effectParamChanged()));
00375
00376 connect((QWidget *)base->edge_value, SIGNAL(valueChanged(double)),
00377 this, SLOT(effectParamChanged()));
00378
00379 connect((QWidget *)base->implode_value, SIGNAL(valueChanged(double)),
00380 this, SLOT(effectParamChanged()));
00381
00382 connect((QWidget *)base->oilPaint_radius, SIGNAL(valueChanged(int)),
00383 this, SLOT(effectParamChanged()));
00384
00385 connect((QWidget *)base->sharpen_value, SIGNAL(valueChanged(double)),
00386 this, SLOT(effectParamChanged()));
00387
00388 connect((QWidget *)base->spread_value, SIGNAL(valueChanged(int)),
00389 this, SLOT(effectParamChanged()));
00390
00391 connect((QWidget *)base->shade_color, SIGNAL(toggled(bool)),
00392 this, SLOT(effectParamChanged()));
00393 connect((QWidget *)base->shade_elevation, SIGNAL(valueChanged(double)),
00394 this, SLOT(effectParamChanged()));
00395 connect((QWidget *)base->shade_azimuth, SIGNAL(valueChanged(double)),
00396 this, SLOT(effectParamChanged()));
00397
00398 connect((QWidget *)base->swirl_value, SIGNAL(valueChanged(double)),
00399 this, SLOT(effectParamChanged()));
00400
00401 connect((QWidget *)base->wave_amplitude, SIGNAL(valueChanged(double)),
00402 this, SLOT(effectParamChanged()));
00403 connect((QWidget *)base->wave_length, SIGNAL(valueChanged(double)),
00404 this, SLOT(effectParamChanged()));
00405 }
00406
00407 void KPrImageEffectDia::effectParamChanged()
00408 {
00409 effectChanged(base->m_effectCombo->currentItem());
00410 }
00411
00412 #include "KPrImageEffectDia.moc"