1 /*
2  * Copyright (C) 2018 Damir Porobic <damir.porobic@gmx.com>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License as published by
6  * the Free Software Foundation; either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program 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
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18  */
19 
20 #include "ItemSettingsWidgetConfigurator.h"
21 
22 namespace kImageAnnotator {
23 
ItemSettingsWidgetConfigurator()24 ItemSettingsWidgetConfigurator::ItemSettingsWidgetConfigurator() :
25 	mColorWidget(nullptr),
26 	mTextColorWidget(nullptr),
27 	mWidthWidget(nullptr),
28 	mFillModeWidget(nullptr),
29 	mFirstNumberWidget(nullptr),
30 	mObfuscateFactorWidget(nullptr),
31 	mStickerWidget(nullptr),
32 	mShadowPicker(nullptr),
33 	mFontPicker(nullptr)
34 {
35 	mCurrentTool = Tools::Select;
36 }
37 
setCurrentTool(Tools tool)38 void ItemSettingsWidgetConfigurator::setCurrentTool(Tools tool)
39 {
40 	if (mCurrentTool == tool) {
41 		return;
42 	}
43 
44 	mCurrentTool = tool;
45 	updateWidgets();
46 }
47 
setColorWidget(ColorPicker * widget)48 void ItemSettingsWidgetConfigurator::setColorWidget(ColorPicker *widget)
49 {
50 	mColorWidget = widget;
51 	updateWidgets();
52 }
53 
setTextColorWidget(ColorPicker * widget)54 void ItemSettingsWidgetConfigurator::setTextColorWidget(ColorPicker *widget)
55 {
56 	mTextColorWidget = widget;
57 	updateWidgets();
58 }
59 
setWidthWidget(NumberPicker * widget)60 void ItemSettingsWidgetConfigurator::setWidthWidget(NumberPicker *widget)
61 {
62 	mWidthWidget = widget;
63 	updateWidgets();
64 }
65 
setFillTypeWidget(FillModePicker * widget)66 void ItemSettingsWidgetConfigurator::setFillTypeWidget(FillModePicker *widget)
67 {
68 	mFillModeWidget = widget;
69 	updateWidgets();
70 }
71 
setFirstNumberWidget(NumberPicker * widget)72 void ItemSettingsWidgetConfigurator::setFirstNumberWidget(NumberPicker *widget)
73 {
74 	mFirstNumberWidget = widget;
75 	updateWidgets();
76 }
77 
setObfuscateFactorWidget(NumberPicker * widget)78 void ItemSettingsWidgetConfigurator::setObfuscateFactorWidget(NumberPicker *widget)
79 {
80 	mObfuscateFactorWidget = widget;
81 	updateWidgets();
82 }
83 
setStickerWidget(StickerPicker * widget)84 void ItemSettingsWidgetConfigurator::setStickerWidget(StickerPicker *widget)
85 {
86 	mStickerWidget = widget;
87 	updateWidgets();
88 }
89 
setShadowWidget(BoolPicker * widget)90 void ItemSettingsWidgetConfigurator::setShadowWidget(BoolPicker *widget)
91 {
92 	mShadowPicker = widget;
93 	updateWidgets();
94 }
95 
setFontWidget(FontPicker * widget)96 void ItemSettingsWidgetConfigurator::setFontWidget(FontPicker *widget)
97 {
98 	mFontPicker = widget;
99 	updateWidgets();
100 }
101 
updateWidgets() const102 void ItemSettingsWidgetConfigurator::updateWidgets() const
103 {
104 	updateProperties();
105 	updateVisibility();
106 }
107 
updateProperties() const108 void ItemSettingsWidgetConfigurator::updateProperties() const
109 {
110 	switch (mCurrentTool) {
111 		case Tools::Text:
112 		case Tools::Number:
113 		case Tools::NumberArrow:
114 			setNoFillAndNoBorderVisible(true);
115 			break;
116 		case Tools::MarkerPen:
117 			setWidthRange(1, 100);
118 			break;
119 		default:
120 			setNoFillAndNoBorderVisible(false);
121 			setWidthRange(1, 20);
122 	}
123 }
124 
updateVisibility() const125 void ItemSettingsWidgetConfigurator::updateVisibility() const
126 {
127 	switch (mCurrentTool) {
128 		case Tools::Select:
129 			setColorWidgetVisible(false);
130 			setTextColorWidgetVisible(false);
131 			setWidthWidgetVisible(false);
132 			setFillWidgetVisible(false);
133 			setFirstNumberWidgetVisible(false);
134 			setObfuscateFactorWidgetVisible(false);
135 			setStickerWidgetVisible(false);
136 			setShadowWidgetVisible(false);
137 			setFontWidgetVisible(false);
138 			break;
139 		case Tools::Image:
140 			setColorWidgetVisible(false);
141 			setTextColorWidgetVisible(false);
142 			setWidthWidgetVisible(false);
143 			setFillWidgetVisible(false);
144 			setFirstNumberWidgetVisible(false);
145 			setObfuscateFactorWidgetVisible(false);
146 			setStickerWidgetVisible(false);
147 			setShadowWidgetVisible(true);
148 			setFontWidgetVisible(false);
149 			break;
150 		case Tools::Pen:
151 			setColorWidgetVisible(true);
152 			setTextColorWidgetVisible(false);
153 			setWidthWidgetVisible(true);
154 			setFillWidgetVisible(false);
155 			setFirstNumberWidgetVisible(false);
156 			setObfuscateFactorWidgetVisible(false);
157 			setStickerWidgetVisible(false);
158 			setShadowWidgetVisible(true);
159 			setFontWidgetVisible(false);
160 			break;
161 		case Tools::MarkerPen:
162 			setColorWidgetVisible(true);
163 			setTextColorWidgetVisible(false);
164 			setWidthWidgetVisible(true);
165 			setFillWidgetVisible(false);
166 			setFirstNumberWidgetVisible(false);
167 			setObfuscateFactorWidgetVisible(false);
168 			setStickerWidgetVisible(false);
169 			setShadowWidgetVisible(false);
170 			setFontWidgetVisible(false);
171 			break;
172 		case Tools::MarkerRect:
173 		case Tools::MarkerEllipse:
174 			setColorWidgetVisible(true);
175 			setTextColorWidgetVisible(false);
176 			setWidthWidgetVisible(false);
177 			setFillWidgetVisible(false);
178 			setFirstNumberWidgetVisible(false);
179 			setObfuscateFactorWidgetVisible(false);
180 			setStickerWidgetVisible(false);
181 			setShadowWidgetVisible(false);
182 			setFontWidgetVisible(false);
183 			break;
184 		case Tools::Line:
185 		case Tools::Arrow:
186 		case Tools::DoubleArrow:
187 			setColorWidgetVisible(true);
188 			setTextColorWidgetVisible(false);
189 			setWidthWidgetVisible(true);
190 			setFillWidgetVisible(false);
191 			setFirstNumberWidgetVisible(false);
192 			setObfuscateFactorWidgetVisible(false);
193 			setStickerWidgetVisible(false);
194 			setShadowWidgetVisible(true);
195 			setFontWidgetVisible(false);
196 			break;
197 		case Tools::Ellipse:
198 		case Tools::Rect:
199 			setColorWidgetVisible(true);
200 			setTextColorWidgetVisible(false);
201 			setWidthWidgetVisible(true);
202 			setFillWidgetVisible(true);
203 			setFirstNumberWidgetVisible(false);
204 			setObfuscateFactorWidgetVisible(false);
205 			setStickerWidgetVisible(false);
206 			setShadowWidgetVisible(true);
207 			setFontWidgetVisible(false);
208 			break;
209 		case Tools::Number:
210 			setColorWidgetVisible(true);
211 			setTextColorWidgetVisible(true);
212 			setWidthWidgetVisible(true);
213 			setFillWidgetVisible(true);
214 			setFirstNumberWidgetVisible(true);
215 			setObfuscateFactorWidgetVisible(false);
216 			setStickerWidgetVisible(false);
217 			setShadowWidgetVisible(true);
218 			setFontWidgetVisible(true);
219 			break;
220 		case Tools::NumberPointer:
221 			setColorWidgetVisible(true);
222 			setTextColorWidgetVisible(true);
223 			setWidthWidgetVisible(false);
224 			setFillWidgetVisible(false);
225 			setFirstNumberWidgetVisible(true);
226 			setObfuscateFactorWidgetVisible(false);
227 			setStickerWidgetVisible(false);
228 			setShadowWidgetVisible(true);
229 			setFontWidgetVisible(true);
230 			break;
231 		case Tools::NumberArrow:
232 			setColorWidgetVisible(true);
233 			setTextColorWidgetVisible(true);
234 			setWidthWidgetVisible(true);
235 			setFillWidgetVisible(true);
236 			setFirstNumberWidgetVisible(true);
237 			setObfuscateFactorWidgetVisible(false);
238 			setStickerWidgetVisible(false);
239 			setShadowWidgetVisible(true);
240 			setFontWidgetVisible(true);
241 			break;
242 		case Tools::Text:
243 			setColorWidgetVisible(true);
244 			setTextColorWidgetVisible(true);
245 			setWidthWidgetVisible(true);
246 			setFillWidgetVisible(true);
247 			setFirstNumberWidgetVisible(false);
248 			setObfuscateFactorWidgetVisible(false);
249 			setStickerWidgetVisible(false);
250 			setShadowWidgetVisible(true);
251 			setFontWidgetVisible(true);
252 			break;
253 		case Tools::TextPointer:
254 			setColorWidgetVisible(true);
255 			setTextColorWidgetVisible(true);
256 			setWidthWidgetVisible(false);
257 			setFillWidgetVisible(false);
258 			setFirstNumberWidgetVisible(false);
259 			setObfuscateFactorWidgetVisible(false);
260 			setStickerWidgetVisible(false);
261 			setShadowWidgetVisible(true);
262 			setFontWidgetVisible(true);
263 			break;
264 		case Tools::TextArrow:
265 			setColorWidgetVisible(true);
266 			setTextColorWidgetVisible(true);
267 			setWidthWidgetVisible(true);
268 			setFillWidgetVisible(true);
269 			setFirstNumberWidgetVisible(false);
270 			setObfuscateFactorWidgetVisible(false);
271 			setStickerWidgetVisible(false);
272 			setShadowWidgetVisible(true);
273 			setFontWidgetVisible(true);
274 			break;
275 		case Tools::Blur:
276 		case Tools::Pixelate:
277 			setColorWidgetVisible(false);
278 			setTextColorWidgetVisible(false);
279 			setWidthWidgetVisible(false);
280 			setFillWidgetVisible(false);
281 			setFirstNumberWidgetVisible(false);
282 			setObfuscateFactorWidgetVisible(true);
283 			setStickerWidgetVisible(false);
284 			setShadowWidgetVisible(false);
285 			setFontWidgetVisible(false);
286 			break;
287 		case Tools::Sticker:
288 			setColorWidgetVisible(false);
289 			setTextColorWidgetVisible(false);
290 			setWidthWidgetVisible(false);
291 			setFillWidgetVisible(false);
292 			setFirstNumberWidgetVisible(false);
293 			setObfuscateFactorWidgetVisible(false);
294 			setStickerWidgetVisible(true);
295 			setShadowWidgetVisible(true);
296 			setFontWidgetVisible(false);
297 			break;
298 	case Tools::Duplicate:
299 			setColorWidgetVisible(false);
300 			setTextColorWidgetVisible(false);
301 			setWidthWidgetVisible(false);
302 			setFillWidgetVisible(false);
303 			setFirstNumberWidgetVisible(false);
304 			setObfuscateFactorWidgetVisible(false);
305 			setStickerWidgetVisible(false);
306 			setShadowWidgetVisible(false);
307 			setFontWidgetVisible(false);
308 			break;
309 		default:
310 			qCritical("Unknown tooltype in WidgetConfigurator");
311 	}
312 }
313 
setColorWidgetVisible(bool enabled) const314 void ItemSettingsWidgetConfigurator::setColorWidgetVisible(bool enabled) const
315 {
316 	if (mColorWidget) {
317 		mColorWidget->setVisible(enabled);
318 	}
319 }
320 
setTextColorWidgetVisible(bool enabled) const321 void ItemSettingsWidgetConfigurator::setTextColorWidgetVisible(bool enabled) const
322 {
323 	if (mTextColorWidget) {
324 		mTextColorWidget->setVisible(enabled);
325 	}
326 }
327 
setWidthWidgetVisible(bool enabled) const328 void ItemSettingsWidgetConfigurator::setWidthWidgetVisible(bool enabled) const
329 {
330 	if (mWidthWidget) {
331 		mWidthWidget->setVisible(enabled);
332 	}
333 }
334 
setFillWidgetVisible(bool enabled) const335 void ItemSettingsWidgetConfigurator::setFillWidgetVisible(bool enabled) const
336 {
337 	if (mFillModeWidget) {
338 		mFillModeWidget->setVisible(enabled);
339 	}
340 }
341 
setFirstNumberWidgetVisible(bool enabled) const342 void ItemSettingsWidgetConfigurator::setFirstNumberWidgetVisible(bool enabled) const
343 {
344 	if (mFirstNumberWidget) {
345 		mFirstNumberWidget->setVisible(enabled);
346 	}
347 }
348 
setNoFillAndNoBorderVisible(bool enabled) const349 void ItemSettingsWidgetConfigurator::setNoFillAndNoBorderVisible(bool enabled) const
350 {
351 	if (mFillModeWidget) {
352 		if (enabled) {
353 			mFillModeWidget->addNoFillAndNoBorderToList();
354 		} else {
355 			mFillModeWidget->removeNoFillAndNoBorderToList();
356 		}
357 	}
358 }
359 
setObfuscateFactorWidgetVisible(bool enabled) const360 void ItemSettingsWidgetConfigurator::setObfuscateFactorWidgetVisible(bool enabled) const
361 {
362 	if (mObfuscateFactorWidget) {
363 		mObfuscateFactorWidget->setVisible(enabled);
364 	}
365 }
366 
setStickerWidgetVisible(bool enabled) const367 void ItemSettingsWidgetConfigurator::setStickerWidgetVisible(bool enabled) const
368 {
369 	if (mStickerWidget) {
370 		mStickerWidget->setVisible(enabled);
371 	}
372 }
373 
setShadowWidgetVisible(bool enabled) const374 void ItemSettingsWidgetConfigurator::setShadowWidgetVisible(bool enabled) const
375 {
376 	if (mShadowPicker) {
377 		mShadowPicker->setVisible(enabled);
378 	}
379 }
380 
setFontWidgetVisible(bool enabled) const381 void ItemSettingsWidgetConfigurator::setFontWidgetVisible(bool enabled) const
382 {
383 	if (mFontPicker) {
384 		mFontPicker->setVisible(enabled);
385 	}
386 }
387 
setWidthRange(int min,int max) const388 void ItemSettingsWidgetConfigurator::setWidthRange(int min, int max) const
389 {
390 	if (mWidthWidget) {
391 		mWidthWidget->setRange(min, max);
392 	}
393 }
394 
395 } // namespace kImageAnnotator
396