1 /*
2 For general Scribus (>=1.3.2) copyright and licensing information please refer
3 to the COPYING file provided with the program. Following this notice may exist
4 a copyright and/or license notice that predates the release of Scribus 1.3.2
5 for which a new license (GPL+exception) is in place.
6 */
7 #include "effectsdialog.h"
8
9 #include <QGridLayout>
10 #include <QGroupBox>
11 #include <QHBoxLayout>
12 #include <QImage>
13 #include <QLabel>
14 #include <QListWidget>
15 #include <QListWidgetItem>
16 #include <QMenu>
17 #include <QPixmap>
18 #include <QPushButton>
19 #include <QSlider>
20 #include <QSpacerItem>
21 #include <QSpacerItem>
22 #include <QStackedWidget>
23 #include <QTime>
24 #include <QToolButton>
25 #include <QToolTip>
26 #include <QVBoxLayout>
27 #include <QWidget>
28 #include <QWidgetAction>
29
30 #include "cmsettings.h"
31 #include "colorcombo.h"
32 #include "curvewidget.h"
33 #include "iconmanager.h"
34 #include "scclocale.h"
35 #include "scpage.h"
36 #include "scribusdoc.h"
37 #include "scrspinbox.h"
38 #include "sctextstream.h"
39 #include "shadebutton.h"
40 #include "util.h"
41 #include "util_color.h"
42
43
44
EffectsDialog(QWidget * parent,PageItem * item,ScribusDoc * docc)45 EffectsDialog::EffectsDialog( QWidget* parent, PageItem* item, ScribusDoc* docc ) : QDialog( parent )
46 {
47 setModal(true);
48 setWindowTitle( tr( "Image Effects" ) );
49 setWindowIcon(IconManager::instance().loadIcon("AppIcon.png"));
50 m_item = item;
51 effectsList = m_item->effectsInUse;
52 m_doc = docc;
53 currentOptions = nullptr;
54
55 // CMSettings cms(docc, "", Intent_Perceptual);
56 // cms.allowColorManagement(false);
57 bool mode = false;
58 CMSettings cms(m_doc, m_item->ImageProfile, m_item->ImageIntent);
59 cms.setUseEmbeddedProfile(m_item->UseEmbedded);
60 cms.allowSoftProofing(true);
61 m_image.loadPicture(m_item->Pfile, m_item->pixm.imgInfo.actualPageNumber, cms, ScImage::RGBData, 72, &mode);
62 int iw = m_image.width();
63 int ih = m_image.height();
64 m_imageScale = 1.0;
65 if ((iw > 220) || (ih > 220))
66 {
67 double sx = iw / 220.0;
68 double sy = ih / 220.0;
69 if (sy < sx)
70 m_image.createLowRes(sx);
71 else
72 m_image.createLowRes(sy);
73 m_imageScale = qMin(sx, sy);
74 }
75 EffectsDialogLayout = new QVBoxLayout( this );
76 EffectsDialogLayout->setContentsMargins(9, 9, 9, 9);
77 EffectsDialogLayout->setSpacing(6);
78 layoutGrid = new QGridLayout();
79 layoutGrid->setContentsMargins(0, 0, 0, 0);
80 layoutGrid->setSpacing(6);
81
82 textLabel5 = new QLabel( this );
83 textLabel5->setText( tr( "Preview" ) );
84 pixmapLabel1 = new QLabel( this );
85 pixmapLabel1->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
86 pixmapLabel1->setMinimumSize( QSize( 220, 220 ) );
87 pixmapLabel1->setMaximumSize( QSize( 220, 220 ) );
88 pixmapLabel1->setFrameShape( QLabel::StyledPanel );
89 pixmapLabel1->setFrameShadow( QLabel::Sunken );
90 pixmapLabel1->setScaledContents( false );
91
92 optionStack = new QStackedWidget( this );
93 // optionStack->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)7, 0, 0, optionStack->sizePolicy().hasHeightForWidth() ) );
94 // optionStack->setMinimumSize( QSize( 220, 280 ) );
95 optionStack->setFrameShape( QFrame::NoFrame );
96 WStackPage = new QWidget( optionStack );
97 optionStack->addWidget( WStackPage );
98
99 WStackPage_2 = new QWidget( optionStack );
100 WStackPageLayout = new QVBoxLayout( WStackPage_2 );
101 WStackPageLayout->setContentsMargins(0, 0, 0, 0);
102 WStackPageLayout->setSpacing(6);
103 WStackPageLayout->setAlignment( Qt::AlignTop );
104 layout17 = new QHBoxLayout;
105 layout17->setContentsMargins(0, 0, 0, 0);
106 layout17->setSpacing(6);
107 textLabel3 = new QLabel( tr( "Color:" ), WStackPage_2 );
108 layout17->addWidget( textLabel3 );
109
110 colData = new ColorCombo(false, WStackPage_2);
111 colData->setPixmapType(ColorCombo::fancyPixmaps);
112 colData->setColors(m_doc->PageColors, false);
113 layout17->addWidget( colData );
114 WStackPageLayout->addLayout( layout17 );
115
116 layout19 = new QHBoxLayout;
117 layout19->setContentsMargins(0, 0, 0, 0);
118 layout19->setSpacing(6);
119 textLabel4 = new QLabel( tr( "Shade:" ), WStackPage_2 );
120 layout19->addWidget( textLabel4 );
121 shade = new ShadeButton(WStackPage_2);
122 shade->setValue(100);
123 layout19->addWidget( shade );
124 WStackPageLayout->addLayout( layout19 );
125 optionStack->addWidget( WStackPage_2 );
126
127 WStackPage_3 = new QWidget( optionStack );
128 WStackPage3Layout = new QVBoxLayout( WStackPage_3 );
129 WStackPage3Layout->setContentsMargins(0, 0, 0, 0);
130 WStackPage3Layout->setSpacing(6);
131 WStackPage3Layout->setAlignment( Qt::AlignTop );
132 layout20 = new QHBoxLayout;
133 layout20->setContentsMargins(0, 0, 0, 0);
134 layout20->setSpacing(6);
135 textLabel6 = new QLabel( tr( "Brightness:" ), WStackPage_3 );
136 layout20->addWidget( textLabel6, Qt::AlignLeft );
137 textLabel7 = new QLabel( "0", WStackPage_3 );
138 layout20->addWidget( textLabel7, Qt::AlignRight );
139 WStackPage3Layout->addLayout( layout20 );
140 brightnessSlider = new QSlider( WStackPage_3 );
141 brightnessSlider->setMinimum(-255);
142 brightnessSlider->setMaximum(255);
143 brightnessSlider->setValue(0);
144 brightnessSlider->setOrientation( Qt::Horizontal );
145 brightnessSlider->setTickPosition( QSlider::TicksBelow );
146 WStackPage3Layout->addWidget( brightnessSlider );
147 optionStack->addWidget( WStackPage_3 );
148
149 WStackPage_4 = new QWidget( optionStack );
150 WStackPage4Layout = new QVBoxLayout( WStackPage_4 );
151 WStackPage4Layout->setContentsMargins(0, 0, 0, 0);
152 WStackPage4Layout->setSpacing(6);
153 WStackPage4Layout->setAlignment( Qt::AlignTop );
154 layout21 = new QHBoxLayout;
155 layout21->setContentsMargins(0, 0, 0, 0);
156 layout21->setSpacing(6);
157 textLabel8 = new QLabel( tr( "Contrast:" ), WStackPage_4 );
158 layout21->addWidget( textLabel8, Qt::AlignLeft );
159 textLabel9 = new QLabel( "0", WStackPage_4 );
160 layout21->addWidget( textLabel9, Qt::AlignRight );
161 WStackPage4Layout->addLayout( layout21 );
162 contrastSlider = new QSlider( WStackPage_4 );
163 contrastSlider->setMinimum(-127);
164 contrastSlider->setMaximum(127);
165 contrastSlider->setValue(0);
166 contrastSlider->setOrientation( Qt::Horizontal );
167 contrastSlider->setTickPosition( QSlider::TicksBelow );
168 WStackPage4Layout->addWidget( contrastSlider );
169 optionStack->addWidget( WStackPage_4 );
170
171 WStackPage_5 = new QWidget( optionStack );
172 WStackPage5Layout = new QVBoxLayout( WStackPage_5 );
173 WStackPage5Layout->setContentsMargins(0, 0, 0, 0);
174 WStackPage5Layout->setSpacing(6);
175 WStackPage5Layout->setAlignment( Qt::AlignTop );
176 layout22 = new QHBoxLayout;
177 layout22->setContentsMargins(0, 0, 0, 0);
178 layout22->setSpacing(6);
179 textLabel10 = new QLabel( tr( "Radius:" ), WStackPage_5 );
180 layout22->addWidget( textLabel10 );
181 shRadius = new ScrSpinBox( 0.0, 10.0, WStackPage_5, 1 );
182 shRadius->setDecimals(1);
183 shRadius->setSuffix("");
184 shRadius->setValue(0);
185 layout22->addWidget( shRadius );
186 WStackPage5Layout->addLayout( layout22 );
187 layout23 = new QHBoxLayout;
188 layout23->setContentsMargins(0, 0, 0, 0);
189 layout23->setSpacing(6);
190 textLabel11 = new QLabel( tr("Value:"), WStackPage_5 );
191 layout23->addWidget( textLabel11 );
192 shValue = new ScrSpinBox( 0.0, 5.0, WStackPage_5, 1 );
193 shValue->setDecimals(1);
194 shValue->setSuffix("");
195 shValue->setValue(1.0);
196 layout23->addWidget( shValue );
197 WStackPage5Layout->addLayout( layout23 );
198 optionStack->addWidget( WStackPage_5 );
199
200 WStackPage_6 = new QWidget( optionStack );
201 WStackPage6Layout = new QVBoxLayout( WStackPage_6 );
202 WStackPage6Layout->setContentsMargins(0, 0, 0, 0);
203 WStackPage6Layout->setSpacing(6);
204 WStackPage6Layout->setAlignment( Qt::AlignTop );
205 layout24 = new QHBoxLayout;
206 layout24->setContentsMargins(0, 0, 0, 0);
207 layout24->setSpacing(6);
208 textLabel12 = new QLabel( tr( "Radius:" ), WStackPage_6 );
209 layout24->addWidget( textLabel12 );
210 blRadius = new ScrSpinBox( 0.0, 30.0, WStackPage_6, 1 );
211 blRadius->setDecimals(1);
212 blRadius->setSuffix("");
213 blRadius->setValue(0);
214 layout24->addWidget( blRadius );
215 WStackPage6Layout->addLayout( layout24 );
216 optionStack->addWidget( WStackPage_6 );
217
218 WStackPage_7 = new QWidget( optionStack );
219 WStackPage7Layout = new QVBoxLayout( WStackPage_7 );
220 WStackPage7Layout->setContentsMargins(0, 0, 0, 0);
221 WStackPage7Layout->setSpacing(6);
222 WStackPage7Layout->setAlignment( Qt::AlignTop );
223 layout26 = new QHBoxLayout;
224 layout26->setContentsMargins(0, 0, 0, 0);
225 layout26->setSpacing(6);
226 textLabel14 = new QLabel( tr( "Posterize:" ), WStackPage_7 );
227 layout26->addWidget( textLabel14, Qt::AlignLeft );
228 textLabel15 = new QLabel( "0", WStackPage_7 );
229 layout26->addWidget( textLabel15, Qt::AlignRight );
230 WStackPage7Layout->addLayout( layout26 );
231 solarizeSlider = new QSlider( WStackPage_7 );
232 solarizeSlider->setMinimum(1);
233 solarizeSlider->setMaximum(255);
234 solarizeSlider->setValue(255);
235 solarizeSlider->setOrientation( Qt::Horizontal );
236 solarizeSlider->setTickPosition( QSlider::TicksBelow );
237 WStackPage7Layout->addWidget( solarizeSlider );
238 optionStack->addWidget( WStackPage_7 );
239
240 WStackPage_8 = new QWidget( optionStack );
241 WStackPage8Layout = new QGridLayout( WStackPage_8 );
242 WStackPage8Layout->setContentsMargins(0, 0, 0, 0);
243 WStackPage8Layout->setSpacing(6);
244 WStackPage8Layout->setAlignment( Qt::AlignTop );
245 textLabel1d = new QLabel( tr( "Color 1:" ), WStackPage_8 );
246 WStackPage8Layout->addWidget( textLabel1d, 0, 0 );
247 colData1 = new ColorCombo(false, WStackPage_8);
248 colData1->setPixmapType(ColorCombo::fancyPixmaps);
249 colData1->setColors(m_doc->PageColors, false);
250 WStackPage8Layout->addWidget( colData1, 0, 1, 1, 2);
251 shade1 = new ShadeButton(WStackPage_8);
252 shade1->setValue(100);
253 WStackPage8Layout->addWidget( shade1, 1, 1 );
254 CurveD1 = new CurveWidget( nullptr );
255 CurveD1Pop = new QMenu();
256 CurveD1Act = new QWidgetAction(this);
257 CurveD1Act->setDefaultWidget(CurveD1);
258 CurveD1Pop->addAction(CurveD1Act);
259 CurveD1Button = new QToolButton( WStackPage_8 );
260 CurveD1Button->setText( "" );
261 CurveD1Button->setMaximumSize( QSize( 22, 22 ) );
262 CurveD1Button->setIcon(IconManager::instance().loadIcon("curve.png"));
263 CurveD1Button->setMenu(CurveD1Pop);
264 CurveD1Button->setPopupMode(QToolButton::InstantPopup);
265 WStackPage8Layout->addWidget( CurveD1Button, 1, 2 );
266
267 textLabel2d = new QLabel( tr( "Color 2:" ), WStackPage_8 );
268 WStackPage8Layout->addWidget( textLabel2d, 2, 0 );
269 colData2 = new ColorCombo(false, WStackPage_8);
270 colData2->setPixmapType(ColorCombo::fancyPixmaps);
271 colData2->setColors(m_doc->PageColors, false);
272 WStackPage8Layout->addWidget( colData2, 2, 1, 1, 2);
273 shade2 = new ShadeButton(WStackPage_8);
274 shade2->setValue(100);
275 WStackPage8Layout->addWidget( shade2, 3, 1 );
276 CurveD2 = new CurveWidget( nullptr );
277 CurveD2Pop = new QMenu();
278 CurveD2Act = new QWidgetAction(this);
279 CurveD2Act->setDefaultWidget(CurveD2);
280 CurveD2Pop->addAction(CurveD2Act);
281 CurveD2Button = new QToolButton( WStackPage_8 );
282 CurveD2Button->setText( "" );
283 CurveD2Button->setMaximumSize( QSize( 22, 22 ) );
284 CurveD2Button->setIcon(IconManager::instance().loadIcon("curve.png"));
285 CurveD2Button->setMenu(CurveD2Pop);
286 CurveD2Button->setPopupMode(QToolButton::InstantPopup);
287 WStackPage8Layout->addWidget( CurveD2Button, 3, 2 );
288 auto *spacerD1 = new QSpacerItem( 1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding );
289 WStackPage8Layout->addItem( spacerD1, 4, 0 );
290 optionStack->addWidget( WStackPage_8 );
291
292 WStackPage_9 = new QWidget( optionStack );
293 WStackPage9Layout = new QGridLayout( WStackPage_9 );
294 WStackPage9Layout->setContentsMargins(0, 0, 0, 0);
295 WStackPage9Layout->setSpacing(6);
296 WStackPage9Layout->setAlignment( Qt::AlignTop );
297 textLabel1t = new QLabel( tr( "Color 1:" ), WStackPage_9 );
298 WStackPage9Layout->addWidget( textLabel1t, 0, 0 );
299 colDatat1 = new ColorCombo(false, WStackPage_9);
300 colDatat1->setPixmapType(ColorCombo::fancyPixmaps);
301 colDatat1->setColors(m_doc->PageColors, false);
302 WStackPage9Layout->addWidget( colDatat1, 0, 1, 1, 2 );
303 shadet1 = new ShadeButton(WStackPage_9);
304 shadet1->setValue(100);
305 WStackPage9Layout->addWidget( shadet1, 1, 1 );
306 CurveT1 = new CurveWidget( nullptr );
307 CurveT1Pop = new QMenu();
308 CurveT1Act = new QWidgetAction(this);
309 CurveT1Act->setDefaultWidget(CurveT1);
310 CurveT1Pop->addAction(CurveT1Act);
311 CurveT1Button = new QToolButton( WStackPage_9 );
312 CurveT1Button->setText( "" );
313 CurveT1Button->setMaximumSize( QSize( 22, 22 ) );
314 CurveT1Button->setIcon(IconManager::instance().loadIcon("curve.png"));
315 CurveT1Button->setMenu(CurveT1Pop);
316 CurveT1Button->setPopupMode(QToolButton::InstantPopup);
317 WStackPage9Layout->addWidget( CurveT1Button, 1, 2 );
318 textLabel2t = new QLabel( tr( "Color 2:" ), WStackPage_9 );
319 WStackPage9Layout->addWidget( textLabel2t, 2, 0 );
320 colDatat2 = new ColorCombo(false, WStackPage_9);
321 colDatat2->setPixmapType(ColorCombo::fancyPixmaps);
322 colDatat2->setColors(m_doc->PageColors, false);
323 WStackPage9Layout->addWidget( colDatat2, 2, 1, 1, 2 );
324 shadet2 = new ShadeButton(WStackPage_9);
325 shadet2->setValue(100);
326 WStackPage9Layout->addWidget( shadet2, 3, 1 );
327 CurveT2 = new CurveWidget( nullptr );
328 CurveT2Pop = new QMenu();
329 CurveT2Act = new QWidgetAction(this);
330 CurveT2Act->setDefaultWidget(CurveT2);
331 CurveT2Pop->addAction(CurveT2Act);
332 CurveT2Button = new QToolButton( WStackPage_9 );
333 CurveT2Button->setText( "" );
334 CurveT2Button->setMaximumSize( QSize( 22, 22 ) );
335 CurveT2Button->setIcon(IconManager::instance().loadIcon("curve.png"));
336 CurveT2Button->setMenu(CurveT2Pop);
337 CurveT2Button->setPopupMode(QToolButton::InstantPopup);
338 WStackPage9Layout->addWidget( CurveT2Button, 3, 2 );
339 textLabel3t = new QLabel( tr( "Color 3:" ), WStackPage_9 );
340 WStackPage9Layout->addWidget( textLabel3t, 4, 0 );
341 colDatat3 = new ColorCombo(false, WStackPage_9);
342 colDatat3->setPixmapType(ColorCombo::fancyPixmaps);
343 colDatat3->setColors(m_doc->PageColors, false);
344 WStackPage9Layout->addWidget( colDatat3, 4, 1, 1, 2 );
345 shadet3 = new ShadeButton(WStackPage_9);
346 shadet3->setValue(100);
347 WStackPage9Layout->addWidget( shadet3, 5, 1 );
348 CurveT3 = new CurveWidget( nullptr );
349 CurveT3Act = new QWidgetAction(this);
350 CurveT3Pop = new QMenu();
351 CurveT3Act->setDefaultWidget(CurveT3);
352 CurveT3Pop->addAction(CurveT3Act);
353 CurveT3Button = new QToolButton( WStackPage_9 );
354 CurveT3Button->setText( "" );
355 CurveT3Button->setMaximumSize( QSize( 22, 22 ) );
356 CurveT3Button->setIcon(IconManager::instance().loadIcon("curve.png"));
357 CurveT3Button->setMenu(CurveT3Pop);
358 CurveT3Button->setPopupMode(QToolButton::InstantPopup);
359 WStackPage9Layout->addWidget( CurveT3Button, 5, 2 );
360 optionStack->addWidget( WStackPage_9 );
361
362 WStackPage_10 = new QWidget( optionStack );
363 WStackPage10Layout = new QGridLayout( WStackPage_10 );
364 WStackPage10Layout->setContentsMargins(0, 0, 0, 0);
365 WStackPage10Layout->setSpacing(6);
366 textLabel1q = new QLabel( tr( "Color 1:" ), WStackPage_10 );
367 WStackPage10Layout->addWidget( textLabel1q, 0, 0 );
368 colDataq1 = new ColorCombo(false, WStackPage_10);
369 colDataq1->setPixmapType(ColorCombo::fancyPixmaps);
370 colDataq1->setColors(m_doc->PageColors, false);
371 WStackPage10Layout->addWidget( colDataq1, 0, 1, 1, 2 );
372 shadeq1 = new ShadeButton(WStackPage_10);
373 shadeq1->setValue(100);
374 WStackPage10Layout->addWidget( shadeq1, 1, 1 );
375 CurveQ1 = new CurveWidget( nullptr );
376 CurveQ1Pop = new QMenu();
377 CurveQ1Act = new QWidgetAction(this);
378 CurveQ1Act->setDefaultWidget(CurveQ1);
379 CurveQ1Pop->addAction(CurveQ1Act);
380 CurveQ1Button = new QToolButton( WStackPage_10 );
381 CurveQ1Button->setText( "" );
382 CurveQ1Button->setMaximumSize( QSize( 22, 22 ) );
383 CurveQ1Button->setIcon(IconManager::instance().loadIcon("curve.png"));
384 CurveQ1Button->setMenu(CurveQ1Pop);
385 CurveQ1Button->setPopupMode(QToolButton::InstantPopup);
386 WStackPage10Layout->addWidget( CurveQ1Button, 1, 2 );
387 textLabel2q = new QLabel( tr( "Color 2:" ), WStackPage_10 );
388 WStackPage10Layout->addWidget( textLabel2q, 2, 0 );
389 colDataq2 = new ColorCombo(false, WStackPage_10);
390 colDataq2->setPixmapType(ColorCombo::fancyPixmaps);
391 colDataq2->setColors(m_doc->PageColors, false);
392 WStackPage10Layout->addWidget( colDataq2, 2, 1, 1, 2 );
393 shadeq2 = new ShadeButton(WStackPage_10);
394 shadeq2->setValue(100);
395 WStackPage10Layout->addWidget( shadeq2, 3, 1 );
396 CurveQ2 = new CurveWidget( nullptr );
397 CurveQ2Pop = new QMenu();
398 CurveQ2Act = new QWidgetAction(this);
399 CurveQ2Act->setDefaultWidget(CurveQ2);
400 CurveQ2Pop->addAction(CurveQ2Act);
401 CurveQ2Button = new QToolButton( WStackPage_10 );
402 CurveQ2Button->setText( "" );
403 CurveQ2Button->setMaximumSize( QSize( 22, 22 ) );
404 CurveQ2Button->setIcon(IconManager::instance().loadIcon("curve.png"));
405 CurveQ2Button->setMenu(CurveQ2Pop);
406 CurveQ2Button->setPopupMode(QToolButton::InstantPopup);
407 WStackPage10Layout->addWidget( CurveQ2Button, 3, 2 );
408 textLabel3q = new QLabel( tr( "Color 3:" ), WStackPage_10 );
409 WStackPage10Layout->addWidget( textLabel3q, 4, 0 );
410 colDataqc3 = new ColorCombo(false, WStackPage_10);
411 colDataqc3->setPixmapType(ColorCombo::fancyPixmaps);
412 colDataqc3->setColors(m_doc->PageColors, false);
413 WStackPage10Layout->addWidget( colDataqc3, 4, 1, 1, 2 );
414 shadeqc3 = new ShadeButton(WStackPage_10);
415 shadeqc3->setValue(100);
416 WStackPage10Layout->addWidget( shadeqc3, 5, 1 );
417 CurveQc3 = new CurveWidget( nullptr );
418 CurveQc3Pop = new QMenu();
419 CurveQc3Act = new QWidgetAction(this);
420 CurveQc3Act->setDefaultWidget(CurveQc3);
421 CurveQc3Pop->addAction(CurveQc3Act);
422 CurveQc3Button = new QToolButton( WStackPage_10 );
423 CurveQc3Button->setText( "" );
424 CurveQc3Button->setMaximumSize( QSize( 22, 22 ) );
425 CurveQc3Button->setIcon(IconManager::instance().loadIcon("curve.png"));
426 CurveQc3Button->setMenu(CurveQc3Pop);
427 CurveQc3Button->setPopupMode(QToolButton::InstantPopup);
428 WStackPage10Layout->addWidget( CurveQc3Button, 5, 2 );
429 textLabel4q = new QLabel( tr( "Color 4:" ), WStackPage_10 );
430 WStackPage10Layout->addWidget( textLabel4q, 6, 0 );
431 colDataq4 = new ColorCombo(false, WStackPage_10);
432 colDataq4->setPixmapType(ColorCombo::fancyPixmaps);
433 colDataq4->setColors(m_doc->PageColors, false);
434 WStackPage10Layout->addWidget( colDataq4, 6, 1, 1, 2 );
435 shadeq4 = new ShadeButton(WStackPage_10);
436 shadeq4->setValue(100);
437 WStackPage10Layout->addWidget( shadeq4, 7, 1 );
438 CurveQ4 = new CurveWidget( nullptr );
439 CurveQ4Pop = new QMenu();
440 CurveQ4Act = new QWidgetAction(this);
441 CurveQ4Act->setDefaultWidget(CurveQ4);
442 CurveQ4Pop->addAction(CurveQ4Act);
443 CurveQ4Button = new QToolButton( WStackPage_10 );
444 CurveQ4Button->setText( "" );
445 CurveQ4Button->setMaximumSize( QSize( 22, 22 ) );
446 CurveQ4Button->setIcon(IconManager::instance().loadIcon("curve.png"));
447 CurveQ4Button->setMenu(CurveQ4Pop);
448 CurveQ4Button->setPopupMode(QToolButton::InstantPopup);
449 WStackPage10Layout->addWidget( CurveQ4Button, 7, 2 );
450 optionStack->addWidget( WStackPage_10 );
451
452 WStackPage_11 = new QWidget( optionStack );
453 WStackPage11Layout = new QVBoxLayout( WStackPage_11 );
454 WStackPage11Layout->setContentsMargins(0, 0, 0, 0);
455 WStackPage11Layout->setSpacing(6);
456 WStackPage11Layout->setAlignment( Qt::AlignTop );
457 Kdisplay = new CurveWidget(WStackPage_11);
458 WStackPage11Layout->addWidget( Kdisplay );
459 spacer = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Expanding );
460 WStackPage11Layout->addItem( spacer );
461 optionStack->addWidget( WStackPage_11 );
462
463 textLabel1 = new QLabel( this );
464 textLabel1->setText( tr( "Available Effects" ) );
465 availableEffects = new QListWidget( this );
466 availableEffects->clear();
467 availableEffects->addItem( tr("Blur"));
468 availableEffects->addItem( tr("Brightness"));
469 availableEffects->addItem( tr("Colorize"));
470 availableEffects->addItem( tr("Duotone"));
471 availableEffects->addItem( tr("Tritone"));
472 availableEffects->addItem( tr("Quadtone"));
473 availableEffects->addItem( tr("Contrast"));
474 availableEffects->addItem( tr("Grayscale"));
475 availableEffects->addItem( tr("Curves"));
476 availableEffects->addItem( tr("Invert"));
477 availableEffects->addItem( tr("Posterize"));
478 availableEffects->addItem( tr("Sharpen"));
479
480 QFontMetrics ftMetrics = this->fontMetrics();
481 int availableEffectsAdvance = ftMetrics.horizontalAdvance( tr("Available Effects"));
482
483 availableEffects->setMinimumSize(availableEffectsAdvance + 40, 180);
484 toEffects = new QPushButton( this );
485 toEffects->setText( tr( "Add" ) );
486 toEffects->setEnabled(false);
487
488 textLabel2 = new QLabel( this );
489 textLabel2->setText( tr( "Applied Effects" ) );
490 usedEffects = new QListWidget( this );
491 usedEffects->setMinimumSize(availableEffectsAdvance + 40, 180);
492 usedEffects->clear();
493 m_effectValMap.clear();
494 for (int i = 0; i < effectsList.count(); ++i)
495 {
496 if (effectsList.at(i).effectCode == ImageEffect::EF_INVERT)
497 {
498 usedEffects->addItem( tr("Invert"));
499 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), "");
500 }
501 if (effectsList.at(i).effectCode == ImageEffect::EF_GRAYSCALE)
502 {
503 usedEffects->addItem( tr("Grayscale"));
504 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), "");
505 }
506 if (effectsList.at(i).effectCode == ImageEffect::EF_COLORIZE)
507 {
508 usedEffects->addItem( tr("Colorize"));
509 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), effectsList.at(i).effectParameters);
510 setItemSelectable(availableEffects, 2, false);
511 setItemSelectable(availableEffects, 3, false);
512 setItemSelectable(availableEffects, 4, false);
513 setItemSelectable(availableEffects, 5, false);
514 }
515 if (effectsList.at(i).effectCode == ImageEffect::EF_BRIGHTNESS)
516 {
517 usedEffects->addItem( tr("Brightness"));
518 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), effectsList.at(i).effectParameters);
519 }
520 if (effectsList.at(i).effectCode == ImageEffect::EF_CONTRAST)
521 {
522 usedEffects->addItem( tr("Contrast"));
523 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), effectsList.at(i).effectParameters);
524 }
525 if (effectsList.at(i).effectCode == ImageEffect::EF_SHARPEN)
526 {
527 usedEffects->addItem( tr("Sharpen"));
528 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), effectsList.at(i).effectParameters);
529 }
530 if (effectsList.at(i).effectCode == ImageEffect::EF_BLUR)
531 {
532 usedEffects->addItem( tr("Blur"));
533 QString tmpstr = effectsList.at(i).effectParameters;
534 double radius;
535 ScTextStream fp(&tmpstr, QIODevice::ReadOnly);
536 fp >> radius; // has to be read from stream, as two numbers are stored in effectParameters
537 blRadius->setValue(radius / m_imageScale);
538 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), QString("%1 1.0").arg(radius / m_imageScale));
539 }
540 if (effectsList.at(i).effectCode == ImageEffect::EF_SOLARIZE)
541 {
542 usedEffects->addItem( tr("Posterize"));
543 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), effectsList.at(i).effectParameters);
544 }
545 if (effectsList.at(i).effectCode == ImageEffect::EF_DUOTONE)
546 {
547 usedEffects->addItem( tr("Duotone"));
548 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), effectsList.at(i).effectParameters);
549 setItemSelectable(availableEffects, 2, false);
550 setItemSelectable(availableEffects, 3, false);
551 setItemSelectable(availableEffects, 4, false);
552 setItemSelectable(availableEffects, 5, false);
553 }
554 if (effectsList.at(i).effectCode == ImageEffect::EF_TRITONE)
555 {
556 usedEffects->addItem( tr("Tritone"));
557 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), effectsList.at(i).effectParameters);
558 setItemSelectable(availableEffects, 2, false);
559 setItemSelectable(availableEffects, 3, false);
560 setItemSelectable(availableEffects, 4, false);
561 setItemSelectable(availableEffects, 5, false);
562 }
563 if (effectsList.at(i).effectCode == ImageEffect::EF_QUADTONE)
564 {
565 usedEffects->addItem( tr("Quadtone"));
566 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), effectsList.at(i).effectParameters);
567 setItemSelectable(availableEffects, 2, false);
568 setItemSelectable(availableEffects, 3, false);
569 setItemSelectable(availableEffects, 4, false);
570 setItemSelectable(availableEffects, 5, false);
571 }
572 if (effectsList.at(i).effectCode == ImageEffect::EF_GRADUATE)
573 {
574 usedEffects->addItem( tr("Curves"));
575 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), effectsList.at(i).effectParameters);
576 }
577 }
578 layout7 = new QHBoxLayout;
579 layout7->setContentsMargins(0, 0, 0, 0);
580 layout7->setSpacing(6);
581 fromEffects = new QPushButton( this );
582 fromEffects->setText( tr( "Remove" ) );
583 fromEffects->setEnabled(false);
584 layout7->addWidget( fromEffects );
585 effectUp = new QPushButton( this );
586 effectUp->setText( "" );
587 effectUp->setIcon(IconManager::instance().loadIcon("16/go-up.png"));
588 effectUp->setEnabled(false);
589 layout7->addWidget( effectUp );
590 effectDown = new QPushButton( this );
591 effectDown->setText( "" );
592 effectDown->setIcon(IconManager::instance().loadIcon("16/go-down.png"));
593 effectDown->setEnabled(false);
594 layout7->addWidget( effectDown );
595
596 groupBox = new QGroupBox( this );
597 groupBox->setTitle( tr( "Options:" ) );
598 layout8 = new QVBoxLayout( groupBox );
599 layout8->addWidget( optionStack );
600 layout8->setAlignment( Qt::AlignTop );
601 layout8->setSpacing(6);
602 layout8->setContentsMargins(9, 9, 9, 9);
603
604 layoutGrid->addWidget(textLabel1, 0, 0, 1, 1);
605 layoutGrid->addWidget(textLabel2, 0, 1, 1, 1);
606 layoutGrid->addWidget(textLabel5, 0, 2, 1, 1);
607 layoutGrid->addWidget(availableEffects, 1, 0, 2, 1);
608 layoutGrid->addWidget(usedEffects, 1, 1, 2, 1);
609 layoutGrid->addWidget(pixmapLabel1, 1, 2, 1, 1);
610 layoutGrid->addWidget(groupBox, 2, 2, 2, 1);
611 layoutGrid->addWidget(toEffects, 3, 0, 1, 1);
612 layoutGrid->addLayout(layout7, 3, 1, 1, 1);
613 EffectsDialogLayout->addLayout( layoutGrid );
614
615 layoutDialogButtonBox = new QHBoxLayout;
616 layoutDialogButtonBox->setContentsMargins(0, 0, 0, 0);
617 layoutDialogButtonBox->setSpacing(6);
618 spacer3 = new QSpacerItem( 1, 1, QSizePolicy::Expanding, QSizePolicy::Minimum );
619 layoutDialogButtonBox->addItem( spacer3 );
620 okButton = new QPushButton( this );
621 okButton->setText( tr( "OK" ) );
622 layoutDialogButtonBox->addWidget( okButton );
623 cancelButton = new QPushButton( this );
624 cancelButton->setText( tr( "Cancel" ) );
625 layoutDialogButtonBox->addWidget( cancelButton );
626 EffectsDialogLayout->addLayout( layoutDialogButtonBox );
627
628
629 optionStack->setCurrentIndex(0);
630 usedEffects->clearSelection();
631 availableEffects->clearSelection();
632 resize( minimumSizeHint() );
633 ScImage im(m_image);
634 saveValues(false);
635 im.applyEffect(effectsList, m_doc->PageColors, false);
636 QPixmap Bild = QPixmap(pixmapLabel1->width(), pixmapLabel1->height());
637 int x = (pixmapLabel1->width() - im.qImage().width()) / 2;
638 int y = (pixmapLabel1->height() - im.qImage().height()) / 2;
639 QPainter p;
640 QBrush b(QColor(205,205,205), IconManager::instance().loadPixmap("testfill.png"));
641 p.begin(&Bild);
642 p.fillRect(0, 0, pixmapLabel1->width(), pixmapLabel1->height(), b);
643 p.drawImage(x, y, im.qImage());
644 p.end();
645 pixmapLabel1->setPixmap( Bild );
646
647 // signals and slots connections
648 connect( okButton, SIGNAL( clicked() ), this, SLOT( leaveOK() ) );
649 connect( cancelButton, SIGNAL( clicked() ), this, SLOT( reject() ) );
650 connect( usedEffects, SIGNAL( itemClicked(QListWidgetItem*) ), this, SLOT( selectEffect(QListWidgetItem*) ) );
651 connect( usedEffects, SIGNAL( itemDoubleClicked(QListWidgetItem*) ), this, SLOT( moveFromEffects() ) );
652 connect( availableEffects, SIGNAL( itemClicked(QListWidgetItem*) ), this, SLOT( selectAvailEffect(QListWidgetItem*) ) );
653 connect( availableEffects, SIGNAL( itemDoubleClicked(QListWidgetItem*) ), this, SLOT( selectAvailEffectDbl(QListWidgetItem*) ) );
654 connect( toEffects, SIGNAL( clicked() ), this, SLOT( moveToEffects() ) );
655 connect( fromEffects, SIGNAL( clicked() ), this, SLOT( moveFromEffects() ) );
656 connect( effectUp, SIGNAL( clicked() ), this, SLOT( moveEffectUp() ) );
657 connect( effectDown, SIGNAL( clicked() ), this, SLOT( moveEffectDown() ) );
658 connect( colData, SIGNAL(activated(int)), this, SLOT( createPreview()));
659 connect( shade, SIGNAL(clicked()), this, SLOT(createPreview()));
660 connect( colData1, SIGNAL(activated(int)), this, SLOT( createPreview()));
661 connect( shade1, SIGNAL(clicked()), this, SLOT(createPreview()));
662 connect( colData2, SIGNAL(activated(int)), this, SLOT( createPreview()));
663 connect( shade2, SIGNAL(clicked()), this, SLOT(createPreview()));
664 connect( colDatat1, SIGNAL(activated(int)), this, SLOT( createPreview()));
665 connect( shadet1, SIGNAL(clicked()), this, SLOT(createPreview()));
666 connect( colDatat2, SIGNAL(activated(int)), this, SLOT( createPreview()));
667 connect( shadet2, SIGNAL(clicked()), this, SLOT(createPreview()));
668 connect( colDatat3, SIGNAL(activated(int)), this, SLOT( createPreview()));
669 connect( shadet3, SIGNAL(clicked()), this, SLOT(createPreview()));
670 connect( colDataq1, SIGNAL(activated(int)), this, SLOT( createPreview()));
671 connect( shadeq1, SIGNAL(clicked()), this, SLOT(createPreview()));
672 connect( colDataq2, SIGNAL(activated(int)), this, SLOT( createPreview()));
673 connect( shadeq2, SIGNAL(clicked()), this, SLOT(createPreview()));
674 connect( colDataqc3, SIGNAL(activated(int)), this, SLOT( createPreview()));
675 connect( shadeqc3, SIGNAL(clicked()), this, SLOT(createPreview()));
676 connect( colDataq4, SIGNAL(activated(int)), this, SLOT( createPreview()));
677 connect( shadeq4, SIGNAL(clicked()), this, SLOT(createPreview()));
678 connect( brightnessSlider, SIGNAL(valueChanged(int)), this, SLOT(updateBright(int)));
679 connect( brightnessSlider, SIGNAL(sliderReleased()), this, SLOT(createPreview()));
680 connect( contrastSlider, SIGNAL(valueChanged(int)), this, SLOT(updateContrast(int)));
681 connect( contrastSlider, SIGNAL(sliderReleased()), this, SLOT(createPreview()));
682 connect( shRadius, SIGNAL(valueChanged(double)), this, SLOT(createPreview()));
683 connect( shValue, SIGNAL(valueChanged(double)), this, SLOT(createPreview()));
684 connect( blRadius, SIGNAL(valueChanged(double)), this, SLOT(createPreview()));
685 connect( solarizeSlider, SIGNAL(valueChanged(int)), this, SLOT(updateSolarize(int)));
686 connect( solarizeSlider, SIGNAL(sliderReleased()), this, SLOT(createPreview()));
687 connect( Kdisplay->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
688 connect( CurveD1->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
689 connect( CurveD2->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
690 connect( CurveT1->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
691 connect( CurveT2->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
692 connect( CurveT3->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
693 connect( CurveQ1->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
694 connect( CurveQ2->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
695 connect( CurveQc3->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
696 connect( CurveQ4->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
697 m_time.start();
698 }
699
setItemSelectable(QListWidget * widget,int itemNr,bool enable)700 void EffectsDialog::setItemSelectable(QListWidget* widget, int itemNr, bool enable)
701 {
702 if (enable)
703 widget->item(itemNr)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
704 else
705 widget->item(itemNr)->setFlags(Qt::NoItemFlags);
706 }
707
leaveOK()708 void EffectsDialog::leaveOK()
709 {
710 saveValues(true);
711 accept();
712 }
713
updateSolarize(int val)714 void EffectsDialog::updateSolarize(int val)
715 {
716 QString tmp;
717 tmp.setNum(val);
718 textLabel15->setText(tmp);
719 createPreview();
720 }
721
updateContrast(int val)722 void EffectsDialog::updateContrast(int val)
723 {
724 QString tmp;
725 tmp.setNum(val);
726 textLabel9->setText(tmp);
727 createPreview();
728 }
729
updateBright(int val)730 void EffectsDialog::updateBright(int val)
731 {
732 QString tmp;
733 tmp.setNum(val);
734 textLabel7->setText(tmp);
735 createPreview();
736 }
737
createPreview()738 void EffectsDialog::createPreview()
739 {
740 if (m_time.elapsed() < 50)
741 return;
742 ScImage im(m_image);
743 saveValues(false);
744 im.applyEffect(effectsList, m_doc->PageColors, false);
745 QPixmap Bild = QPixmap(pixmapLabel1->width(), pixmapLabel1->height());
746 int x = (pixmapLabel1->width() - im.qImage().width()) / 2;
747 int y = (pixmapLabel1->height() - im.qImage().height()) / 2;
748 QPainter p;
749 QBrush b(QColor(205,205,205), IconManager::instance().loadPixmap("testfill.png"));
750 p.begin(&Bild);
751 p.fillRect(0, 0, pixmapLabel1->width(), pixmapLabel1->height(), b);
752 p.drawImage(x, y, im.qImage());
753 p.end();
754 pixmapLabel1->setPixmap( Bild );
755 m_time.start();
756 }
757
saveValues(bool final)758 void EffectsDialog::saveValues(bool final)
759 {
760 selectEffectHelper(final);
761 effectsList.clear();
762 struct ImageEffect ef;
763 for (int e = 0; e < usedEffects->count(); ++e)
764 {
765 if (usedEffects->item(e)->text() == tr("Invert"))
766 {
767 ef.effectCode = ImageEffect::EF_INVERT;
768 ef.effectParameters = "";
769 }
770 if (usedEffects->item(e)->text() == tr("Grayscale"))
771 {
772 ef.effectCode = ImageEffect::EF_GRAYSCALE;
773 ef.effectParameters = "";
774 }
775 if (usedEffects->item(e)->text() == tr("Colorize"))
776 {
777 ef.effectCode = ImageEffect::EF_COLORIZE;
778 ef.effectParameters = m_effectValMap[usedEffects->item(e)];
779 }
780 if (usedEffects->item(e)->text() == tr("Brightness"))
781 {
782 ef.effectCode = ImageEffect::EF_BRIGHTNESS;
783 ef.effectParameters = m_effectValMap[usedEffects->item(e)];
784 }
785 if (usedEffects->item(e)->text() == tr("Contrast"))
786 {
787 ef.effectCode = ImageEffect::EF_CONTRAST;
788 ef.effectParameters = m_effectValMap[usedEffects->item(e)];
789 }
790 if (usedEffects->item(e)->text() == tr("Sharpen"))
791 {
792 ef.effectCode = ImageEffect::EF_SHARPEN;
793 ef.effectParameters = m_effectValMap[usedEffects->item(e)];
794 }
795 if (usedEffects->item(e)->text() == tr("Blur"))
796 {
797 ef.effectCode = ImageEffect::EF_BLUR;
798 if (final)
799 ef.effectParameters = QString("%1 1.0").arg(blRadius->value() * m_imageScale);
800 else
801 ef.effectParameters = QString("%1 1.0").arg(blRadius->value());
802 }
803 if (usedEffects->item(e)->text() == tr("Posterize"))
804 {
805 ef.effectCode = ImageEffect::EF_SOLARIZE;
806 ef.effectParameters = m_effectValMap[usedEffects->item(e)];
807 }
808 if (usedEffects->item(e)->text() == tr("Duotone"))
809 {
810 ef.effectCode = ImageEffect::EF_DUOTONE;
811 ef.effectParameters = m_effectValMap[usedEffects->item(e)];
812 }
813 if (usedEffects->item(e)->text() == tr("Tritone"))
814 {
815 ef.effectCode = ImageEffect::EF_TRITONE;
816 ef.effectParameters = m_effectValMap[usedEffects->item(e)];
817 }
818 if (usedEffects->item(e)->text() == tr("Quadtone"))
819 {
820 ef.effectCode = ImageEffect::EF_QUADTONE;
821 ef.effectParameters = m_effectValMap[usedEffects->item(e)];
822 }
823 if (usedEffects->item(e)->text() == tr("Curves"))
824 {
825 ef.effectCode = ImageEffect::EF_GRADUATE;
826 ef.effectParameters = m_effectValMap[usedEffects->item(e)];
827 }
828 effectsList.append(ef);
829 }
830 }
831
selectAvailEffectDbl(QListWidgetItem * c)832 void EffectsDialog::selectAvailEffectDbl(QListWidgetItem* c)
833 {
834 if (!c)
835 return;
836 if (!(c->flags() & Qt::ItemIsSelectable))
837 return;
838 moveToEffects();
839 }
840
moveToEffects()841 void EffectsDialog::moveToEffects()
842 {
843 disconnect( usedEffects, SIGNAL( itemActivated(QListWidgetItem*) ), this, SLOT( selectEffect(QListWidgetItem*) ) );
844 usedEffects->addItem(availableEffects->currentItem()->text());
845 if (availableEffects->currentItem()->text() == tr("Invert"))
846 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), "");
847 if (availableEffects->currentItem()->text() == tr("Grayscale"))
848 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), "");
849 if (availableEffects->currentItem()->text() == tr("Brightness"))
850 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), "0");
851 if (availableEffects->currentItem()->text() == tr("Contrast"))
852 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), "0");
853 if (availableEffects->currentItem()->text() == tr("Sharpen"))
854 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), "0 1");
855 if (availableEffects->currentItem()->text() == tr("Blur"))
856 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), "0 1");
857 if (availableEffects->currentItem()->text() == tr("Posterize"))
858 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), "255");
859 if (availableEffects->currentItem()->text() == tr("Colorize"))
860 {
861 ColorList::Iterator it;
862 it = m_doc->PageColors.begin();
863 QString efval = it.key()+"\n100";
864 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), efval);
865 setItemSelectable(availableEffects, 2, false);
866 setItemSelectable(availableEffects, 3, false);
867 setItemSelectable(availableEffects, 4, false);
868 setItemSelectable(availableEffects, 5, false);
869 }
870 if (availableEffects->currentItem()->text() == tr("Duotone"))
871 {
872 ColorList::Iterator it;
873 it = m_doc->PageColors.begin();
874 QString efval = it.key()+"\n"+it.key()+"\n100 100 2 0.0 0.0 1.0 1.0 0 2 0.0 0.0 1.0 1.0 0";
875 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), efval);
876 setItemSelectable(availableEffects, 2, false);
877 setItemSelectable(availableEffects, 3, false);
878 setItemSelectable(availableEffects, 4, false);
879 setItemSelectable(availableEffects, 5, false);
880 }
881 if (availableEffects->currentItem()->text() == tr("Tritone"))
882 {
883 ColorList::Iterator it;
884 it = m_doc->PageColors.begin();
885 QString efval = it.key()+"\n"+it.key()+"\n"+it.key()+"\n100 100 100 2 0.0 0.0 1.0 1.0 0 2 0.0 0.0 1.0 1.0 0 2 0.0 0.0 1.0 1.0 0";
886 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), efval);
887 setItemSelectable(availableEffects, 2, false);
888 setItemSelectable(availableEffects, 3, false);
889 setItemSelectable(availableEffects, 4, false);
890 setItemSelectable(availableEffects, 5, false);
891 }
892 if (availableEffects->currentItem()->text() == tr("Quadtone"))
893 {
894 ColorList::Iterator it;
895 it = m_doc->PageColors.begin();
896 QString efval = it.key()+"\n"+it.key()+"\n"+it.key()+"\n"+it.key()+"\n100 100 100 100 2 0.0 0.0 1.0 1.0 0 2 0.0 0.0 1.0 1.0 0 2 0.0 0.0 1.0 1.0 0 2 0.0 0.0 1.0 1.0 0";
897 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), efval);
898 setItemSelectable(availableEffects, 2, false);
899 setItemSelectable(availableEffects, 3, false);
900 setItemSelectable(availableEffects, 4, false);
901 setItemSelectable(availableEffects, 5, false);
902 }
903 if (availableEffects->currentItem()->text() == tr("Curves"))
904 m_effectValMap.insert(usedEffects->item(usedEffects->count()-1), "2 0.0 0.0 1.0 1.0 0");
905 usedEffects->setCurrentItem(usedEffects->item(usedEffects->count()-1));
906 selectEffect(usedEffects->item(usedEffects->count()-1));
907 connect( usedEffects, SIGNAL( itemActivated(QListWidgetItem*) ), this, SLOT( selectEffect(QListWidgetItem*) ) );
908 createPreview();
909 }
910
moveFromEffects()911 void EffectsDialog::moveFromEffects()
912 {
913 disconnect( usedEffects, SIGNAL( itemActivated(QListWidgetItem*) ), this, SLOT( selectEffect(QListWidgetItem*) ) );
914 if ((usedEffects->currentItem()->text() == tr("Colorize")) || (usedEffects->currentItem()->text() == tr("Duotone")) || (usedEffects->currentItem()->text() == tr("Tritone")) || (usedEffects->currentItem()->text() == tr("Quadtone")))
915 {
916 setItemSelectable(availableEffects, 2, true);
917 setItemSelectable(availableEffects, 3, true);
918 setItemSelectable(availableEffects, 4, true);
919 setItemSelectable(availableEffects, 5, true);
920 }
921 m_effectValMap.remove(usedEffects->currentItem());
922 int curr = usedEffects->currentRow();
923 QListWidgetItem *it = usedEffects->takeItem(curr);
924 delete it;
925 currentOptions = nullptr;
926 usedEffects->clearSelection();
927 if (usedEffects->count() == 0)
928 {
929 fromEffects->setEnabled(false);
930 toEffects->setEnabled(false);
931 selectEffectHelper();
932 optionStack->setCurrentIndex(0);
933 disconnect( availableEffects, SIGNAL( itemClicked(QListWidgetItem*) ), this, SLOT( selectAvailEffect(QListWidgetItem*) ) );
934 availableEffects->clearSelection();
935 connect( availableEffects, SIGNAL( itemClicked(QListWidgetItem*) ), this, SLOT( selectAvailEffect(QListWidgetItem*) ) );
936 }
937 else
938 {
939 usedEffects->setCurrentItem(usedEffects->item(qMax(curr-1, 0)));
940 usedEffects->currentItem()->setSelected(true);
941 selectEffect(usedEffects->currentItem());
942 }
943 if (usedEffects->count() < 2)
944 {
945 effectUp->setEnabled(false);
946 effectDown->setEnabled(false);
947 }
948 createPreview();
949 connect( usedEffects, SIGNAL( itemActivated(QListWidgetItem*) ), this, SLOT( selectEffect(QListWidgetItem*) ) );
950 }
951
moveEffectUp()952 void EffectsDialog::moveEffectUp()
953 {
954 int curr = usedEffects->currentRow();
955 if (curr == 0)
956 return;
957 disconnect( usedEffects, SIGNAL( itemActivated(QListWidgetItem*) ), this, SLOT( selectEffect(QListWidgetItem*) ) );
958 QListWidgetItem *it = usedEffects->takeItem(curr);
959 usedEffects->insertItem(curr-1, it);
960 usedEffects->setCurrentItem(it);
961 selectEffect(usedEffects->currentItem());
962 createPreview();
963 connect( usedEffects, SIGNAL( itemActivated(QListWidgetItem*) ), this, SLOT( selectEffect(QListWidgetItem*) ) );
964 }
965
moveEffectDown()966 void EffectsDialog::moveEffectDown()
967 {
968 int curr = usedEffects->currentRow();
969 if (curr == static_cast<int>(usedEffects->count())-1)
970 return;
971 disconnect( usedEffects, SIGNAL( itemActivated(QListWidgetItem*) ), this, SLOT( selectEffect(QListWidgetItem*) ) );
972 QListWidgetItem *it = usedEffects->takeItem(curr);
973 usedEffects->insertItem(curr+1, it);
974 usedEffects->setCurrentItem(it);
975 selectEffect(usedEffects->currentItem());
976 createPreview();
977 connect( usedEffects, SIGNAL( itemActivated(QListWidgetItem*) ), this, SLOT( selectEffect(QListWidgetItem*) ) );
978 }
979
selectEffect(QListWidgetItem * c)980 void EffectsDialog::selectEffect(QListWidgetItem* c)
981 {
982 QString s;
983 toEffects->setEnabled(false);
984 selectEffectHelper();
985 if (c)
986 {
987 fromEffects->setEnabled(true);
988 if (usedEffects->count() > 1)
989 {
990 effectUp->setEnabled(true);
991 effectDown->setEnabled(true);
992 if (usedEffects->currentItem() == nullptr)
993 effectUp->setEnabled(false);
994 if (usedEffects->currentRow() == static_cast<int>(usedEffects->count())-1)
995 effectDown->setEnabled(false);
996 }
997 if (c->text() == tr("Grayscale"))
998 optionStack->setCurrentIndex(0);
999 else if (c->text() == tr("Invert"))
1000 optionStack->setCurrentIndex(0);
1001 else if (c->text() == tr("Colorize"))
1002 {
1003 disconnect( colData, SIGNAL(activated(int)), this, SLOT( createPreview()));
1004 disconnect( shade, SIGNAL(clicked()), this, SLOT(createPreview()));
1005 QString tmpstr = m_effectValMap[c];
1006 QString col;
1007 int shading;
1008 ScTextStream fp(&tmpstr, QIODevice::ReadOnly);
1009 // fp >> col;
1010 col = fp.readLine();
1011 fp >> shading;
1012 setCurrentComboItem(colData, col);
1013 shade->setValue(shading);
1014 optionStack->setCurrentIndex(1);
1015 connect( colData, SIGNAL(activated(int)), this, SLOT( createPreview()));
1016 connect( shade, SIGNAL(clicked()), this, SLOT(createPreview()));
1017 }
1018 else if (c->text() == tr("Duotone"))
1019 {
1020 disconnect( colData1, SIGNAL(activated(int)), this, SLOT( createPreview()));
1021 disconnect( shade1, SIGNAL(clicked()), this, SLOT(createPreview()));
1022 disconnect( colData2, SIGNAL(activated(int)), this, SLOT( createPreview()));
1023 disconnect( shade2, SIGNAL(clicked()), this, SLOT(createPreview()));
1024 disconnect( CurveD1->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
1025 disconnect( CurveD2->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
1026 QString tmpstr = m_effectValMap[c];
1027 QString col1, col2;
1028 int shading1, shading2;
1029 ScTextStream fp(&tmpstr, QIODevice::ReadOnly);
1030 col1 = fp.readLine();
1031 col2 = fp.readLine();
1032 fp >> shading1;
1033 fp >> shading2;
1034 setCurrentComboItem(colData1, col1);
1035 shade1->setValue(shading1);
1036 setCurrentComboItem(colData2, col2);
1037 shade2->setValue(shading2);
1038 int numVals;
1039 double xval, yval;
1040 FPointArray curve;
1041 curve.resize(0);
1042 fp >> numVals;
1043 for (int i = 0; i < numVals; i++)
1044 {
1045 fp >> s;
1046 xval = ScCLocale::toDoubleC(s);
1047 fp >> s;
1048 yval = ScCLocale::toDoubleC(s);
1049 curve.addPoint(xval, yval);
1050 }
1051 CurveD1->cDisplay->setCurve(curve);
1052 int lin;
1053 fp >> lin;
1054 CurveD1->setLinear(lin);
1055 curve.resize(0);
1056 fp >> numVals;
1057 for (int i = 0; i < numVals; i++)
1058 {
1059 fp >> s;
1060 xval = ScCLocale::toDoubleC(s);
1061 fp >> s;
1062 yval = ScCLocale::toDoubleC(s);
1063 curve.addPoint(xval, yval);
1064 }
1065 CurveD2->cDisplay->setCurve(curve);
1066 fp >> lin;
1067 CurveD2->setLinear(lin);
1068 optionStack->setCurrentIndex(7);
1069 connect( colData1, SIGNAL(activated(int)), this, SLOT( createPreview()));
1070 connect( shade1, SIGNAL(clicked()), this, SLOT(createPreview()));
1071 connect( colData2, SIGNAL(activated(int)), this, SLOT( createPreview()));
1072 connect( shade2, SIGNAL(clicked()), this, SLOT(createPreview()));
1073 connect( CurveD1->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
1074 connect( CurveD2->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
1075 }
1076 else if (c->text() == tr("Tritone"))
1077 {
1078 disconnect( colDatat1, SIGNAL(activated(int)), this, SLOT( createPreview()));
1079 disconnect( shadet1, SIGNAL(clicked()), this, SLOT(createPreview()));
1080 disconnect( colDatat2, SIGNAL(activated(int)), this, SLOT( createPreview()));
1081 disconnect( shadet2, SIGNAL(clicked()), this, SLOT(createPreview()));
1082 disconnect( colDatat3, SIGNAL(activated(int)), this, SLOT( createPreview()));
1083 disconnect( shadet3, SIGNAL(clicked()), this, SLOT(createPreview()));
1084 disconnect( CurveT1->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
1085 disconnect( CurveT2->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
1086 disconnect( CurveT3->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
1087 QString tmpstr = m_effectValMap[c];
1088 QString col1, col2, col3;
1089 int shading1, shading2, shading3;
1090 ScTextStream fp(&tmpstr, QIODevice::ReadOnly);
1091 col1 = fp.readLine();
1092 col2 = fp.readLine();
1093 col3 = fp.readLine();
1094 fp >> shading1;
1095 fp >> shading2;
1096 fp >> shading3;
1097 setCurrentComboItem(colDatat1, col1);
1098 shadet1->setValue(shading1);
1099 setCurrentComboItem(colDatat2, col2);
1100 shadet2->setValue(shading2);
1101 setCurrentComboItem(colDatat3, col3);
1102 shadet3->setValue(shading3);
1103 int numVals;
1104 double xval, yval;
1105 FPointArray curve;
1106 curve.resize(0);
1107 fp >> numVals;
1108 for (int i = 0; i < numVals; i++)
1109 {
1110 fp >> s;
1111 xval = ScCLocale::toDoubleC(s);
1112 fp >> s;
1113 yval = ScCLocale::toDoubleC(s);
1114 curve.addPoint(xval, yval);
1115 }
1116 CurveT1->cDisplay->setCurve(curve);
1117 int lin;
1118 fp >> lin;
1119 CurveT1->setLinear(lin);
1120 curve.resize(0);
1121 fp >> numVals;
1122 for (int i = 0; i < numVals; i++)
1123 {
1124 fp >> s;
1125 xval = ScCLocale::toDoubleC(s);
1126 fp >> s;
1127 yval = ScCLocale::toDoubleC(s);
1128 curve.addPoint(xval, yval);
1129 }
1130 CurveT2->cDisplay->setCurve(curve);
1131 fp >> lin;
1132 CurveT2->setLinear(lin);
1133 curve.resize(0);
1134 fp >> numVals;
1135 for (int i = 0; i < numVals; i++)
1136 {
1137 fp >> s;
1138 xval = ScCLocale::toDoubleC(s);
1139 fp >> s;
1140 yval = ScCLocale::toDoubleC(s);
1141 curve.addPoint(xval, yval);
1142 }
1143 CurveT3->cDisplay->setCurve(curve);
1144 fp >> lin;
1145 CurveT3->setLinear(lin);
1146 optionStack->setCurrentIndex(8);
1147 connect( colDatat1, SIGNAL(activated(int)), this, SLOT( createPreview()));
1148 connect( shadet1, SIGNAL(clicked()), this, SLOT(createPreview()));
1149 connect( colDatat2, SIGNAL(activated(int)), this, SLOT( createPreview()));
1150 connect( shadet2, SIGNAL(clicked()), this, SLOT(createPreview()));
1151 connect( colDatat3, SIGNAL(activated(int)), this, SLOT( createPreview()));
1152 connect( shadet3, SIGNAL(clicked()), this, SLOT(createPreview()));
1153 connect( CurveT1->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
1154 connect( CurveT2->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
1155 connect( CurveT3->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
1156 }
1157 else if (c->text() == tr("Quadtone"))
1158 {
1159 disconnect( colDataq1, SIGNAL(activated(int)), this, SLOT( createPreview()));
1160 disconnect( shadeq1, SIGNAL(clicked()), this, SLOT(createPreview()));
1161 disconnect( colDataq2, SIGNAL(activated(int)), this, SLOT( createPreview()));
1162 disconnect( shadeq2, SIGNAL(clicked()), this, SLOT(createPreview()));
1163 disconnect( colDataqc3, SIGNAL(activated(int)), this, SLOT( createPreview()));
1164 disconnect( shadeqc3, SIGNAL(clicked()), this, SLOT(createPreview()));
1165 disconnect( colDataq4, SIGNAL(activated(int)), this, SLOT( createPreview()));
1166 disconnect( shadeq4, SIGNAL(clicked()), this, SLOT(createPreview()));
1167 disconnect( CurveQ1->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
1168 disconnect( CurveQ2->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
1169 disconnect( CurveQc3->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
1170 disconnect( CurveQ4->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
1171 QString tmpstr = m_effectValMap[c];
1172 QString col1, col2, col3, col4;
1173 int shading1, shading2, shading3, shading4;
1174 ScTextStream fp(&tmpstr, QIODevice::ReadOnly);
1175 col1 = fp.readLine();
1176 col2 = fp.readLine();
1177 col3 = fp.readLine();
1178 col4 = fp.readLine();
1179 fp >> shading1;
1180 fp >> shading2;
1181 fp >> shading3;
1182 fp >> shading4;
1183 setCurrentComboItem(colDataq1, col1);
1184 shadeq1->setValue(shading1);
1185 setCurrentComboItem(colDataq2, col2);
1186 shadeq2->setValue(shading2);
1187 setCurrentComboItem(colDataqc3, col3);
1188 shadeqc3->setValue(shading3);
1189 setCurrentComboItem(colDataq4, col4);
1190 shadeq4->setValue(shading4);
1191 int numVals;
1192 double xval, yval;
1193 FPointArray curve;
1194 curve.resize(0);
1195 fp >> numVals;
1196 for (int i = 0; i < numVals; i++)
1197 {
1198 fp >> s;
1199 xval = ScCLocale::toDoubleC(s);
1200 fp >> s;
1201 yval = ScCLocale::toDoubleC(s);
1202 curve.addPoint(xval, yval);
1203 }
1204 CurveQ1->cDisplay->setCurve(curve);
1205 int lin;
1206 fp >> lin;
1207 CurveQ1->setLinear(lin);
1208 curve.resize(0);
1209 fp >> numVals;
1210 for (int i = 0; i < numVals; i++)
1211 {
1212 fp >> s;
1213 xval = ScCLocale::toDoubleC(s);
1214 fp >> s;
1215 yval = ScCLocale::toDoubleC(s);
1216 curve.addPoint(xval, yval);
1217 }
1218 CurveQ2->cDisplay->setCurve(curve);
1219 fp >> lin;
1220 CurveQ2->setLinear(lin);
1221 curve.resize(0);
1222 fp >> numVals;
1223 for (int i = 0; i < numVals; i++)
1224 {
1225 fp >> s;
1226 xval = ScCLocale::toDoubleC(s);
1227 fp >> s;
1228 yval = ScCLocale::toDoubleC(s);
1229 curve.addPoint(xval, yval);
1230 }
1231 CurveQc3->cDisplay->setCurve(curve);
1232 fp >> lin;
1233 CurveQc3->setLinear(lin);
1234 curve.resize(0);
1235 fp >> numVals;
1236 for (int i = 0; i < numVals; i++)
1237 {
1238 fp >> s;
1239 xval = ScCLocale::toDoubleC(s);
1240 fp >> s;
1241 yval = ScCLocale::toDoubleC(s);
1242 curve.addPoint(xval, yval);
1243 }
1244 CurveQ4->cDisplay->setCurve(curve);
1245 fp >> lin;
1246 CurveQ4->setLinear(lin);
1247 optionStack->setCurrentIndex(9);
1248 connect( colDataq1, SIGNAL(activated(int)), this, SLOT( createPreview()));
1249 connect( shadeq1, SIGNAL(clicked()), this, SLOT(createPreview()));
1250 connect( colDataq2, SIGNAL(activated(int)), this, SLOT( createPreview()));
1251 connect( shadeq2, SIGNAL(clicked()), this, SLOT(createPreview()));
1252 connect( colDataqc3, SIGNAL(activated(int)), this, SLOT( createPreview()));
1253 connect( shadeqc3, SIGNAL(clicked()), this, SLOT(createPreview()));
1254 connect( colDataq4, SIGNAL(activated(int)), this, SLOT( createPreview()));
1255 connect( shadeq4, SIGNAL(clicked()), this, SLOT(createPreview()));
1256 connect( CurveQ1->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
1257 connect( CurveQ2->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
1258 connect( CurveQc3->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
1259 connect( CurveQ4->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
1260 }
1261 else if (c->text() == tr("Brightness"))
1262 {
1263 disconnect( brightnessSlider, SIGNAL(valueChanged(int)), this, SLOT(updateBright(int)));
1264 disconnect( brightnessSlider, SIGNAL(sliderReleased()), this, SLOT(createPreview()));
1265 QString tmpstr = m_effectValMap[c];
1266 int brightness;
1267 ScTextStream fp(&tmpstr, QIODevice::ReadOnly);
1268 fp >> brightness;
1269 brightnessSlider->setValue(brightness);
1270 QString tmp;
1271 tmp.setNum(brightness);
1272 textLabel7->setText(tmp);
1273 optionStack->setCurrentIndex(2);
1274 connect( brightnessSlider, SIGNAL(valueChanged(int)), this, SLOT(updateBright(int)));
1275 connect( brightnessSlider, SIGNAL(sliderReleased()), this, SLOT(createPreview()));
1276 }
1277 else if (c->text() == tr("Contrast"))
1278 {
1279 disconnect( contrastSlider, SIGNAL(valueChanged(int)), this, SLOT(updateContrast(int)));
1280 disconnect( contrastSlider, SIGNAL(sliderReleased()), this, SLOT(createPreview()));
1281 QString tmpstr = m_effectValMap[c];
1282 int contrast;
1283 ScTextStream fp(&tmpstr, QIODevice::ReadOnly);
1284 fp >> contrast;
1285 contrastSlider->setValue(contrast);
1286 QString tmp;
1287 tmp.setNum(contrast);
1288 textLabel9->setText(tmp);
1289 optionStack->setCurrentIndex(3);
1290 connect( contrastSlider, SIGNAL(valueChanged(int)), this, SLOT(updateContrast(int)));
1291 connect( contrastSlider, SIGNAL(sliderReleased()), this, SLOT(createPreview()));
1292 }
1293 else if (c->text() == tr("Sharpen"))
1294 {
1295 disconnect( shRadius, SIGNAL(valueChanged(double)), this, SLOT(createPreview()));
1296 disconnect( shValue, SIGNAL(valueChanged(double)), this, SLOT(createPreview()));
1297 QString tmpstr = m_effectValMap[c];
1298 double radius, sigma;
1299 ScTextStream fp(&tmpstr, QIODevice::ReadOnly);
1300 fp >> s;
1301 radius = ScCLocale::toDoubleC(s);
1302 fp >> s;
1303 sigma = ScCLocale::toDoubleC(s);
1304 shRadius->setValue(radius);
1305 shValue->setValue(sigma);
1306 optionStack->setCurrentIndex(4);
1307 connect( shRadius, SIGNAL(valueChanged(double)), this, SLOT(createPreview()));
1308 connect( shValue, SIGNAL(valueChanged(double)), this, SLOT(createPreview()));
1309 }
1310 else if (c->text() == tr("Blur"))
1311 {
1312 disconnect( blRadius, SIGNAL(valueChanged(double)), this, SLOT(createPreview()));
1313 QString tmpstr = m_effectValMap[c];
1314 double radius;
1315 ScTextStream fp(&tmpstr, QIODevice::ReadOnly);
1316 fp >> s;
1317 radius = ScCLocale::toDoubleC(s);
1318 blRadius->setValue(radius);
1319 optionStack->setCurrentIndex(5);
1320 connect( blRadius, SIGNAL(valueChanged(double)), this, SLOT(createPreview()));
1321 }
1322 else if (c->text() == tr("Posterize"))
1323 {
1324 disconnect( solarizeSlider, SIGNAL(valueChanged(int)), this, SLOT(updateSolarize(int)));
1325 disconnect( solarizeSlider, SIGNAL(sliderReleased()), this, SLOT(createPreview()));
1326 QString tmpstr = m_effectValMap[c];
1327 int solarize;
1328 ScTextStream fp(&tmpstr, QIODevice::ReadOnly);
1329 fp >> solarize;
1330 solarizeSlider->setValue(solarize);
1331 QString tmp;
1332 tmp.setNum(solarize);
1333 textLabel15->setText(tmp);
1334 optionStack->setCurrentIndex(6);
1335 connect( solarizeSlider, SIGNAL(valueChanged(int)), this, SLOT(updateSolarize(int)));
1336 connect( solarizeSlider, SIGNAL(sliderReleased()), this, SLOT(createPreview()));
1337 }
1338 else if (c->text() == tr("Curves"))
1339 {
1340 disconnect( Kdisplay->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
1341 QString tmpstr = m_effectValMap[c];
1342 ScTextStream fp(&tmpstr, QIODevice::ReadOnly);
1343 int numVals;
1344 double xval, yval;
1345 FPointArray curve;
1346 curve.resize(0);
1347 fp >> numVals;
1348 for (int i = 0; i < numVals; i++)
1349 {
1350 fp >> s;
1351 xval = ScCLocale::toDoubleC(s);
1352 fp >> s;
1353 yval = ScCLocale::toDoubleC(s);
1354 curve.addPoint(xval, yval);
1355 }
1356 Kdisplay->cDisplay->setCurve(curve);
1357 int lin;
1358 fp >> lin;
1359 if (lin == 1)
1360 Kdisplay->setLinear(true);
1361 else
1362 Kdisplay->setLinear(false);
1363 optionStack->setCurrentIndex(10);
1364 connect( Kdisplay->cDisplay, SIGNAL(modified()), this, SLOT(createPreview()));
1365 }
1366 else
1367 optionStack->setCurrentIndex(0);
1368 currentOptions = c;
1369 }
1370 else
1371 optionStack->setCurrentIndex(0);
1372 disconnect( availableEffects, SIGNAL( itemClicked(QListWidgetItem*) ), this, SLOT( selectAvailEffect(QListWidgetItem*) ) );
1373 availableEffects->clearSelection();
1374 connect( availableEffects, SIGNAL( itemClicked(QListWidgetItem*) ), this, SLOT( selectAvailEffect(QListWidgetItem*) ) );
1375 }
1376
selectAvailEffect(QListWidgetItem * c)1377 void EffectsDialog::selectAvailEffect(QListWidgetItem* c)
1378 {
1379 if (c)
1380 {
1381 if (!(c->flags() & Qt::ItemIsSelectable))
1382 toEffects->setEnabled(false);
1383 else
1384 toEffects->setEnabled(true);
1385 }
1386 fromEffects->setEnabled(false);
1387 effectUp->setEnabled(false);
1388 effectDown->setEnabled(false);
1389 disconnect( usedEffects, SIGNAL( itemActivated(QListWidgetItem*) ), this, SLOT( selectEffect(QListWidgetItem*) ) );
1390 selectEffectHelper();
1391 currentOptions = nullptr;
1392 usedEffects->clearSelection();
1393 optionStack->setCurrentIndex(0);
1394 connect( usedEffects, SIGNAL( itemActivated(QListWidgetItem*) ), this, SLOT( selectEffect(QListWidgetItem*) ) );
1395 }
1396
selectEffectHelper(bool final)1397 void EffectsDialog::selectEffectHelper(bool final)
1398 {
1399 if (currentOptions != nullptr)
1400 {
1401 if (currentOptions->text() == tr("Colorize"))
1402 {
1403 QString efval = colData->currentText();
1404 QString tmp;
1405 tmp.setNum(shade->getValue());
1406 efval += "\n"+tmp;
1407 m_effectValMap[currentOptions] = efval;
1408 }
1409 if (currentOptions->text() == tr("Brightness"))
1410 {
1411 QString tmp;
1412 tmp.setNum(brightnessSlider->value());
1413 m_effectValMap[currentOptions] = tmp;
1414 }
1415 if (currentOptions->text() == tr("Contrast"))
1416 {
1417 QString tmp;
1418 tmp.setNum(contrastSlider->value());
1419 m_effectValMap[currentOptions] = tmp;
1420 }
1421 if (currentOptions->text() == tr("Sharpen"))
1422 {
1423 QString efval;
1424 QString tmp;
1425 tmp.setNum(shRadius->value());
1426 efval += tmp;
1427 tmp.setNum(shValue->value());
1428 efval += " "+tmp;
1429 m_effectValMap[currentOptions] = efval;
1430 }
1431 if (currentOptions->text() == tr("Blur"))
1432 {
1433 QString efval;
1434 QString tmp;
1435 if (!final)
1436 tmp.setNum(blRadius->value());
1437 else
1438 tmp.setNum(blRadius->value()*m_imageScale);
1439 efval += tmp;
1440 tmp.setNum(1.0);
1441 efval += " "+tmp;
1442 m_effectValMap[currentOptions] = efval;
1443 }
1444 if (currentOptions->text() == tr("Posterize"))
1445 {
1446 QString tmp;
1447 tmp.setNum(solarizeSlider->value());
1448 m_effectValMap[currentOptions] = tmp;
1449 }
1450 if (currentOptions->text() == tr("Duotone"))
1451 {
1452 QString efval = colData1->currentText()+"\n";
1453 efval += colData2->currentText()+"\n";
1454 QString tmp;
1455 tmp.setNum(shade1->getValue());
1456 efval += tmp;
1457 tmp.setNum(shade2->getValue());
1458 efval += " "+tmp;
1459 FPointArray Vals = CurveD1->cDisplay->getCurve();
1460 tmp.setNum(Vals.size());
1461 efval += " "+tmp;
1462 for (int i = 0; i < Vals.size(); i++)
1463 {
1464 const FPoint& pv = Vals.point(i);
1465 efval += QString(" %1 %2").arg(pv.x()).arg(pv.y());
1466 }
1467 if (CurveD1->cDisplay->isLinear())
1468 efval += " 1";
1469 else
1470 efval += " 0";
1471 Vals = CurveD2->cDisplay->getCurve();
1472 tmp.setNum(Vals.size());
1473 efval += " "+tmp;
1474 for (int i = 0; i < Vals.size(); i++)
1475 {
1476 const FPoint& pv = Vals.point(i);
1477 efval += QString(" %1 %2").arg(pv.x()).arg(pv.y());
1478 }
1479 if (CurveD2->cDisplay->isLinear())
1480 efval += " 1";
1481 else
1482 efval += " 0";
1483 m_effectValMap[currentOptions] = efval;
1484 }
1485 if (currentOptions->text() == tr("Tritone"))
1486 {
1487 QString efval = "";
1488 efval = colDatat1->currentText()+"\n";
1489 efval += colDatat2->currentText()+"\n";
1490 efval += colDatat3->currentText()+"\n";
1491 QString tmp;
1492 tmp.setNum(shadet1->getValue());
1493 efval += tmp;
1494 tmp.setNum(shadet2->getValue());
1495 efval += " "+tmp;
1496 tmp.setNum(shadet3->getValue());
1497 efval += " "+tmp;
1498 FPointArray Vals = CurveT1->cDisplay->getCurve();
1499 tmp.setNum(Vals.size());
1500 efval += " "+tmp;
1501 for (int p = 0; p < Vals.size(); p++)
1502 {
1503 const FPoint& pv = Vals.point(p);
1504 efval += QString(" %1 %2").arg(pv.x()).arg(pv.y());
1505 }
1506 if (CurveT1->cDisplay->isLinear())
1507 efval += " 1";
1508 else
1509 efval += " 0";
1510 Vals = CurveT2->cDisplay->getCurve();
1511 tmp.setNum(Vals.size());
1512 efval += " "+tmp;
1513 for (int p = 0; p < Vals.size(); p++)
1514 {
1515 const FPoint& pv = Vals.point(p);
1516 efval += QString(" %1 %2").arg(pv.x()).arg(pv.y());
1517 }
1518 if (CurveT2->cDisplay->isLinear())
1519 efval += " 1";
1520 else
1521 efval += " 0";
1522 Vals = CurveT3->cDisplay->getCurve();
1523 tmp.setNum(Vals.size());
1524 efval += " "+tmp;
1525 for (int p = 0; p < Vals.size(); p++)
1526 {
1527 const FPoint& pv = Vals.point(p);
1528 efval += QString(" %1 %2").arg(pv.x()).arg(pv.y());
1529 }
1530 if (CurveT3->cDisplay->isLinear())
1531 efval += " 1";
1532 else
1533 efval += " 0";
1534 m_effectValMap[currentOptions] = efval;
1535 }
1536 if (currentOptions->text() == tr("Quadtone"))
1537 {
1538 QString efval = colDataq1->currentText()+"\n";
1539 efval += colDataq2->currentText()+"\n";
1540 efval += colDataqc3->currentText()+"\n";
1541 efval += colDataq4->currentText()+"\n";
1542 QString tmp;
1543 tmp.setNum(shadeq1->getValue());
1544 efval += tmp;
1545 tmp.setNum(shadeq2->getValue());
1546 efval += " "+tmp;
1547 tmp.setNum(shadeqc3->getValue());
1548 efval += " "+tmp;
1549 tmp.setNum(shadeq4->getValue());
1550 efval += " "+tmp;
1551 FPointArray Vals = CurveQ1->cDisplay->getCurve();
1552 tmp.setNum(Vals.size());
1553 efval += " "+tmp;
1554 for (int i = 0; i < Vals.size(); i++)
1555 {
1556 const FPoint& pv = Vals.point(i);
1557 efval += QString(" %1 %2").arg(pv.x()).arg(pv.y());
1558 }
1559 if (CurveQ1->cDisplay->isLinear())
1560 efval += " 1";
1561 else
1562 efval += " 0";
1563 Vals = CurveQ2->cDisplay->getCurve();
1564 tmp.setNum(Vals.size());
1565 efval += " "+tmp;
1566 for (int i = 0; i < Vals.size(); i++)
1567 {
1568 const FPoint& pv = Vals.point(i);
1569 efval += QString(" %1 %2").arg(pv.x()).arg(pv.y());
1570 }
1571 if (CurveQ2->cDisplay->isLinear())
1572 efval += " 1";
1573 else
1574 efval += " 0";
1575 Vals = CurveQc3->cDisplay->getCurve();
1576 tmp.setNum(Vals.size());
1577 efval += " "+tmp;
1578 for (int i = 0; i < Vals.size(); i++)
1579 {
1580 const FPoint& pv = Vals.point(i);
1581 efval += QString(" %1 %2").arg(pv.x()).arg(pv.y());
1582 }
1583 if (CurveQc3->cDisplay->isLinear())
1584 efval += " 1";
1585 else
1586 efval += " 0";
1587 Vals = CurveQ4->cDisplay->getCurve();
1588 tmp.setNum(Vals.size());
1589 efval += " "+tmp;
1590 for (int i = 0; i < Vals.size(); i++)
1591 {
1592 const FPoint& pv = Vals.point(i);
1593 efval += QString(" %1 %2").arg(pv.x()).arg(pv.y());
1594 }
1595 if (CurveQ4->cDisplay->isLinear())
1596 efval += " 1";
1597 else
1598 efval += " 0";
1599 m_effectValMap[currentOptions] = efval;
1600 }
1601 if (currentOptions->text() == tr("Curves"))
1602 {
1603 QString efval;
1604 FPointArray Vals = Kdisplay->cDisplay->getCurve();
1605 QString tmp;
1606 tmp.setNum(Vals.size());
1607 efval += tmp;
1608 for (int i = 0; i < Vals.size(); i++)
1609 {
1610 const FPoint& pv = Vals.point(i);
1611 efval += QString(" %1 %2").arg(pv.x()).arg(pv.y());
1612 }
1613 if (Kdisplay->cDisplay->isLinear())
1614 efval += " 1";
1615 else
1616 efval += " 0";
1617 m_effectValMap[currentOptions] = efval;
1618 }
1619 }
1620 }
1621