Subversion Repositories Scribus

Rev

Rev 24291 | Rev 24749 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
24317 jghali 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 <QApplication>
9
#include <QColor>
10
#include <QColorDialog>
11
#include <QDesktopWidget>
12
#include <QPainter>
13
 
14
#include "iconmanager.h"
15
#include "prefs_display.h"
16
#include "prefsstructs.h"
17
#include "scribuscore.h"
18
#include "scribusdoc.h"
19
#include "units.h"
20
 
24291 jghali 21
Prefs_Display::Prefs_Display(QWidget* parent, ScribusDoc* doc) : Prefs_Pane(parent), m_doc(doc)
22
{
23
        setupUi(this);
24
        scrollArea->viewport()->setAutoFillBackground(false);
25
        scrollArea->widget()->setAutoFillBackground(false);
26
 
27
        languageChange();
28
 
29
        m_caption = tr("Display");
24317 jghali 30
        m_icon = "16/video-display.png";
31
 
32
        buttonRestoreDPI->setIcon(IconManager::instance().loadIcon("screen.png"));
33
 
34
        connect(pageFillColorButton, SIGNAL(clicked()), this, SLOT(changePaperColor()));
35
 
36
        if (m_doc == nullptr && !ScCore->primaryMainWindow()->HaveDoc)
37
        {
38
                connect(scratchSpaceColorButton, SIGNAL(clicked()), this, SLOT(changeScratchColor()));
39
                connect(frameSelectedColorButton, SIGNAL(clicked()), this, SLOT(changeFrameColor()));
40
                connect(frameColorButton, SIGNAL(clicked()), this, SLOT(changeNormFrameColor()));
41
                connect(frameGroupedColorButton, SIGNAL(clicked()), this, SLOT(changeGroupFrameColor()));
42
                connect(frameLinkedColorButton, SIGNAL(clicked()), this, SLOT(changeChainFrameColor()));
43
                connect(frameLockedColorButton, SIGNAL(clicked()), this, SLOT(changeLockFrameColor()));
44
                connect(frameAnnotationColorButton, SIGNAL(clicked()), this, SLOT(changeAnnotFrameColor()));
45
                connect(selectedPageBorderButton, SIGNAL(clicked()), this, SLOT(changePageBorderColor()));
46
                connect(textControlCharsButton, SIGNAL(clicked()), this, SLOT(changeControlCharsColor()));
47
                connect(buttonRestoreDPI, SIGNAL(clicked()), this, SLOT(restoreDisScale()));
48
                connect(adjustDisplaySlider, SIGNAL(valueChanged(int)), this, SLOT(setDisScale()));
49
                connect(rulerUnitComboBox, SIGNAL(activated(int)), this, SLOT(drawRuler()));
50
        }
51
        else
52
        {
53
                scratchSpaceColorButton->setEnabled(false);
54
                frameSelectedColorButton->setEnabled(false);
55
                frameColorButton->setEnabled(false);
56
                frameGroupedColorButton->setEnabled(false);
57
                frameLinkedColorButton->setEnabled(false);
58
                frameLockedColorButton->setEnabled(false);
59
                frameAnnotationColorButton->setEnabled(false);
60
                selectedPageBorderButton->setEnabled(false);
61
                textControlCharsButton->setEnabled(false);
62
                buttonRestoreDPI->setEnabled(false);
63
                adjustDisplaySlider->setEnabled(false);
64
                rulerUnitComboBox->setEnabled(false);
65
                showPageShadowCheckBox->setEnabled(false);
66
                showVerifierWarningsOnCanvasCheckBox->setEnabled(false);
67
                tabWidget->setTabEnabled(2, false);
68
        }
69
}
70
 
71
Prefs_Display::~Prefs_Display()
72
{
73
}
74
 
75
void Prefs_Display::languageChange()
76
{
77
        pageFillColorButton->setToolTip( "<qt>" + tr( "Color for paper (onscreen)" ) + "</qt>");
78
        showUnprintableAreaInMarginColorCheckBox->setToolTip( "<qt>" + tr( "Mask the area outside the margins in the margin color" ) + "</qt>" );
79
        showTextChainsCheckBox->setToolTip( "<qt>" + tr("Enable or disable the display of linked frames") + "</qt>");
80
        showControlCharsCheckBox->setToolTip( "<qt>" + tr("Display non-printing characters such as paragraph markers in text frames") + "</qt>");
81
        showFramesCheckBox->setToolTip( "<qt>" + tr("Turns the display of frames on or off") + "</qt>");
82
        showLayerIndicatorsCheckBox->setToolTip( "<qt>" + tr("Turns the display of layer indicators on or off") + "</qt>");
83
        showImagesCheckBox->setToolTip( "<qt>" + tr("Turns the display of images on or off") + "</qt>");
84
        showPageShadowCheckBox->setToolTip( "<qt>" + tr("Turns the page shadow on or off") + "</qt>");
85
        scratchSpaceLeftSpinBox->setToolTip( "<qt>" + tr( "Defines amount of space left of the document canvas available as a pasteboard for creating and modifying elements and dragging them onto the active page" ) + "</qt>" );
86
        scratchSpaceRightSpinBox->setToolTip( "<qt>" + tr( "Defines amount of space right of the document canvas available as a pasteboard for creating and modifying elements and dragging them onto the active page" ) + "</qt>" );
87
        scratchSpaceTopSpinBox->setToolTip( "<qt>" + tr( "Defines amount of space above the document canvas available as a pasteboard for creating and modifying elements and dragging them onto the active page" ) + "</qt>" );
88
        scratchSpaceBottomSpinBox->setToolTip( "<qt>" + tr( "Defines amount of space below the document canvas available as a pasteboard for creating and modifying elements and dragging them onto the active page" ) + "</qt>" );
89
        buttonRestoreDPI->setToolTip( "<qt>" + tr( "Set the default zoom level" )  + "</qt>");
90
        adjustDisplaySlider->setToolTip( "<qt>" + tr( "Place a ruler against your screen and drag the slider to set the zoom level so Scribus will display your pages and objects on them at the correct size" ) + "</qt>" );
91
}
92
 
93
void Prefs_Display::unitChange(int unitIndex)
94
{
95
        scratchSpaceLeftSpinBox->setMaximum(1000);
96
        scratchSpaceRightSpinBox->setMaximum(1000);
97
        scratchSpaceTopSpinBox->setMaximum(1000);
98
        scratchSpaceBottomSpinBox->setMaximum(1000);
99
        pageGapHorizontalSpinBox->setMaximum(1000);
100
        pageGapVerticalSpinBox->setMaximum(1000);
101
        scratchSpaceLeftSpinBox->setNewUnit(unitIndex);
102
        scratchSpaceRightSpinBox->setNewUnit(unitIndex);
103
        scratchSpaceTopSpinBox->setNewUnit(unitIndex);
104
        scratchSpaceBottomSpinBox->setNewUnit(unitIndex);
105
        pageGapHorizontalSpinBox->setNewUnit(unitIndex);
106
        pageGapVerticalSpinBox->setNewUnit(unitIndex);
107
        docUnitIndex = unitIndex;
108
}
109
 
110
void Prefs_Display::restoreDefaults(struct ApplicationPrefs *prefsData)
111
{
112
        docUnitIndex = prefsData->docSetupPrefs.docUnitIndex;
113
        double unitRatio = unitGetRatioFromIndex(docUnitIndex);
114
//      QString unitSuffix = unitGetSuffixFromIndex(docUnitIndex);
115
 
116
        showImagesCheckBox->setChecked(prefsData->guidesPrefs.showPic);
117
        showControlCharsCheckBox->setChecked(prefsData->guidesPrefs.showControls);
118
        showRulersCheckBox->setChecked(prefsData->guidesPrefs.rulersShown);
119
        showRulersRelativeToPageCheckBox->setChecked(prefsData->guidesPrefs.rulerMode);
120
        showTextChainsCheckBox->setChecked(prefsData->guidesPrefs.linkShown);
121
        showFramesCheckBox->setChecked(prefsData->guidesPrefs.framesShown);
122
        showLayerIndicatorsCheckBox->setChecked(prefsData->guidesPrefs.layerMarkersShown);
123
        showUnprintableAreaInMarginColorCheckBox->setChecked(prefsData->displayPrefs.marginColored);
124
        showBleedAreaCheckBox->setChecked(prefsData->guidesPrefs.showBleed);
125
        showPageShadowCheckBox->setChecked(prefsData->displayPrefs.showPageShadow);
126
        showVerifierWarningsOnCanvasCheckBox->setChecked(prefsData->displayPrefs.showVerifierWarningsOnCanvas);
127
 
128
        unitChange(docUnitIndex);
129
 
130
        scratchSpaceLeftSpinBox->setValue(prefsData->displayPrefs.scratch.left() * unitRatio);
131
        scratchSpaceRightSpinBox->setValue(prefsData->displayPrefs.scratch.right() * unitRatio);
132
        scratchSpaceTopSpinBox->setValue(prefsData->displayPrefs.scratch.top() * unitRatio);
133
        scratchSpaceBottomSpinBox->setValue(prefsData->displayPrefs.scratch.bottom() * unitRatio);
134
        pageGapHorizontalSpinBox->setValue(prefsData->displayPrefs.pageGapHorizontal * unitRatio);
135
        pageGapVerticalSpinBox->setValue(prefsData->displayPrefs.pageGapVertical * unitRatio);
136
 
137
        QPixmap pm(100, 30);
138
        pm.fill(prefsData->displayPrefs.paperColor);
139
        colorPaper = prefsData->displayPrefs.paperColor;
140
        pageFillColorButton->setText( QString() );
141
        pageFillColorButton->setIcon(pm);
142
 
143
        pm.fill(prefsData->displayPrefs.scratchColor);
144
        colorScratch = prefsData->displayPrefs.scratchColor;
145
        scratchSpaceColorButton->setText( QString() );
146
        scratchSpaceColorButton->setIcon(pm);
147
 
148
        pm.fill(prefsData->displayPrefs.frameColor);
149
        colorFrame = prefsData->displayPrefs.frameColor;
150
        frameSelectedColorButton->setText( QString() );
151
        frameSelectedColorButton->setIcon(pm);
152
 
153
        pm.fill(prefsData->displayPrefs.frameNormColor);
154
        colorFrameNorm = prefsData->displayPrefs.frameNormColor;
155
        frameColorButton->setText( QString() );
156
        frameColorButton->setIcon(pm);
157
 
158
        pm.fill(prefsData->displayPrefs.frameGroupColor);
159
        colorFrameGroup = prefsData->displayPrefs.frameGroupColor;
160
        frameGroupedColorButton->setText( QString() );
161
        frameGroupedColorButton->setIcon(pm);
162
 
163
        pm.fill(prefsData->displayPrefs.frameLinkColor);
164
        colorFrameLinked = prefsData->displayPrefs.frameLinkColor;
165
        frameLinkedColorButton->setText( QString() );
166
        frameLinkedColorButton->setIcon(pm);
167
 
168
        pm.fill(prefsData->displayPrefs.frameLockColor);
169
        colorFrameLocked = prefsData->displayPrefs.frameLockColor;
170
        frameLockedColorButton->setText( QString() );
171
        frameLockedColorButton->setIcon(pm);
172
 
173
        pm.fill(prefsData->displayPrefs.frameAnnotationColor);
174
        colorFrameAnnotation = prefsData->displayPrefs.frameAnnotationColor;
175
        frameAnnotationColorButton->setText( QString() );
176
        frameAnnotationColorButton->setIcon(pm);
177
 
178
        pm.fill(prefsData->displayPrefs.pageBorderColor);
179
        colorPageBorder = prefsData->displayPrefs.pageBorderColor;
180
        selectedPageBorderButton->setText( QString() );
181
        selectedPageBorderButton->setIcon(pm);
182
 
183
        pm.fill(prefsData->displayPrefs.controlCharColor);
184
        colorControlChars = prefsData->displayPrefs.controlCharColor;
185
        textControlCharsButton->setText( QString() );
186
        textControlCharsButton->setIcon(pm);
187
 
188
        displayScale=prefsData->displayPrefs.displayScale;
189
 
190
        adjustDisplaySlider->setValue(qRound(100 * displayScale) - 150);
191
        displayDPI->setText(QString::number(qRound(displayScale * 72.0))+ tr(" dpi"));
192
        rulerUnitComboBox->clear();
193
        rulerUnitComboBox->addItems(unitGetTextUnitList());
194
        rulerUnitComboBox->setCurrentIndex(docUnitIndex);
195
        drawRuler();
196
 
197
}
198
 
199
void Prefs_Display::drawRuler()
200
{
201
        int index = rulerUnitComboBox->currentIndex();
202
        double iter = unitRulerGetIter1FromIndex(index);
203
        double iter2 = unitRulerGetIter2FromIndex(index);
204
        double maxi;
205
        switch (index)
206
        {
207
                case 0:
208
                        maxi = 200.0;
209
                        break;
210
                case 1:
211
                        maxi = iter2;
212
                        break;
213
                case 2:
214
                        maxi = 2 * iter2;
215
                        break;
216
                case 3:
217
                        maxi = 240.0;
218
                        break;
219
                case 4:
220
                        maxi = 240.0;
221
                        break;
222
                default:
223
                        iter = 10.0;
224
                        iter2 = iter * 10.0;
225
                        maxi = 200.0;
226
                        break;
227
        }
228
 
229
        QPixmap pm(qMin(qMax(displaySizeRuler->width(), qRound(maxi)+30), qRound(maxi*displayScale+30)), 21);
230
        pm.fill();
231
        QPainter p;
232
        p.begin(&pm);
233
        p.drawLine(0, 19, pm.width(), 19);
234
        p.setBrush(Qt::black);
235
        p.setPen(Qt::black);
236
        p.scale(displayScale, 1.0);
237
        double xl;
238
        for (xl = 0; xl < maxi; xl += iter)
239
                p.drawLine(QPointF(xl, 13.0), QPointF(xl, 19.0));
240
        for (xl = 0; xl < maxi + 10; xl += iter2)
241
        {
242
                p.drawLine(QPointF(xl, 6.0), QPointF(xl, 19.0));
243
                p.save();
244
                p.scale(1.0 / displayScale, 1.0);
245
                double val;
246
                switch (index)
247
                {
248
                        case 2:
249
                        case 4:
250
                                val = xl / iter2;
251
                                break;
252
                        case 3:
253
                        case 5:
254
                                val = xl / iter;
255
                                break;
256
                        default:
257
                                val=xl / iter * 10;
258
                                break;
259
                }
260
                p.drawText(static_cast<int>((xl+qRound(2/displayScale)) * displayScale), 12, QString::number(val));
261
                p.restore();
262
        }
263
        p.end();
264
        displaySizeRuler->setPixmap(pm);
265
}
266
 
267
void Prefs_Display::restoreDisScale()
268
{
269
        disconnect(adjustDisplaySlider, SIGNAL(valueChanged(int)), this, SLOT(setDisScale()));
270
        int dpi = qApp->desktop()->logicalDpiX();
271
        if ((dpi < 60) || (dpi > 500))
272
                dpi = 72;
273
        displayScale = dpi / 72.0;
274
        adjustDisplaySlider->setValue(qRound(100 * displayScale) - 150);
275
        drawRuler();
276
        displayDPI->setText(QString::number(qRound(displayScale * 72.0))+ tr(" dpi"));
277
        connect(adjustDisplaySlider, SIGNAL(valueChanged(int)), this, SLOT(setDisScale()));
278
}
279
 
280
void Prefs_Display::setDisScale()
281
{
282
        displayScale = qMax((150.0 + adjustDisplaySlider->value()) / 100.0, 0.01);
283
        drawRuler();
284
        displayDPI->setText(QString::number(qRound(displayScale * 72.0))+ tr(" dpi"));
285
}
286
 
287
void Prefs_Display::changePaperColor()
288
{
289
        QColor newColor(QColorDialog::getColor(colorPaper, this));
290
        if (newColor.isValid())
291
        {
292
                QPixmap pm(100, 30);
293
                pm.fill(newColor);
294
                colorPaper = newColor;
295
                pageFillColorButton->setIcon(pm);
296
        }
297
}
298
 
299
void Prefs_Display::changeScratchColor()
300
{
301
        QColor newColor(QColorDialog::getColor(colorScratch, this));
302
        if (newColor.isValid())
303
        {
304
                QPixmap pm(100, 30);
305
                pm.fill(newColor);
306
                colorScratch = newColor;
307
                scratchSpaceColorButton->setIcon(pm);
308
        }
309
}
310
 
311
void Prefs_Display::changeFrameColor()
312
{
313
        QColor newColor(QColorDialog::getColor(colorFrame, this));
314
        if (newColor.isValid())
315
        {
316
                QPixmap pm(100, 30);
317
                pm.fill(newColor);
318
                colorFrame = newColor;
319
                frameSelectedColorButton->setIcon(pm);
320
        }
321
}
322
 
323
void Prefs_Display::changeNormFrameColor()
324
{
325
        QColor newColor(QColorDialog::getColor(colorFrameNorm, this));
326
        if (newColor.isValid())
327
        {
328
                QPixmap pm(100, 30);
329
                pm.fill(newColor);
330
                colorFrameNorm = newColor;
331
                frameColorButton->setIcon(pm);
332
        }
333
}
334
 
335
void Prefs_Display::changeGroupFrameColor()
336
{
337
        QColor newColor(QColorDialog::getColor(colorFrameGroup, this));
338
        if (newColor.isValid())
339
        {
340
                QPixmap pm(100, 30);
341
                pm.fill(newColor);
342
                colorFrameGroup = newColor;
343
                frameGroupedColorButton->setIcon(pm);
344
        }
345
}
346
 
347
void Prefs_Display::changeChainFrameColor()
348
{
349
        QColor newColor(QColorDialog::getColor(colorFrameLinked, this));
350
        if (newColor.isValid())
351
        {
352
                QPixmap pm(100, 30);
353
                pm.fill(newColor);
354
                colorFrameLinked = newColor;
355
                frameLinkedColorButton->setIcon(pm);
356
        }
357
}
358
 
359
void Prefs_Display::changeLockFrameColor()
360
{
361
        QColor newColor(QColorDialog::getColor(colorFrameLocked, this));
362
        if (newColor.isValid())
363
        {
364
                QPixmap pm(100, 30);
365
                pm.fill(newColor);
366
                colorFrameLocked = newColor;
367
                frameLockedColorButton->setIcon(pm);
368
        }
369
}
370
 
371
void Prefs_Display::changeAnnotFrameColor()
372
{
373
        QColor newColor(QColorDialog::getColor(colorFrameAnnotation, this));
374
        if (newColor.isValid())
375
        {
376
                QPixmap pm(100, 30);
377
                pm.fill(newColor);
378
                colorFrameAnnotation = newColor;
379
                frameAnnotationColorButton->setIcon(pm);
380
        }
381
}
382
 
383
void Prefs_Display::changePageBorderColor()
384
{
385
        QColor newColor(QColorDialog::getColor(colorPageBorder, this));
386
        if (newColor.isValid())
387
        {
388
                QPixmap pm(100, 30);
389
                pm.fill(newColor);
390
                colorPageBorder = newColor;
391
                selectedPageBorderButton->setIcon(pm);
392
        }
393
}
394
 
395
void Prefs_Display::changeControlCharsColor()
396
{
397
        QColor newColor(QColorDialog::getColor(colorControlChars, this));
398
        if (newColor.isValid())
399
        {
400
                QPixmap pm(100, 30);
401
                pm.fill(newColor);
402
                colorControlChars = newColor;
403
                textControlCharsButton->setIcon(pm);
404
        }
405
}
406
 
407
void Prefs_Display::saveGuiToPrefs(struct ApplicationPrefs *prefsData) const
408
{
409
        prefsData->guidesPrefs.showPic=showImagesCheckBox->isChecked();
410
        prefsData->guidesPrefs.showControls=showControlCharsCheckBox->isChecked();
411
        prefsData->guidesPrefs.rulersShown=showRulersCheckBox->isChecked();
412
        prefsData->guidesPrefs.rulerMode=showRulersRelativeToPageCheckBox->isChecked();
413
        prefsData->guidesPrefs.linkShown=showTextChainsCheckBox->isChecked();
414
        prefsData->guidesPrefs.framesShown=showFramesCheckBox->isChecked();
415
        prefsData->guidesPrefs.layerMarkersShown=showLayerIndicatorsCheckBox->isChecked();
416
        prefsData->displayPrefs.marginColored=showUnprintableAreaInMarginColorCheckBox->isChecked();
417
        prefsData->guidesPrefs.showBleed=showBleedAreaCheckBox->isChecked();
418
        prefsData->displayPrefs.showPageShadow=showPageShadowCheckBox->isChecked();
419
        prefsData->displayPrefs.showVerifierWarningsOnCanvas=showVerifierWarningsOnCanvasCheckBox->isChecked();
420
 
421
        double unitRatio = unitGetRatioFromIndex(prefsData->docSetupPrefs.docUnitIndex);
422
        prefsData->displayPrefs.scratch.setLeft(scratchSpaceLeftSpinBox->value() / unitRatio);
423
        prefsData->displayPrefs.scratch.setRight(scratchSpaceRightSpinBox->value() / unitRatio);
424
        prefsData->displayPrefs.scratch.setTop(scratchSpaceTopSpinBox->value() / unitRatio);
425
        prefsData->displayPrefs.scratch.setBottom(scratchSpaceBottomSpinBox->value() / unitRatio);
426
        prefsData->displayPrefs.pageGapHorizontal=pageGapHorizontalSpinBox->value() / unitRatio;
427
        prefsData->displayPrefs.pageGapVertical=pageGapVerticalSpinBox->value() / unitRatio;
428
 
429
        prefsData->displayPrefs.paperColor = colorPaper;
430
        prefsData->displayPrefs.scratchColor = colorScratch;
431
        prefsData->displayPrefs.frameColor = colorFrame;
432
        prefsData->displayPrefs.frameNormColor = colorFrameNorm;
433
        prefsData->displayPrefs.frameGroupColor = colorFrameGroup;
434
        prefsData->displayPrefs.frameLinkColor = colorFrameLinked;
435
        prefsData->displayPrefs.frameLockColor = colorFrameLocked;
436
        prefsData->displayPrefs.frameAnnotationColor = colorFrameAnnotation;
437
        prefsData->displayPrefs.pageBorderColor = colorPageBorder;
438
        prefsData->displayPrefs.controlCharColor = colorControlChars;
439
        prefsData->displayPrefs.displayScale = displayScale;
440
}