Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
14656 cbradney 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 <QDebug>
9
#include <QPushButton>
10
#include <QLayout>
11
#include <QListWidget>
12
#include <QVBoxLayout>
13
 
14
#include "commonstrings.h"
20185 craig 15
#include "iconmanager.h"
14656 cbradney 16
#include "pluginmanager.h"
23116 craig 17
#include "prefs_pane.h"
14656 cbradney 18
#include "prefsmanager.h"
19
#include "scplugin.h"
20
#include "scribuscore.h"
15017 cbradney 21
#include "scribusdoc.h"
20185 craig 22
#include "ui/preferencesdialog.h"
14656 cbradney 23
#include "units.h"
24
 
15017 cbradney 25
PreferencesDialog::PreferencesDialog(QWidget* parent, ApplicationPrefs& prefsData, ScribusDoc* doc)
14656 cbradney 26
        : QDialog(parent),
15017 cbradney 27
        m_Doc(doc)
14656 cbradney 28
{
29
        setupUi(this);
30
        setObjectName(QString::fromLocal8Bit("PreferencesDialog"));
31
        setupListWidget();
22601 craig 32
        while (prefsStackWidget->currentWidget()!=nullptr)
14656 cbradney 33
                prefsStackWidget->removeWidget(prefsStackWidget->currentWidget());
19553 craig 34
 
35
        applyButton->hide();
23116 craig 36
        exportButton->hide();
19553 craig 37
 
15059 cbradney 38
        if(doc)
39
        {
40
                setWindowTitle( tr("Document Setup") );
41
                defaultsButton->hide();
42
        }
17566 craig 43
        else
44
                connect(defaultsButton, SIGNAL(clicked()), SLOT(restoreDefaults()));
15140 cbradney 45
        // Create Stack Widgets if required
15160 cbradney 46
        prefs_ColorManagement = new Prefs_ColorManagement(prefsStackWidget, m_Doc);
47
        prefs_Display = new Prefs_Display(prefsStackWidget, m_Doc);
48
        prefs_DocumentItemAttributes = new Prefs_DocumentItemAttributes(prefsStackWidget, m_Doc);
15124 cbradney 49
        prefs_DocumentSetup = new Prefs_DocumentSetup(prefsStackWidget, m_Doc);
15160 cbradney 50
        prefs_Fonts = new Prefs_Fonts(prefsStackWidget, m_Doc);
15124 cbradney 51
        prefs_Guides = new Prefs_Guides(prefsStackWidget, m_Doc);
15160 cbradney 52
        prefs_Hyphenator = new Prefs_Hyphenator(prefsStackWidget, m_Doc);
15124 cbradney 53
        prefs_ItemTools = new Prefs_ItemTools(prefsStackWidget, m_Doc);
54
        prefs_OperatorTools = new Prefs_OperatorTools(prefsStackWidget, m_Doc);
55
        prefs_PDFExport = new Prefs_PDFExport(prefsStackWidget, m_Doc);
56
        prefs_PreflightVerifier = new Prefs_PreflightVerifier(prefsStackWidget, m_Doc);
15160 cbradney 57
        prefs_Printer = new Prefs_Printer(prefsStackWidget, m_Doc);
15124 cbradney 58
        prefs_TableOfContents = new Prefs_TableOfContents(prefsStackWidget, m_Doc);
15160 cbradney 59
        prefs_Typography = new Prefs_Typography(prefsStackWidget, m_Doc);
15124 cbradney 60
        if (doc)
61
        {
15160 cbradney 62
                prefs_DocumentInformation = new Prefs_DocumentInformation(prefsStackWidget, m_Doc);
15124 cbradney 63
                prefs_DocumentSections  = new Prefs_DocumentSections(prefsStackWidget, m_Doc);
64
        }
15059 cbradney 65
        if (!doc)
66
        {
15124 cbradney 67
                prefs_ExternalTools = new Prefs_ExternalTools(prefsStackWidget, m_Doc);
15160 cbradney 68
                prefs_ImageCache = new Prefs_ImageCache(prefsStackWidget, m_Doc);
69
                prefs_KeyboardShortcuts = new Prefs_KeyboardShortcuts(prefsStackWidget, m_Doc);
15124 cbradney 70
                prefs_Miscellaneous = new Prefs_Miscellaneous(prefsStackWidget, m_Doc);
71
                prefs_PageSizes = new Prefs_PageSizes(prefsStackWidget, m_Doc);
15160 cbradney 72
                prefs_Paths = new Prefs_Paths(prefsStackWidget, m_Doc);
15124 cbradney 73
                prefs_Plugins = new Prefs_Plugins(prefsStackWidget, m_Doc);
15160 cbradney 74
                prefs_Scrapbook = new Prefs_Scrapbook(prefsStackWidget, m_Doc);
19821 craig 75
//              prefs_Spelling = new Prefs_Spelling(prefsStackWidget, m_Doc);
15084 cbradney 76
                prefs_UserInterface = new Prefs_UserInterface(prefsStackWidget, m_Doc);
15124 cbradney 77
        }
15140 cbradney 78
        // Add Stack Widgets if required
15124 cbradney 79
        if (!doc)
80
        {
23116 craig 81
                addWidget(prefs_UserInterface);
82
                addWidget(prefs_Paths);
83
                addWidget(prefs_KeyboardShortcuts);
15059 cbradney 84
        }
23116 craig 85
        addWidget(prefs_DocumentSetup);
19833 craig 86
        if (!doc)
23116 craig 87
                addWidget(prefs_PageSizes);
88
        addWidget(prefs_Guides);
15017 cbradney 89
        if (doc)
23116 craig 90
                addWidget(prefs_DocumentInformation);
19833 craig 91
        if (doc)
23116 craig 92
                addWidget(prefs_DocumentSections);
19833 craig 93
 
23116 craig 94
        addWidget(prefs_ItemTools);
95
        addWidget(prefs_Fonts);
96
        addWidget(prefs_Typography);
97
        addWidget(prefs_Hyphenator);
19833 craig 98
        //if (!doc)
23116 craig 99
        //      addItem(prefs_Spelling);
19833 craig 100
 
101
 
102
 
23116 craig 103
        addWidget(prefs_ColorManagement);
19833 craig 104
        if (!doc)
23116 craig 105
                addWidget(prefs_ImageCache);
106
        addWidget(prefs_Display);
107
        addWidget(prefs_OperatorTools);
19833 craig 108
        if (!doc)
23116 craig 109
                addWidget(prefs_ExternalTools);
19833 craig 110
        if (!doc)
23116 craig 111
                addWidget(prefs_Scrapbook);
112
        addWidget(prefs_PreflightVerifier);
113
        addWidget(prefs_Printer);
114
        addWidget(prefs_PDFExport);
19833 craig 115
        if (!doc)
23116 craig 116
                addWidget(prefs_Miscellaneous);
117
        addWidget(prefs_DocumentItemAttributes);
118
        addWidget(prefs_TableOfContents);
19833 craig 119
 
15059 cbradney 120
        if (!doc)
23116 craig 121
                addWidget(prefs_Plugins);
15108 cbradney 122
 
14656 cbradney 123
        arrangeIcons();
15059 cbradney 124
 
125
        //**********
126
 
21809 jghali 127
        localPrefs=prefsData;
128
        initPreferenceValues();
129
        setupGui();
130
        if (!doc)
131
                addPlugins();
132
 
14656 cbradney 133
        if (preferencesTypeList->count()>0)
134
        {
135
                preferencesTypeList->item(0)->setSelected(true);
136
                itemSelected(preferencesTypeList->item(0));
137
        }
138
 
15124 cbradney 139
        connect(prefs_DocumentSetup, SIGNAL(changeToOtherSection(const QString&)), this, SLOT(setNewItemSelected(const QString&)));
19248 craig 140
        connect(prefs_DocumentSetup, SIGNAL(prefsChangeUnits(int)), this, SLOT(changeUnits(int)));
14656 cbradney 141
        connect(okButton, SIGNAL(clicked()), this, SLOT(accept()));
142
        connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
143
        connect(applyButton, SIGNAL(clicked()), this, SLOT(applyButtonClicked()));
144
        connect(preferencesTypeList, SIGNAL(itemSelectionChanged()), this, SLOT(newItemSelected()));
145
}
146
 
147
 
23116 craig 148
PreferencesDialog::~PreferencesDialog() = default;
14656 cbradney 149
 
150
void PreferencesDialog::restoreDefaults()
151
{
23060 craig 152
        PrefsManager::instance().initDefaults();
14656 cbradney 153
        setupGui();
154
}
155
 
156
void PreferencesDialog::initPreferenceValues()
157
{
24137 craig 158
        mainWin = qobject_cast<ScribusMainWindow*>(parent());
14656 cbradney 159
        docUnitIndex = localPrefs.docSetupPrefs.docUnitIndex;
160
        unitRatio = unitGetRatioFromIndex(docUnitIndex);
161
}
162
 
163
void PreferencesDialog::setupGui()
164
{
15108 cbradney 165
        if (prefs_UserInterface) prefs_UserInterface->restoreDefaults(&localPrefs);
166
        if (prefs_Paths) prefs_Paths->restoreDefaults(&localPrefs);
167
        if (prefs_DocumentSetup) prefs_DocumentSetup->restoreDefaults(&localPrefs);
168
        if (prefs_DocumentInformation) prefs_DocumentInformation->restoreDefaults(&localPrefs);
169
        if (prefs_Guides) prefs_Guides->restoreDefaults(&localPrefs);
170
        if (prefs_Typography) prefs_Typography->restoreDefaults(&localPrefs);
171
        if (prefs_ItemTools) prefs_ItemTools->restoreDefaults(&localPrefs);
172
        if (prefs_OperatorTools) prefs_OperatorTools->restoreDefaults(&localPrefs);
173
        if (prefs_Hyphenator) prefs_Hyphenator->restoreDefaults(&localPrefs);
174
        if (prefs_Fonts) prefs_Fonts->restoreDefaults(&localPrefs);
175
        if (prefs_Printer) prefs_Printer->restoreDefaults(&localPrefs);
176
        if (prefs_PDFExport) prefs_PDFExport->restoreDefaults(&localPrefs, ScCore->PDFXProfiles);
177
        if (prefs_PreflightVerifier) prefs_PreflightVerifier->restoreDefaults(&localPrefs);
178
        if (prefs_DocumentItemAttributes) prefs_DocumentItemAttributes->restoreDefaults(&localPrefs);
179
        if (prefs_TableOfContents) prefs_TableOfContents->restoreDefaults(&localPrefs);
180
        if (prefs_DocumentSections) prefs_DocumentSections->restoreDefaults(&localPrefs);
181
        if (prefs_KeyboardShortcuts) prefs_KeyboardShortcuts->restoreDefaults(&localPrefs);
182
        if (prefs_ColorManagement)
183
        {
15972 craig 184
                prefs_ColorManagement->setProfiles(&localPrefs, &ScCore->InputProfiles, &ScCore->InputProfilesCMYK, &ScCore->PrinterProfiles, &ScCore->MonitorProfiles);
15108 cbradney 185
                prefs_ColorManagement->restoreDefaults(&localPrefs);
186
        }
187
        if (prefs_Scrapbook) prefs_Scrapbook->restoreDefaults(&localPrefs);
19821 craig 188
//      if (prefs_Spelling) prefs_Spelling->restoreDefaults(&localPrefs);
15108 cbradney 189
        if (prefs_Display) prefs_Display->restoreDefaults(&localPrefs);
190
        if (prefs_ExternalTools) prefs_ExternalTools->restoreDefaults(&localPrefs);
191
        if (prefs_Plugins) prefs_Plugins->restoreDefaults(&localPrefs);
192
        if (prefs_Miscellaneous) prefs_Miscellaneous->restoreDefaults(&localPrefs);
193
        if (prefs_PageSizes) prefs_PageSizes->restoreDefaults(&localPrefs);
194
        if (prefs_ImageCache) prefs_ImageCache->restoreDefaults(&localPrefs);
14656 cbradney 195
}
196
 
197
 
198
void PreferencesDialog::saveGuiToPrefs()
199
{
15108 cbradney 200
        if (prefs_UserInterface) prefs_UserInterface->saveGuiToPrefs(&localPrefs);
201
        if (prefs_Paths) prefs_Paths->saveGuiToPrefs(&localPrefs);
202
        if (prefs_DocumentSetup) prefs_DocumentSetup->saveGuiToPrefs(&localPrefs);
203
        if (prefs_DocumentInformation) prefs_DocumentInformation->saveGuiToPrefs(&localPrefs);
204
        if (prefs_Guides) prefs_Guides->saveGuiToPrefs(&localPrefs);
205
        if (prefs_Typography) prefs_Typography->saveGuiToPrefs(&localPrefs);
206
        if (prefs_ItemTools) prefs_ItemTools->saveGuiToPrefs(&localPrefs);
207
        if (prefs_OperatorTools) prefs_OperatorTools->saveGuiToPrefs(&localPrefs);
208
        if (prefs_Hyphenator) prefs_Hyphenator->saveGuiToPrefs(&localPrefs);
209
        if (prefs_Fonts) prefs_Fonts->saveGuiToPrefs(&localPrefs);
210
        if (prefs_Printer) prefs_Printer->saveGuiToPrefs(&localPrefs);
211
        if (prefs_PDFExport) prefs_PDFExport->saveGuiToPrefs(&localPrefs);
212
        if (prefs_PreflightVerifier) prefs_PreflightVerifier->saveGuiToPrefs(&localPrefs);
213
        if (prefs_DocumentItemAttributes) prefs_DocumentItemAttributes->saveGuiToPrefs(&localPrefs);
214
        if (prefs_TableOfContents) prefs_TableOfContents->saveGuiToPrefs(&localPrefs);
215
        if (prefs_DocumentSections) prefs_DocumentSections->saveGuiToPrefs(&localPrefs);
15117 cbradney 216
        if (prefs_KeyboardShortcuts) prefs_KeyboardShortcuts->saveGuiToPrefs(&localPrefs);
217
        if (prefs_ColorManagement) prefs_ColorManagement->saveGuiToPrefs(&localPrefs);
15108 cbradney 218
        if (prefs_Scrapbook) prefs_Scrapbook->saveGuiToPrefs(&localPrefs);
19821 craig 219
//      if (prefs_Spelling) prefs_Spelling->saveGuiToPrefs(&localPrefs);
15108 cbradney 220
        if (prefs_Display) prefs_Display->saveGuiToPrefs(&localPrefs);
221
        if (prefs_ExternalTools) prefs_ExternalTools->saveGuiToPrefs(&localPrefs);
222
        if (prefs_Plugins) prefs_Plugins->saveGuiToPrefs(&localPrefs);
223
        if (prefs_Miscellaneous) prefs_Miscellaneous->saveGuiToPrefs(&localPrefs);
224
        if (prefs_PageSizes) prefs_PageSizes->saveGuiToPrefs(&localPrefs);
225
        if (prefs_ImageCache) prefs_ImageCache->saveGuiToPrefs(&localPrefs);
14656 cbradney 226
}
227
 
228
void PreferencesDialog::applyButtonClicked()
229
{
230
        Prefs_Pane* pp=qobject_cast<Prefs_Pane *>(prefsStackWidget->currentWidget());
231
        if (pp)
232
                pp->saveGuiToPrefs(&localPrefs);
233
}
234
 
235
void PreferencesDialog::accept()
236
{
237
        saveGuiToPrefs();
22874 jghali 238
        // #15583: emitting manually accepted should not be needed
239
        // QDialog::accept() will emit it by itself
240
        // emit accepted();
24137 craig 241
        QDialog::accept();
14656 cbradney 242
}
243
 
244
void PreferencesDialog::setupListWidget()
245
{
246
        preferencesTypeList->setDragEnabled(false);
247
        preferencesTypeList->setViewMode(QListView::ListMode);
248
        preferencesTypeList->setFlow(QListView::TopToBottom);
249
        preferencesTypeList->setIconSize(QSize(32,32));
250
        preferencesTypeList->setSortingEnabled(false);
251
        preferencesTypeList->setWrapping(false);
252
        preferencesTypeList->setWordWrap(true);
253
        preferencesTypeList->setAcceptDrops(false);
254
        preferencesTypeList->setDropIndicatorShown(false);
255
        preferencesTypeList->setDragDropMode(QAbstractItemView::NoDragDrop);
256
        //preferencesTypeList->setResizeMode(QListView::Adjust);
257
        preferencesTypeList->setSelectionMode(QAbstractItemView::SingleSelection);
258
        preferencesTypeList->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
259
        preferencesTypeList->clear();
260
}
261
 
23116 craig 262
void PreferencesDialog::addWidget(Prefs_Pane* tab)
14656 cbradney 263
{
264
        //TODO: Can we avoid using this name and duplicating strings by getting it from the tab UIs
23116 craig 265
        QListWidgetItem* newItem = new QListWidgetItem(IconManager::instance().loadIcon(tab->icon()), tab->caption(), preferencesTypeList);
24659 jghali 266
        newItem->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);
23116 craig 267
        int i = prefsStackWidget->addWidget(tab);
268
        stackWidgetMap.insert(newItem, i);
14656 cbradney 269
}
270
 
271
void PreferencesDialog::newItemSelected()
272
{
273
        QList<QListWidgetItem*> items = preferencesTypeList->selectedItems();
22521 craig 274
        itemSelected((items.count() > 0) ? items.at(0) : nullptr);
14656 cbradney 275
}
276
 
277
void PreferencesDialog::itemSelected(QListWidgetItem* ic)
278
{
22601 craig 279
        if (ic == nullptr)
14656 cbradney 280
                return;
281
        if (stackWidgetMap.contains(ic))
282
        {
283
                //emit aboutToShow(prefsWidgets->widget(itemMap[ic]));
284
                prefsStackWidget->setCurrentIndex(stackWidgetMap[ic]);
15105 cbradney 285
                if (prefsStackWidget->currentWidget()==dynamic_cast<QWidget*>(prefs_DocumentSetup))
286
                        prefs_DocumentSetup->setupPageSizes(&localPrefs);
14656 cbradney 287
                if (prefsStackWidget->currentWidget()==dynamic_cast<QWidget*>(prefs_ItemTools))
288
                        prefs_ItemTools->enableFontPreview(true);
289
                if (prefsStackWidget->currentWidget()==dynamic_cast<QWidget*>(prefs_TableOfContents))
290
                        prefs_TableOfContents->setupItemAttrs( prefs_DocumentItemAttributes->getDocAttributesNames() );
14745 cbradney 291
                if (prefsStackWidget->currentWidget()==dynamic_cast<QWidget*>(prefs_PDFExport))
292
                        prefs_PDFExport->enableCMS(prefs_ColorManagement->cmActive());
14656 cbradney 293
        }
294
}
295
 
15105 cbradney 296
void PreferencesDialog::setNewItemSelected(const QString &s)
297
{
22521 craig 298
        if (s=="Prefs_PageSizes" && prefs_PageSizes!=nullptr)
15105 cbradney 299
        {
300
                int i=prefsStackWidget->indexOf(prefs_PageSizes);
301
                if (i!=-1)
302
                        preferencesTypeList->setCurrentRow(i);
303
        }
304
}
305
 
19248 craig 306
void PreferencesDialog::changeUnits(int u)
307
{
308
        prefs_Display->unitChange(u);
309
        prefs_Guides->unitChange(u);
310
        prefs_ItemTools->unitChange(u);
311
        prefs_OperatorTools->unitChange(u);
312
        prefs_PDFExport->unitChange(u);
313
        prefs_Printer->unitChange(u);
314
}
315
 
14656 cbradney 316
void PreferencesDialog::changeEvent(QEvent *e)
317
{
318
        if (e->type() == QEvent::LanguageChange)
319
        {
320
                languageChange();
321
        }
322
        else
323
                QWidget::changeEvent(e);
324
}
325
 
326
void PreferencesDialog::languageChange()
327
{
328
        setWindowTitle( tr( "Preferences" ) );
329
}
330
 
331
void PreferencesDialog::addPlugins()
332
{
333
        // Scan for plugins that provide a prefs widget, and add it to the
334
        // prefs dialog.
335
        // For each plugin, enabled or not:
22601 craig 336
        ScPlugin* plugin = nullptr;
337
        Prefs_Pane* panel = nullptr;
14656 cbradney 338
 
339
        PluginManager& pluginManager = PluginManager::instance();
22508 jghali 340
        const QStringList pluginNames(pluginManager.pluginNames(true));
14656 cbradney 341
 
22508 jghali 342
        for (const QString& pName : pluginNames)
14656 cbradney 343
        {
344
                // Ask the plugin manager for a plugin (skipping disabled plugins).
345
                plugin = pluginManager.getPlugin(pName, false);
22508 jghali 346
                if (!plugin)
347
                        continue;
14656 cbradney 348
                // If we got a plugin (which we know is enabled):
22508 jghali 349
                // Ask the plugin for a prefs widget
23596 craig 350
                panel = nullptr;
23116 craig 351
                bool wantPanel = plugin->newPrefsPanelWidget(prefsStackWidget, panel);
22508 jghali 352
                // If it gave us one...
23596 craig 353
                if (wantPanel && panel!=nullptr)
14656 cbradney 354
                {
22508 jghali 355
                        // plug it in to the dialog,
23116 craig 356
                        addWidget(panel);
23596 craig 357
                        // and connect a signal to tell it to save its settings.
22508 jghali 358
                        connect(this, SIGNAL(accepted()), panel, SLOT(apply()));
14656 cbradney 359
                }
360
        }
361
}
362
 
15096 cbradney 363
void PreferencesDialog::getResizeDocumentPages(bool &resizePages, bool &resizeMasterPages, bool &resizePageMargins, bool &resizeMasterPageMargins)
364
{
365
        prefs_DocumentSetup->getResizeDocumentPages(resizePages, resizeMasterPages, resizePageMargins, resizeMasterPageMargins);
366
}
367
 
368
 
14656 cbradney 369
void PreferencesDialog::arrangeIcons()
370
{/*
371
        int maxWidth = 0;
372
        QListWidgetItem* ic;
373
        int startY = 5;
374
        for (int cc = 0; cc < preferencesTypeList->count(); ++cc)
375
        {
376
                ic = preferencesTypeList->item(cc);
377
                QRect ir = preferencesTypeList->visualItemRect(ic);
378
                maxWidth = qMax(ir.width(), maxWidth);
379
        }
380
        preferencesTypeList->setMaximumWidth(maxWidth+16);
381
        preferencesTypeList->setResizeMode(QListView::Fixed);
382
#ifdef _WIN32
383
        int scrollBarWidth = 0;
384
        QList<QScrollBar*> scrollBars = preferencesTypeList->findChildren<QScrollBar*>();
385
        for (int cc = 0; cc < scrollBars.count(); ++cc)
386
        {
387
                if (scrollBars.at(cc)->orientation() == Qt::Vertical)
388
                {
389
                        scrollBarWidth = scrollBars.at(cc)->height();
390
                        break;
391
                }
392
        }
393
#else
394
        int scrollBarWidth = maxWidth;
395
#endif
396
        int startX = qMax((preferencesTypeList->viewport()->width() - scrollBarWidth) / 2, 0);
397
        for (int cc = 0; cc < preferencesTypeList->count(); ++cc)
398
        {
399
                ic = preferencesTypeList->item(cc);
400
                QRect ir = preferencesTypeList->visualItemRect(ic);
401
 
402
#ifdef _WIN32
403
                preferencesTypeList->setPositionForIndex(QPoint(qMax(startX - ir.width() / 2, 0), startY), preferencesTypeList->indexFromItem(ic));
404
#else
405
                int moveW = (maxWidth - ir.width()) / 2;
406
                preferencesTypeList->setPositionForIndex(QPoint(moveW + startX, startY), preferencesTypeList->indexFromItem(ic));
407
#endif
408
 
409
                startY += ir.height()+5;
410
        }*/
411
}
412
 
413
 
414