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 
8 #include "ui/prefs_itemtools.h"
9 #include "ui/arrowchooser.h"
10 #include "ui/linkbutton.h"
11 #include "prefsstructs.h"
12 #include "scrspinbox.h"
13 #include "scribusdoc.h"
14 #include "units.h"
15 #include "commonstrings.h"
16 #include "prefsmanager.h"
17 #include "sampleitem.h"
18 
19 
Prefs_ItemTools(QWidget * parent,ScribusDoc * doc)20 Prefs_ItemTools::Prefs_ItemTools(QWidget* parent, ScribusDoc* doc)
21 	: Prefs_Pane(parent),
22 	m_doc(nullptr),
23 	showFontPreview(false)
24 {
25 	setupUi(this);
26 
27 	scrollArea->viewport()->setAutoFillBackground(false);
28 	scrollArea->widget()->setAutoFillBackground(false);
29 	scrollArea_2->viewport()->setAutoFillBackground(false);
30 	scrollArea_2->widget()->setAutoFillBackground(false);
31 
32 	languageChange();
33 
34 	m_caption = tr("Item Tools");
35 	m_icon = "tools_16.png";
36 
37 	lineEndArrowComboBox->setArrowDirection(ArrowDirection::EndArrow);
38 	shapeLineWidthSpinBox->setNewUnit(0);
39 	shapeLineWidthSpinBox->setMaximum(36);
40 	shapeLineWidthSpinBox->setDecimals(1);
41 	lineWidthSpinBox->setNewUnit(0);
42 	lineWidthSpinBox->setMaximum(36);
43 	lineWidthSpinBox->setDecimals(1);
44 	calPenLineWidthSpinBox->setNewUnit(0);
45 	calPenLineWidthSpinBox->setMaximum(36);
46 	calPenLineWidthSpinBox->setDecimals(1);
47 	calPenWidthSpinBox->setNewUnit(0);
48 	calPenWidthSpinBox->setMaximum(100);
49 	calPenWidthSpinBox->setDecimals(1);
50 	calPenAngleSpinBox->setNewUnit(6);
51 	calPenAngleSpinBox->setMaximum(180);
52 	calPenAngleSpinBox->setMinimum(-180);
53 	calPenAngleSpinBox->setDecimals(0);
54 	shapeLineWidthSpinBox->setSpecialValueText( tr("Hairline"));
55 	lineWidthSpinBox->setSpecialValueText( tr("Hairline"));
56 	calPenLineWidthSpinBox->setSpecialValueText( tr("Hairline"));
57 	textSizeSpinBox->setNewUnit(0);
58 	textSizeSpinBox->setMinimum(0.5);
59 	textSizeSpinBox->setMaximum(2048);
60 }
61 
62 Prefs_ItemTools::~Prefs_ItemTools() = default;
63 
64 
languageChange()65 void Prefs_ItemTools::languageChange()
66 {
67 	textPreviewWidget->setText( tr( "Woven silk pyjamas exchanged for blue quartz" ));
68 	scalingLockToolButton->setToolTip( tr( "Keep horizontal and vertical scaling the same" ) );
69 }
70 
unitChange(int newIndex)71 void Prefs_ItemTools::unitChange(int newIndex)
72 {
73 	textColumnGapSpinBox->setNewUnit(newIndex);
74 	textTabWidthSpinBox->setNewUnit(newIndex);
75 	topTextDistanceSpinBox->setNewUnit(newIndex);
76 	bottomTextDistanceSpinBox->setNewUnit(newIndex);
77 	leftTextDistanceSpinBox->setNewUnit(newIndex);
78 	rightTextDistanceSpinBox->setNewUnit(newIndex);
79 }
80 
restoreDefaults(struct ApplicationPrefs * prefsData)81 void Prefs_ItemTools::restoreDefaults(struct ApplicationPrefs *prefsData)
82 {
83 	enableSignals(false);
84 	int docUnitIndex = prefsData->docSetupPrefs.docUnitIndex;
85 	double unitRatio = unitGetRatioFromIndex(docUnitIndex);
86 	unitChange(docUnitIndex);
87 
88 	PrefsManager& prefsManager=PrefsManager::instance();
89 	ColorList* colorList = (m_doc != nullptr) ? (&m_doc->PageColors) : prefsManager.colorSetPtr();
90 
91 	//Text Tool
92 	for (int i=0; i<textFontComboBox->count(); ++i)
93 	{
94 		if (textFontComboBox->itemText(i) == prefsData->itemToolPrefs.textFont)
95 		{
96 			textFontComboBox->setCurrentIndex(i);
97 			break;
98 		}
99 	}
100 	textSizeSpinBox->setValue(prefsData->itemToolPrefs.textSize / 10);
101 	textColorComboBox->initColorList(colorList, m_doc, prefsData->itemToolPrefs.textColor);
102 	textColorShadingSpinBox->setValue(prefsData->itemToolPrefs.textShade);
103 	textStrokeColorComboBox->initColorList(colorList, m_doc, prefsData->itemToolPrefs.textStrokeColor);
104 	textStrokeShadingSpinBox->setValue(prefsData->itemToolPrefs.textStrokeShade);
105 	textFrameFillColorComboBox->initColorList(colorList, m_doc, prefsData->itemToolPrefs.textFillColor);
106 	textFrameFillShadingSpinBox->setValue(prefsData->itemToolPrefs.textFillColorShade);
107 	textFrameLineColorComboBox->initColorList(colorList, m_doc, prefsData->itemToolPrefs.textLineColor);
108 	textFrameLineShadingSpinBox->setValue(prefsData->itemToolPrefs.textLineColorShade);
109 	textTabFillCharComboBox->clear();
110 	textTabFillCharComboBox->addItem( tr("None", "tab fill" ));
111 	textTabFillCharComboBox->addItem( tr("Dot"));
112 	textTabFillCharComboBox->addItem( tr("Hyphen"));
113 	textTabFillCharComboBox->addItem( tr("Underscore"));
114 	textTabFillCharComboBox->addItem( tr("Custom"));
115 	if (prefsData->itemToolPrefs.textTabFillChar.isEmpty())
116 	{
117 		textTabFillCharComboBox->setCurrentIndex(0);
118 	}
119 	else if (prefsData->itemToolPrefs.textTabFillChar == ".")
120 	{
121 		textTabFillCharComboBox->setCurrentIndex(1);
122 	}
123 	else if (prefsData->itemToolPrefs.textTabFillChar == "-")
124 	{
125 		textTabFillCharComboBox->setCurrentIndex(2);
126 	}
127 	else if (prefsData->itemToolPrefs.textTabFillChar == "_")
128 	{
129 		textTabFillCharComboBox->setCurrentIndex(3);
130 	}
131 	else
132 	{
133 		textTabFillCharComboBox->setCurrentIndex(4);
134 		textTabFillCharComboBox->setEditable(true);
135 		textTabFillCharComboBox->setItemText(textTabFillCharComboBox->currentIndex(), CommonStrings::trCustomTabFill + prefsData->itemToolPrefs.textTabFillChar);
136 	}
137 	textTabWidthSpinBox->setValue(prefsData->itemToolPrefs.textTabWidth * unitRatio);
138 	textColumnsSpinBox->setValue(prefsData->itemToolPrefs.textColumns);
139 	textColumnGapSpinBox->setValue(prefsData->itemToolPrefs.textColumnGap * unitRatio);
140 	topTextDistanceSpinBox->setValue(prefsData->itemToolPrefs.textDistances.top() * unitRatio);
141 	bottomTextDistanceSpinBox->setValue(prefsData->itemToolPrefs.textDistances.bottom() * unitRatio);
142 	leftTextDistanceSpinBox->setValue(prefsData->itemToolPrefs.textDistances.left() * unitRatio);
143 	rightTextDistanceSpinBox->setValue(prefsData->itemToolPrefs.textDistances.right() * unitRatio);
144 	firstLineOffsetComboBox->setCurrentIndex((int) prefsData->itemToolPrefs.firstLineOffset);
145 
146 	//Image Tool
147 	imageFreeScalingRadioButton->setChecked( prefsData->itemToolPrefs.imageScaleType );
148 	imageFrameScalingRadioButton->setChecked( !prefsData->itemToolPrefs.imageScaleType );
149 	imageHorizontalScalingSpinBox->setValue(qRound(prefsData->itemToolPrefs.imageScaleX * 100));
150 	imageVerticalScalingSpinBox->setValue(qRound(prefsData->itemToolPrefs.imageScaleY * 100));
151 	imageKeepAspectRatioCheckBox->setChecked(prefsData->itemToolPrefs.imageAspectRatio);
152 	scalingLockToolButton->setChecked(prefsData->itemToolPrefs.imageAspectRatio);
153 	imageFrameFillColorComboBox->initColorList(colorList, m_doc, prefsData->itemToolPrefs.imageFillColor);
154 	imageFrameFillShadingSpinBox->setValue(prefsData->itemToolPrefs.imageFillColorShade );
155 	imageFrameLineColorComboBox->initColorList(colorList, m_doc, prefsData->itemToolPrefs.imageStrokeColor);
156 	imageFrameLineShadingSpinBox->setValue(prefsData->itemToolPrefs.imageStrokeColorShade );
157 	imageUseEmbeddedClippingPathCheckBox->setChecked(prefsData->itemToolPrefs.imageUseEmbeddedPath);
158 	switch (prefsData->itemToolPrefs.imageLowResType)
159 	{
160 		case 0:
161 			onscreenResolutionFullRadioButton->setChecked(true);
162 			break;
163 		case 1:
164 			onscreenResolutionNormalRadioButton->setChecked(true);
165 			break;
166 		case 2:
167 			onscreenResolutionLowRadioButton->setChecked(true);
168 			break;
169 	}
170 
171 	//Shape Tool
172 	shapeFrameLineColorComboBox->initColorList(colorList, m_doc, prefsData->itemToolPrefs.shapeLineColor);
173 	shapeFrameLineShadingSpinBox->setValue(prefsData->itemToolPrefs.shapeLineColorShade);
174 	shapeFrameFillColorComboBox->initColorList(colorList, m_doc, prefsData->itemToolPrefs.shapeFillColor);
175 	shapeFrameFillShadingSpinBox->setValue(prefsData->itemToolPrefs.shapeFillColorShade);
176 	shapeFrameLineStyleComboBox->setCurrentIndex(static_cast<int>(prefsData->itemToolPrefs.shapeLineStyle) - 1);
177 	shapeLineWidthSpinBox->setValue(prefsData->itemToolPrefs.shapeLineWidth);
178 
179 	//Polygon Tool
180 	polygonWidget->restoreDefaults(&prefsData->itemToolPrefs);
181 
182 	//Line Tool
183 	lineFillColorComboBox->initColorList(colorList, m_doc, prefsData->itemToolPrefs.lineColor);
184 
185 	lineFillColorShadingSpinBox->setValue(prefsData->itemToolPrefs.lineColorShade);
186 	lineStyleComboBox->setCurrentIndex(static_cast<int>(prefsData->itemToolPrefs.lineStyle) - 1);
187 	if (m_doc != nullptr)
188 	{
189 		lineStartArrowComboBox->rebuildList(&m_doc->arrowStyles());
190 		lineEndArrowComboBox->rebuildList(&m_doc->arrowStyles());
191 	}
192 	else
193 	{
194 		lineStartArrowComboBox->rebuildList(&prefsData->arrowStyles);
195 		lineEndArrowComboBox->rebuildList(&prefsData->arrowStyles);
196 	}
197 	lineStartArrowComboBox->setCurrentIndex(prefsData->itemToolPrefs.lineStartArrow);
198 	lineEndArrowComboBox->setCurrentIndex(prefsData->itemToolPrefs.lineEndArrow);
199 	lineWidthSpinBox->setValue(prefsData->itemToolPrefs.lineWidth);
200 	//
201 	//Calligraphic Pen Tool
202 	calPenFillColorComboBox->initColorList(colorList, m_doc, prefsData->itemToolPrefs.calligraphicPenFillColor);
203 	calPenFillShadingSpinBox->setValue(prefsData->itemToolPrefs.calligraphicPenFillColorShade);
204 	calPenColorComboBox->initColorList(colorList, m_doc, prefsData->itemToolPrefs.calligraphicPenLineColor);
205 	calPenLineShadingSpinBox->setValue(prefsData->itemToolPrefs.calligraphicPenLineColorShade);
206 	calPenStyleComboBox->setCurrentIndex(static_cast<int>(prefsData->itemToolPrefs.calligraphicPenStyle) - 1);
207 	calPenLineWidthSpinBox->setValue(prefsData->itemToolPrefs.calligraphicPenLineWidth);
208 	calPenAngleSpinBox->setValue(prefsData->itemToolPrefs.calligraphicPenAngle);
209 	calPenWidthSpinBox->setValue(prefsData->itemToolPrefs.calligraphicPenWidth);
210 
211 	// Arc Tool
212 	arcDisplay->restoreDefaults(&prefsData->itemToolPrefs);
213 	// Spiral Tool
214 	spiralDisplay->restoreDefaults(&prefsData->itemToolPrefs);
215 	imageScalingTypeChange();
216 	enableSignals(true);
217 }
218 
saveGuiToPrefs(struct ApplicationPrefs * prefsData) const219 void Prefs_ItemTools::saveGuiToPrefs(struct ApplicationPrefs *prefsData) const
220 {
221 
222 	//Text Tool
223 	prefsData->itemToolPrefs.textFont = textFontComboBox->currentText();
224 	prefsData->itemToolPrefs.textSize = textSizeSpinBox->value() * 10;
225 	prefsData->itemToolPrefs.textFillColor = textFrameFillColorComboBox->currentText();
226 	if (prefsData->itemToolPrefs.textFillColor == CommonStrings::tr_NoneColor)
227 		prefsData->itemToolPrefs.textFillColor = CommonStrings::None;
228 	prefsData->itemToolPrefs.textLineColor = textFrameLineColorComboBox->currentText();
229 	if (prefsData->itemToolPrefs.textLineColor == CommonStrings::tr_NoneColor)
230 		prefsData->itemToolPrefs.textLineColor = CommonStrings::None;
231 	prefsData->itemToolPrefs.textFillColorShade = textFrameFillShadingSpinBox->value();
232 	prefsData->itemToolPrefs.textLineColorShade = textFrameLineShadingSpinBox->value();
233 	prefsData->itemToolPrefs.textShade = textColorShadingSpinBox->value();
234 	prefsData->itemToolPrefs.textStrokeShade = textStrokeShadingSpinBox->value();
235 	prefsData->itemToolPrefs.textColor = textColorComboBox->currentText();
236 	if (prefsData->itemToolPrefs.textColor == CommonStrings::tr_NoneColor)
237 		prefsData->itemToolPrefs.textColor = CommonStrings::None;
238 	prefsData->itemToolPrefs.textStrokeColor = textStrokeColorComboBox->currentText();
239 	if (prefsData->itemToolPrefs.textStrokeColor == CommonStrings::tr_NoneColor)
240 		prefsData->itemToolPrefs.textStrokeColor = CommonStrings::None;
241 	prefsData->itemToolPrefs.textColumns = textColumnsSpinBox->value();
242 	int docUnitIndex = prefsData->docSetupPrefs.docUnitIndex;
243 	double unitRatio = unitGetRatioFromIndex(docUnitIndex);
244 	prefsData->itemToolPrefs.textColumnGap = textColumnGapSpinBox->value() / unitRatio;
245 	prefsData->itemToolPrefs.textTabWidth = textTabWidthSpinBox->value() / unitRatio;
246 	prefsData->itemToolPrefs.firstLineOffset = (FirstLineOffsetPolicy) firstLineOffsetComboBox->currentIndex();
247 
248 	switch (textTabFillCharComboBox->currentIndex())
249 	{
250 		case 0:
251 			prefsData->itemToolPrefs.textTabFillChar = "";
252 			break;
253 		case 1:
254 			prefsData->itemToolPrefs.textTabFillChar = ".";
255 			break;
256 		case 2:
257 			prefsData->itemToolPrefs.textTabFillChar = "-";
258 			break;
259 		case 3:
260 			prefsData->itemToolPrefs.textTabFillChar = "_";
261 			break;
262 		case 4:
263 			prefsData->itemToolPrefs.textTabFillChar = textTabFillCharComboBox->currentText().right(1);
264 			break;
265 	}
266 	prefsData->itemToolPrefs.textDistances.setTop(topTextDistanceSpinBox->value() / unitRatio);
267 	prefsData->itemToolPrefs.textDistances.setBottom(bottomTextDistanceSpinBox->value() / unitRatio);
268 	prefsData->itemToolPrefs.textDistances.setLeft(leftTextDistanceSpinBox->value() / unitRatio);
269 	prefsData->itemToolPrefs.textDistances.setRight(rightTextDistanceSpinBox->value() / unitRatio);
270 	prefsData->itemToolPrefs.imageFillColor = imageFrameFillColorComboBox->currentText();
271 	if (prefsData->itemToolPrefs.imageFillColor == CommonStrings::tr_NoneColor)
272 		prefsData->itemToolPrefs.imageFillColor = CommonStrings::None;
273 	prefsData->itemToolPrefs.imageFillColorShade = imageFrameFillShadingSpinBox->value();
274 	prefsData->itemToolPrefs.imageStrokeColor = imageFrameLineColorComboBox->currentText();
275 	if (prefsData->itemToolPrefs.imageStrokeColor == CommonStrings::tr_NoneColor)
276 		prefsData->itemToolPrefs.imageStrokeColor = CommonStrings::None;
277 	prefsData->itemToolPrefs.imageStrokeColorShade = imageFrameFillShadingSpinBox->value();
278 	prefsData->itemToolPrefs.imageScaleX = static_cast<double>(imageHorizontalScalingSpinBox->value()) / 100.0;
279 	prefsData->itemToolPrefs.imageScaleY = static_cast<double>(imageVerticalScalingSpinBox->value()) / 100.0;
280 	prefsData->itemToolPrefs.imageScaleType = imageFreeScalingRadioButton->isChecked();
281 	prefsData->itemToolPrefs.imageAspectRatio = imageKeepAspectRatioCheckBox->isChecked();
282 	prefsData->itemToolPrefs.imageUseEmbeddedPath = imageUseEmbeddedClippingPathCheckBox->isChecked();
283 	int haRes = 0;
284 	if (onscreenResolutionFullRadioButton->isChecked())
285 		haRes = 0;
286 	if (onscreenResolutionNormalRadioButton->isChecked())
287 		haRes = 1;
288 	if (onscreenResolutionLowRadioButton->isChecked())
289 		haRes = 2;
290 	prefsData->itemToolPrefs.imageLowResType = haRes;
291 
292 
293 	//Shape tool
294 	prefsData->itemToolPrefs.shapeLineColor = shapeFrameLineColorComboBox->currentText();
295 	if (prefsData->itemToolPrefs.shapeLineColor == CommonStrings::tr_NoneColor)
296 		prefsData->itemToolPrefs.shapeLineColor = CommonStrings::None;
297 	prefsData->itemToolPrefs.shapeFillColor = shapeFrameFillColorComboBox->currentText();
298 	if (prefsData->itemToolPrefs.shapeFillColor == CommonStrings::tr_NoneColor)
299 		prefsData->itemToolPrefs.shapeFillColor = CommonStrings::None;
300 	prefsData->itemToolPrefs.shapeFillColorShade = shapeFrameFillShadingSpinBox->value();
301 	prefsData->itemToolPrefs.shapeLineColorShade = shapeFrameLineShadingSpinBox->value();
302 	prefsData->itemToolPrefs.shapeLineStyle = static_cast<Qt::PenStyle>(shapeFrameLineStyleComboBox->currentIndex()) + 1;
303 	prefsData->itemToolPrefs.shapeLineWidth = shapeLineWidthSpinBox->value();
304 
305 
306 
307 	//Polygon Tool
308 	polygonWidget->saveGuiToPrefs(&prefsData->itemToolPrefs);
309 
310 	//Line Tool
311 	prefsData->itemToolPrefs.lineColor = lineFillColorComboBox->currentText();
312 	if (prefsData->itemToolPrefs.lineColor == CommonStrings::tr_NoneColor)
313 		prefsData->itemToolPrefs.lineColor = CommonStrings::None;
314 	prefsData->itemToolPrefs.lineColorShade = lineFillColorShadingSpinBox->value();
315 	prefsData->itemToolPrefs.lineStyle = static_cast<Qt::PenStyle>(lineStyleComboBox->currentIndex()) + 1;
316 	prefsData->itemToolPrefs.lineWidth = lineWidthSpinBox->value();
317 	prefsData->itemToolPrefs.lineStartArrow = lineStartArrowComboBox->currentIndex();
318 	prefsData->itemToolPrefs.lineEndArrow = lineEndArrowComboBox->currentIndex();
319 	//Calligraphic Pen Tool
320 	prefsData->itemToolPrefs.calligraphicPenFillColor = calPenFillColorComboBox->currentText();
321 	if (prefsData->itemToolPrefs.calligraphicPenFillColor == CommonStrings::tr_NoneColor)
322 		prefsData->itemToolPrefs.calligraphicPenFillColor = CommonStrings::None;
323 	prefsData->itemToolPrefs.calligraphicPenLineColor = calPenColorComboBox->currentText();
324 	if (prefsData->itemToolPrefs.calligraphicPenLineColor == CommonStrings::tr_NoneColor)
325 		prefsData->itemToolPrefs.calligraphicPenLineColor = CommonStrings::None;
326 	prefsData->itemToolPrefs.calligraphicPenFillColorShade = calPenFillShadingSpinBox->value();
327 	prefsData->itemToolPrefs.calligraphicPenLineColorShade = calPenLineShadingSpinBox->value();
328 	prefsData->itemToolPrefs.calligraphicPenStyle = static_cast<Qt::PenStyle>(calPenStyleComboBox->currentIndex()) + 1;
329 	prefsData->itemToolPrefs.calligraphicPenLineWidth = calPenLineWidthSpinBox->value();
330 	prefsData->itemToolPrefs.calligraphicPenAngle = calPenAngleSpinBox->value();
331 	prefsData->itemToolPrefs.calligraphicPenWidth = calPenWidthSpinBox->value();
332 
333 	//Arc Tool
334 	arcDisplay->saveGuiToPrefs(&prefsData->itemToolPrefs);
335 	//Spiral Tool
336 	spiralDisplay->saveGuiToPrefs(&prefsData->itemToolPrefs);
337 }
338 
enableSignals(bool on)339 void Prefs_ItemTools::enableSignals(bool on)
340 {
341 	if (on)
342 	{
343 		connect(textFontComboBox, SIGNAL(activated(int)), this, SLOT(updateFontPreview()));
344 		connect(textSizeSpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateFontPreview()));
345 		connect(textColorComboBox, SIGNAL(activated(int)), this, SLOT(updateFontPreview()));
346 		connect(textFrameFillColorComboBox, SIGNAL(activated(int)), this, SLOT(updateFontPreview()));
347 		connect(textFrameFillShadingSpinBox, SIGNAL(valueChanged(int)), this, SLOT(updateFontPreview()));
348 		connect(textColorShadingSpinBox, SIGNAL(valueChanged(int)), this, SLOT(updateFontPreview()));
349 		connect(scalingLockToolButton, SIGNAL(clicked()), this, SLOT(toggleImagesScalingChain()));
350 		connect(imageHorizontalScalingSpinBox, SIGNAL(valueChanged(int)), this, SLOT(imageHorizontalScalingChange()));
351 		connect(imageKeepAspectRatioCheckBox, SIGNAL(toggled(bool)), scalingLockToolButton, SLOT(setChecked(bool)));
352 		connect(imageVerticalScalingSpinBox, SIGNAL(valueChanged(int)), this, SLOT(imageVerticalScalingChange()));
353 		connect(imageFreeScalingRadioButton, SIGNAL(clicked(bool)), this, SLOT(imageScalingTypeChange()));
354 		connect(imageFrameScalingRadioButton, SIGNAL(clicked(bool)), this, SLOT(imageScalingTypeChange()));
355 	}
356 	else
357 	{
358 		disconnect(textFontComboBox, SIGNAL(activated(int)), this, SLOT(updateFontPreview()));
359 		disconnect(textSizeSpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateFontPreview()));
360 		disconnect(textColorComboBox, SIGNAL(activated(int)), this, SLOT(updateFontPreview()));
361 		disconnect(textFrameFillColorComboBox, SIGNAL(activated(int)), this, SLOT(updateFontPreview()));
362 		disconnect(textFrameFillShadingSpinBox, SIGNAL(valueChanged(int)), this, SLOT(updateFontPreview()));
363 		disconnect(textColorShadingSpinBox, SIGNAL(valueChanged(int)), this, SLOT(updateFontPreview()));
364 		disconnect(scalingLockToolButton, SIGNAL(clicked()), this, SLOT(toggleImagesScalingChain()));
365 		disconnect(imageHorizontalScalingSpinBox, SIGNAL(valueChanged(int)), this, SLOT(imageHorizontalScalingChange()));
366 		disconnect(imageVerticalScalingSpinBox, SIGNAL(valueChanged(int)), this, SLOT(imageVerticalScalingChange()));
367 	}
368 }
369 
enableFontPreview(bool showPreview)370 void Prefs_ItemTools::enableFontPreview(bool showPreview)
371 {
372 	showFontPreview = showPreview;
373 	updateFontPreview();
374 }
375 
updateFontPreview()376 void Prefs_ItemTools::updateFontPreview()
377 {
378 	if (!showFontPreview)
379 		return;
380 
381 	SampleItem si;
382 	si.setDevicePixelRatio(devicePixelRatioF());
383 	si.setText( tr("Woven silk pyjamas exchanged for blue quartz"));
384 	if (textFrameFillColorComboBox->currentText() != CommonStrings::tr_NoneColor)
385 	{
386 		if (m_doc != nullptr)
387 		{
388 			si.setBgColor(m_doc->PageColors[textFrameFillColorComboBox->currentText()].getRawRGBColor());
389 		}
390 		else
391 		{
392 			PrefsManager& prefsManager = PrefsManager::instance();
393 			ColorList* colorList = prefsManager.colorSetPtr();
394 			si.setBgColor((*colorList)[textFrameFillColorComboBox->currentText()].getRawRGBColor());
395 		}
396 		si.setBgShade(textFrameFillShadingSpinBox->value());
397 	}
398 	else
399 		si.setBgColor(palette().color(QPalette::Window));
400 
401 	if (textColorComboBox->currentText() != CommonStrings::tr_NoneColor)
402 	{
403 		if (m_doc != nullptr)
404 		{
405 			si.setTxColor(m_doc->PageColors[textColorComboBox->currentText()].getRawRGBColor());
406 		}
407 		else
408 		{
409 			PrefsManager& prefsManager = PrefsManager::instance();
410 			ColorList* colorList = prefsManager.colorSetPtr();
411 			si.setTxColor((*colorList)[textColorComboBox->currentText()].getRawRGBColor());
412 		}
413 		si.setTxShade(textColorShadingSpinBox->value());
414 	}
415 	else
416 		si.setTxColor(palette().color(QPalette::Window));
417 	si.setFont(textFontComboBox->currentText());
418 	si.setFontSize(textSizeSpinBox->value() * 10, true);
419 	textPreviewWidget->setPixmap(si.getSample(textPreviewWidget->width(), textPreviewWidget->height()));
420 }
421 
toggleImagesScalingChain()422 void Prefs_ItemTools::toggleImagesScalingChain()
423 {
424 	imageHorizontalScalingChange();
425 	imageKeepAspectRatioCheckBox->setChecked(scalingLockToolButton->isChecked());
426 }
427 
imageHorizontalScalingChange()428 void Prefs_ItemTools::imageHorizontalScalingChange()
429 {
430 	if (scalingLockToolButton->isChecked())
431 		imageVerticalScalingSpinBox->setValue(imageHorizontalScalingSpinBox->value());
432 }
433 
imageVerticalScalingChange()434 void Prefs_ItemTools::imageVerticalScalingChange()
435 {
436 	if (scalingLockToolButton->isChecked())
437 		imageHorizontalScalingSpinBox->setValue(imageVerticalScalingSpinBox->value());
438 }
439 
imageScalingTypeChange()440 void Prefs_ItemTools::imageScalingTypeChange()
441 {
442 	bool b=imageFreeScalingRadioButton->isChecked();
443 	imageKeepAspectRatioCheckBox->setEnabled(!b);
444 	imageHorizontalScalingSpinBox->setEnabled(b);
445 	imageVerticalScalingSpinBox->setEnabled(b);
446 	scalingLockToolButton->setEnabled(b);
447 }
448 
449 
450