source: visorpdf/sources/settingsdialog.cpp @ c1a2dcf

Last change on this file since c1a2dcf was c1a2dcf, checked in by Pedro Buitrago <pbuitrago@…>, 8 years ago

Se modifico el nombre terepaima

  • Property mode set to 100644
File size: 37.5 KB
Line 
1/*
2
3Copyright 2015 S. Razi Alavizadeh
4Copyright 2012-2015 Adam Reichold
5Copyright 2012 Alexander Volkov
6
7This file is part of qpdfview.
8
9qpdfview is free software: you can redistribute it and/or modify
10it under the terms of the GNU General Public License as published by
11the Free Software Foundation, either version 2 of the License, or
12(at your option) any later version.
13
14qpdfview is distributed in the hope that it will be useful,
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
20along with qpdfview.  If not, see <http://www.gnu.org/licenses/>.
21
22*/
23
24#include "settingsdialog.h"
25
26#include <QApplication>
27#include <QCheckBox>
28#include <QDesktopWidget>
29#include <QDialogButtonBox>
30#include <QFormLayout>
31#include <QHeaderView>
32#include <QPushButton>
33#include <QShortcut>
34#include <QTableView>
35
36#include "settings.h"
37#include "model.h"
38#include "pluginhandler.h"
39#include "shortcuthandler.h"
40#include "documentview.h"
41#include "miscellaneous.h"
42
43namespace
44{
45
46using namespace qpdfview;
47
48void addSettingsWidget(QTabWidget* tabWidget, SettingsWidget*& settingsWidget, PluginHandler::FileType fileType)
49{
50    settingsWidget = PluginHandler::instance()->createSettingsWidget(fileType, tabWidget);
51
52    if(settingsWidget != 0)
53    {
54        tabWidget->addTab(settingsWidget, PluginHandler::fileTypeName(fileType));
55    }
56}
57
58void setCurrentIndexFromData(QComboBox* comboBox, int data)
59{
60    comboBox->setCurrentIndex(comboBox->findData(data));
61}
62
63int dataFromCurrentIndex(const QComboBox* comboBox)
64{
65    return comboBox->itemData(comboBox->currentIndex()).toInt();
66}
67
68void setCurrentTextToColorName(QComboBox* comboBox, const QColor& color)
69{
70    comboBox->lineEdit()->setText(color.isValid() ? color.name() : QString());
71}
72
73QColor validColorFromCurrentText(const QComboBox* comboBox, const QColor& defaultColor)
74{
75    const QColor color(comboBox->currentText());
76
77    return color.isValid() ? color : defaultColor;
78}
79
80void setCurrentIndexFromKeyboardModifiers(QComboBox* comboBox, const Qt::KeyboardModifiers& modifiers)
81{
82    comboBox->setCurrentIndex(comboBox->findData(static_cast< int >(modifiers)));
83}
84
85Qt::KeyboardModifier keyboardModifierFromCurrentIndex(const QComboBox* comboBox)
86{
87    return static_cast< Qt::KeyboardModifier >(comboBox->itemData(comboBox->currentIndex()).toInt());
88}
89
90} // anonymous
91
92namespace qpdfview
93{
94
95Settings* SettingsDialog::s_settings = 0;
96
97SettingsDialog::SettingsDialog(QWidget* parent) : QDialog(parent)
98{
99    if(s_settings == 0)
100    {
101        s_settings = Settings::instance();
102    }
103
104    setWindowTitle(tr("Settings") + QLatin1String(" - Terepaima"));
105
106    m_graphicsTabWidget = new QTabWidget(this);
107    m_graphicsTabWidget->addTab(new QWidget(this), tr("General"));
108
109    addSettingsWidget(m_graphicsTabWidget, m_pdfSettingsWidget, PluginHandler::PDF);
110    addSettingsWidget(m_graphicsTabWidget, m_psSettingsWidget, PluginHandler::PS);
111    addSettingsWidget(m_graphicsTabWidget, m_djvuSettingsWidget, PluginHandler::DjVu);
112
113    m_graphicsLayout = new QFormLayout(m_graphicsTabWidget->widget(0));
114
115    m_shortcutsTableView = new QTableView(this);
116
117    m_shortcutsTableView->setModel(ShortcutHandler::instance());
118
119    connect(this, SIGNAL(accepted()), ShortcutHandler::instance(), SLOT(submit()));
120    connect(this, SIGNAL(rejected()), ShortcutHandler::instance(), SLOT(revert()));
121
122    m_shortcutsTableView->setFrameShape(QFrame::NoFrame);
123    m_shortcutsTableView->setAlternatingRowColors(true);
124
125#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
126
127    m_shortcutsTableView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
128    m_shortcutsTableView->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch);
129
130#else
131
132    m_shortcutsTableView->horizontalHeader()->setResizeMode(0, QHeaderView::ResizeToContents);
133    m_shortcutsTableView->horizontalHeader()->setResizeMode(1, QHeaderView::Stretch);
134
135#endif // QT_VERSION
136
137    m_shortcutsTableView->verticalHeader()->setVisible(false);
138
139    m_tabWidget = new QTabWidget(this);
140    m_tabWidget->addTab(new QWidget(this), tr("&Behavior"));
141    m_tabWidget->addTab(m_graphicsTabWidget, tr("&Graphics"));
142    m_tabWidget->addTab(new QWidget(this), tr("&Interface"));
143    m_tabWidget->addTab(m_shortcutsTableView, tr("&Shortcuts"));
144    m_tabWidget->addTab(new QWidget(this), tr("&Modifiers"));
145
146    m_dialogButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this);
147    connect(m_dialogButtonBox, SIGNAL(accepted()), SLOT(accept()));
148    connect(m_dialogButtonBox, SIGNAL(rejected()), SLOT(reject()));
149
150    m_defaultsButton = m_dialogButtonBox->addButton(tr("Defaults"), QDialogButtonBox::ResetRole);
151    connect(m_defaultsButton, SIGNAL(clicked()), SLOT(reset()));
152
153    m_defaultsOnCurrentTabButton = m_dialogButtonBox->addButton(tr("Defaults on current tab"), QDialogButtonBox::ResetRole);
154    connect(m_defaultsOnCurrentTabButton, SIGNAL(clicked()), SLOT(resetCurrentTab()));
155
156    m_behaviorLayout = new QFormLayout(m_tabWidget->widget(0));
157    m_interfaceLayout = new QFormLayout(m_tabWidget->widget(2));
158    m_modifiersLayout = new QFormLayout(m_tabWidget->widget(4));
159
160    setLayout(new QVBoxLayout(this));
161    layout()->addWidget(m_tabWidget);
162    layout()->addWidget(m_dialogButtonBox);
163
164    resize(s_settings->mainWindow().settingsDialogSize(sizeHint()));
165
166    createBehaviorTab();
167    createGraphicsTab();
168    createInterfaceTab();
169    createModifiersTab();
170}
171
172SettingsDialog::~SettingsDialog()
173{
174    s_settings->mainWindow().setSettingsDialogSize(size());
175}
176
177void SettingsDialog::accept()
178{
179    QDialog::accept();
180
181    acceptBehaivorTab();
182
183    acceptGraphicsTab();
184
185    acceptInterfaceTab();
186
187    acceptModifiersTab();
188}
189
190void SettingsDialog::reset()
191{
192    resetBehaviorTab();
193
194    resetGraphicsTab();
195
196    resetInterfaceTab();
197
198    ShortcutHandler::instance()->reset();
199
200    resetModifiersTab();
201}
202
203void SettingsDialog::resetCurrentTab()
204{
205    switch(m_tabWidget->currentIndex())
206    {
207    default:
208        reset();
209        break;
210    case 0:
211        resetBehaviorTab();
212        break;
213    case 1:
214        resetGraphicsTab();
215        break;
216    case 2:
217        resetInterfaceTab();
218        break;
219    case 3:
220        ShortcutHandler::instance()->reset();
221        break;
222    case 4:
223        resetModifiersTab();
224        break;
225    }
226}
227
228void SettingsDialog::createBehaviorTab()
229{
230    m_openUrlCheckBox = addCheckBox(m_behaviorLayout, tr("Open URL:"), QString(),
231                                    s_settings->documentView().openUrl());
232
233
234    m_autoRefreshCheckBox = addCheckBox(m_behaviorLayout, tr("Auto-refresh:"), QString(),
235                                        s_settings->documentView().autoRefresh());
236
237
238    m_trackRecentlyUsedCheckBox = addCheckBox(m_behaviorLayout, tr("Track recently used:"), tr("Effective after restart."),
239                                              s_settings->mainWindow().trackRecentlyUsed());
240
241    m_keepRecentlyClosedCheckBox = addCheckBox(m_behaviorLayout, tr("Keep recently closed:"), tr("Effective after restart."),
242                                               s_settings->mainWindow().keepRecentlyClosed());
243
244
245    m_restoreTabsCheckBox = addCheckBox(m_behaviorLayout, tr("Restore tabs:"), QString(),
246                                        s_settings->mainWindow().restoreTabs());
247
248    m_restoreBookmarksCheckBox = addCheckBox(m_behaviorLayout, tr("Restore bookmarks:"), QString(),
249                                             s_settings->mainWindow().restoreBookmarks());
250
251    m_restorePerFileSettingsCheckBox = addCheckBox(m_behaviorLayout, tr("Restore per-file settings:"), QString(),
252                                                   s_settings->mainWindow().restorePerFileSettings());
253
254    m_saveDatabaseInterval = addSpinBox(m_behaviorLayout, tr("Save database interval:"), QString(), tr(" min"), tr("Never"),
255                                        0, 60, 1, s_settings->mainWindow().saveDatabaseInterval() / 1000 / 60);
256
257#ifndef WITH_SQL
258
259    m_restoreTabsCheckBox->setEnabled(false);
260    m_restoreBookmarksCheckBox->setEnabled(false);
261    m_restorePerFileSettingsCheckBox->setEnabled(false);
262    m_saveDatabaseInterval->setEnabled(false);
263
264#endif // WITH_SQL
265
266
267    m_synchronizePresentationCheckBox = addCheckBox(m_behaviorLayout, tr("Synchronize presentation:"), QString(),
268                                                    s_settings->presentationView().synchronize());
269
270    m_presentationScreenSpinBox = addSpinBox(m_behaviorLayout, tr("Presentation screen:"), QString(), QString(), tr("Default"),
271                                             -1, QApplication::desktop()->screenCount() - 1, 1, s_settings->presentationView().screen());
272
273
274    m_synchronizeOutlineViewCheckBox = addCheckBox(m_behaviorLayout, tr("Synchronize outline view:"), QString(),
275                                                   s_settings->mainWindow().synchronizeOutlineView());
276
277
278    m_minimalScrollingCheckBox = addCheckBox(m_behaviorLayout, tr("Minimal scrolling:"), QString(),
279                                               s_settings->documentView().minimalScrolling());
280
281    m_zoomFactorSpinBox = addDoubleSpinBox(m_behaviorLayout, tr("Zoom factor:"), QString(), QString(), QString(),
282                                           1.0, 2.0, 0.05, s_settings->documentView().zoomFactor());
283
284
285    m_highlightDurationSpinBox = addSpinBox(m_behaviorLayout, tr("Highlight duration:"), QString(), tr(" ms"), tr("None"),
286                                            0, 60000, 500, s_settings->documentView().highlightDuration());
287
288    m_highlightColorComboBox = addColorComboBox(m_behaviorLayout, tr("Highlight color:"), QString(),
289                                                s_settings->pageItem().highlightColor());
290
291    m_annotationColorComboBox = addColorComboBox(m_behaviorLayout, tr("Annotation color:"), QString(),
292                                                 s_settings->pageItem().annotationColor());
293
294
295    m_sourceEditorLineEdit = addLineEdit(m_behaviorLayout, tr("Source editor:"), tr("'%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number."),
296                                         s_settings->documentView().sourceEditor());
297}
298
299void SettingsDialog::acceptBehaivorTab()
300{
301    s_settings->documentView().setOpenUrl(m_openUrlCheckBox->isChecked());
302
303    s_settings->documentView().setAutoRefresh(m_autoRefreshCheckBox->isChecked());
304
305    s_settings->mainWindow().setTrackRecentlyUsed(m_trackRecentlyUsedCheckBox->isChecked());
306    s_settings->mainWindow().setKeepRecentlyClosed(m_keepRecentlyClosedCheckBox->isChecked());
307
308    s_settings->mainWindow().setRestoreTabs(m_restoreTabsCheckBox->isChecked());
309    s_settings->mainWindow().setRestoreBookmarks(m_restoreBookmarksCheckBox->isChecked());
310    s_settings->mainWindow().setRestorePerFileSettings(m_restorePerFileSettingsCheckBox->isChecked());
311    s_settings->mainWindow().setSaveDatabaseInterval(m_saveDatabaseInterval->value() * 60 * 1000);
312
313    s_settings->presentationView().setSynchronize(m_synchronizePresentationCheckBox->isChecked());
314    s_settings->presentationView().setScreen(m_presentationScreenSpinBox->value());
315
316    s_settings->mainWindow().setSynchronizeOutlineView(m_synchronizeOutlineViewCheckBox->isChecked());
317
318    s_settings->documentView().setMinimalScrolling(m_minimalScrollingCheckBox->isChecked());
319    s_settings->documentView().setZoomFactor(m_zoomFactorSpinBox->value());
320
321    s_settings->documentView().setHighlightDuration(m_highlightDurationSpinBox->value());
322    s_settings->pageItem().setHighlightColor(validColorFromCurrentText(m_highlightColorComboBox, Defaults::PageItem::highlightColor()));
323    s_settings->pageItem().setAnnotationColor(validColorFromCurrentText(m_annotationColorComboBox, Defaults::PageItem::annotationColor()));
324
325    s_settings->documentView().setSourceEditor(m_sourceEditorLineEdit->text());
326}
327
328void SettingsDialog::resetBehaviorTab()
329{
330    m_openUrlCheckBox->setChecked(Defaults::DocumentView::openUrl());
331
332    m_autoRefreshCheckBox->setChecked(Defaults::DocumentView::autoRefresh());
333
334    m_trackRecentlyUsedCheckBox->setChecked(Defaults::MainWindow::trackRecentlyUsed());
335    m_keepRecentlyClosedCheckBox->setChecked(Defaults::MainWindow::keepRecentlyClosed());
336
337    m_restoreTabsCheckBox->setChecked(Defaults::MainWindow::restoreTabs());
338    m_restoreBookmarksCheckBox->setChecked(Defaults::MainWindow::restoreBookmarks());
339    m_restorePerFileSettingsCheckBox->setChecked(Defaults::MainWindow::restorePerFileSettings());
340    m_saveDatabaseInterval->setValue(Defaults::MainWindow::saveDatabaseInterval());
341
342    m_synchronizePresentationCheckBox->setChecked(Defaults::PresentationView::synchronize());
343    m_presentationScreenSpinBox->setValue(Defaults::PresentationView::screen());
344
345    m_synchronizeOutlineViewCheckBox->setChecked(Defaults::MainWindow::synchronizeOutlineView());
346
347    m_minimalScrollingCheckBox->setChecked(Defaults::DocumentView::minimalScrolling());
348    m_zoomFactorSpinBox->setValue(Defaults::DocumentView::zoomFactor());
349
350    m_highlightDurationSpinBox->setValue(Defaults::DocumentView::highlightDuration());
351    setCurrentTextToColorName(m_highlightColorComboBox, Defaults::PageItem::highlightColor());
352    setCurrentTextToColorName(m_annotationColorComboBox, Defaults::PageItem::annotationColor());
353
354    m_sourceEditorLineEdit->clear();
355}
356
357void SettingsDialog::createGraphicsTab()
358{
359    m_useTilingCheckBox = addCheckBox(m_graphicsLayout, tr("Use tiling:"), QString(),
360                                      s_settings->pageItem().useTiling());
361
362    m_keepObsoletePixmapsCheckBox = addCheckBox(m_graphicsLayout, tr("Keep obsolete pixmaps:"), QString(),
363                                                s_settings->pageItem().keepObsoletePixmaps());
364
365    m_useDevicePixelRatioCheckBox = addCheckBox(m_graphicsLayout, tr("Use device pixel ratio:"), QString(),
366                                                s_settings->pageItem().useDevicePixelRatio());
367
368#if QT_VERSION < QT_VERSION_CHECK(5,1,0)
369
370    m_useDevicePixelRatioCheckBox->setEnabled(false);
371
372#endif // QT_VERSION
373
374
375    m_decoratePagesCheckBox = addCheckBox(m_graphicsLayout, tr("Decorate pages:"), QString(),
376                                          s_settings->pageItem().decoratePages());
377
378    m_decorateLinksCheckBox = addCheckBox(m_graphicsLayout, tr("Decorate links:"), QString(),
379                                          s_settings->pageItem().decorateLinks());
380
381    m_decorateFormFieldsCheckBox = addCheckBox(m_graphicsLayout, tr("Decorate form fields:"), QString(),
382                                               s_settings->pageItem().decorateFormFields());
383
384
385    m_backgroundColorComboBox = addColorComboBox(m_graphicsLayout, tr("Background color:"), QString(),
386                                                 s_settings->pageItem().backgroundColor());
387
388    m_paperColorComboBox = addColorComboBox(m_graphicsLayout, tr("Paper color:"), QString(),
389                                            s_settings->pageItem().paperColor());
390
391    m_presentationBackgroundColorComboBox = addColorComboBox(m_graphicsLayout, tr("Presentation background color:"), QString(),
392                                                             s_settings->presentationView().backgroundColor());
393
394
395    m_pagesPerRowSpinBox = addSpinBox(m_graphicsLayout, tr("Pages per row:"), QString(), QString(), QString(),
396                                      1, 10, 1, s_settings->documentView().pagesPerRow());
397
398
399    m_pageSpacingSpinBox = addDoubleSpinBox(m_graphicsLayout, tr("Page spacing:"), QString(), tr(" px"), QString(),
400                                            0.0, 25.0, 0.25, s_settings->documentView().pageSpacing());
401
402    m_thumbnailSpacingSpinBox = addDoubleSpinBox(m_graphicsLayout, tr("Thumbnail spacing:"), QString(), tr(" px"), QString(),
403                                                 0.0, 25.0, 0.25, s_settings->documentView().thumbnailSpacing());
404
405
406    m_thumbnailSizeSpinBox = addDoubleSpinBox(m_graphicsLayout, tr("Thumbnail size:"), QString(), tr(" px"), tr("Fit to viewport"),
407                                              0.0, 1800.0, 25.0, s_settings->documentView().thumbnailSize());
408
409
410    m_cacheSizeComboBox = addDataSizeComboBox(m_graphicsLayout, tr("Cache size:"), QString(),
411                                              s_settings->pageItem().cacheSize());
412
413    m_prefetchCheckBox = addCheckBox(m_graphicsLayout, tr("Prefetch:"), QString(),
414                                     s_settings->documentView().prefetch());
415
416    m_prefetchDistanceSpinBox = addSpinBox(m_graphicsLayout, tr("Prefetch distance:"), QString(), QString(), QString(),
417                                           1, 10, 1, s_settings->documentView().prefetchDistance());
418}
419
420void SettingsDialog::acceptGraphicsTab()
421{
422    s_settings->pageItem().setUseTiling(m_useTilingCheckBox->isChecked());
423    s_settings->pageItem().setKeepObsoletePixmaps(m_keepObsoletePixmapsCheckBox->isChecked());
424    s_settings->pageItem().setUseDevicePixelRatio(m_useDevicePixelRatioCheckBox->isChecked());
425
426    s_settings->pageItem().setDecoratePages(m_decoratePagesCheckBox->isChecked());
427    s_settings->pageItem().setDecorateLinks(m_decorateLinksCheckBox->isChecked());
428    s_settings->pageItem().setDecorateFormFields(m_decorateFormFieldsCheckBox->isChecked());
429
430    s_settings->pageItem().setBackgroundColor(validColorFromCurrentText(m_backgroundColorComboBox, Defaults::PageItem::backgroundColor()));
431    s_settings->pageItem().setPaperColor(validColorFromCurrentText(m_paperColorComboBox, Defaults::PageItem::paperColor()));
432    s_settings->presentationView().setBackgroundColor(validColorFromCurrentText(m_presentationBackgroundColorComboBox, Defaults::PresentationView::backgroundColor()));
433
434    s_settings->documentView().setPagesPerRow(m_pagesPerRowSpinBox->value());
435
436    s_settings->documentView().setPageSpacing(m_pageSpacingSpinBox->value());
437    s_settings->documentView().setThumbnailSpacing(m_thumbnailSpacingSpinBox->value());
438
439    s_settings->documentView().setThumbnailSize(m_thumbnailSizeSpinBox->value());
440
441    s_settings->pageItem().setCacheSize(dataFromCurrentIndex(m_cacheSizeComboBox));
442    s_settings->documentView().setPrefetch(m_prefetchCheckBox->isChecked());
443    s_settings->documentView().setPrefetchDistance(m_prefetchDistanceSpinBox->value());
444
445    if(m_pdfSettingsWidget != 0)
446    {
447        m_pdfSettingsWidget->accept();
448    }
449
450    if(m_psSettingsWidget != 0)
451    {
452        m_psSettingsWidget->accept();
453    }
454
455    if(m_djvuSettingsWidget != 0)
456    {
457        m_djvuSettingsWidget->accept();
458    }
459}
460
461void SettingsDialog::resetGraphicsTab()
462{
463    m_useTilingCheckBox->setChecked(Defaults::PageItem::useTiling());
464    m_keepObsoletePixmapsCheckBox->setChecked(Defaults::PageItem::keepObsoletePixmaps());
465    m_useDevicePixelRatioCheckBox->setChecked(Defaults::PageItem::useDevicePixelRatio());
466
467    m_decoratePagesCheckBox->setChecked(Defaults::PageItem::decoratePages());
468    m_decorateLinksCheckBox->setChecked(Defaults::PageItem::decorateLinks());
469    m_decorateFormFieldsCheckBox->setChecked(Defaults::PageItem::decorateFormFields());
470
471    setCurrentTextToColorName(m_backgroundColorComboBox, Defaults::PageItem::backgroundColor());
472    setCurrentTextToColorName(m_paperColorComboBox, Defaults::PageItem::paperColor());
473    setCurrentTextToColorName(m_presentationBackgroundColorComboBox, Defaults::PresentationView::backgroundColor());
474
475    m_pagesPerRowSpinBox->setValue(Defaults::DocumentView::pagesPerRow());
476
477    m_pageSpacingSpinBox->setValue(Defaults::DocumentView::pageSpacing());
478    m_thumbnailSpacingSpinBox->setValue(Defaults::DocumentView::thumbnailSpacing());
479
480    m_thumbnailSizeSpinBox->setValue(Defaults::DocumentView::thumbnailSize());
481
482    setCurrentIndexFromData(m_cacheSizeComboBox, Defaults::PageItem::cacheSize());
483    m_prefetchCheckBox->setChecked(Defaults::DocumentView::prefetch());
484    m_prefetchDistanceSpinBox->setValue(Defaults::DocumentView::prefetchDistance());
485
486    if(m_pdfSettingsWidget != 0)
487    {
488        m_pdfSettingsWidget->reset();
489    }
490
491    if(m_psSettingsWidget != 0)
492    {
493        m_psSettingsWidget->reset();
494    }
495
496    if(m_djvuSettingsWidget != 0)
497    {
498        m_djvuSettingsWidget->reset();
499    }
500}
501
502void SettingsDialog::createInterfaceTab()
503{
504    m_extendedSearchDock = addCheckBox(m_interfaceLayout, tr("Extended search dock:"), tr("Effective after restart."),
505                                       s_settings->mainWindow().extendedSearchDock());
506
507    m_annotationOverlayCheckBox = addCheckBox(m_interfaceLayout, tr("Annotation overlay:"), QString(),
508                                              s_settings->pageItem().annotationOverlay());
509
510    m_formFieldOverlayCheckBox = addCheckBox(m_interfaceLayout, tr("Form field overlay:"), QString(),
511                                             s_settings->pageItem().formFieldOverlay());
512
513
514    m_tabPositionComboBox = addComboBox(m_interfaceLayout, tr("Tab position:"), QString(),
515                                        QStringList() << tr("Top") << tr("Bottom") << tr("Left") << tr("Right"),
516                                        QList< int >() << QTabWidget::North << QTabWidget::South << QTabWidget::West << QTabWidget::East,
517                                        s_settings->mainWindow().tabPosition());
518
519    m_tabVisibilityComboBox = addComboBox(m_interfaceLayout, tr("Tab visibility:"), QString(),
520                                          QStringList() << tr("As needed") << tr("Always") << tr("Never"),
521                                          QList< int >() << TabWidget::TabBarAsNeeded << TabWidget::TabBarAlwaysOn << TabWidget::TabBarAlwaysOff,
522                                          s_settings->mainWindow().tabVisibility());
523
524    m_spreadTabsCheckBox = addCheckBox(m_interfaceLayout, tr("Spread tabs:"), QString(),
525                                       s_settings->mainWindow().spreadTabs());
526
527
528    m_newTabNextToCurrentTabCheckBox = addCheckBox(m_interfaceLayout, tr("New tab next to current tab:"), QString(),
529                                                   s_settings->mainWindow().newTabNextToCurrentTab());
530
531    m_exitAfterLastTabCheckBox = addCheckBox(m_interfaceLayout, tr("Exit after last tab:"), QString(),
532                                             s_settings->mainWindow().exitAfterLastTab());
533
534
535    m_recentlyUsedCountSpinBox = addSpinBox(m_interfaceLayout, tr("Recently used count:"), tr("Effective after restart."), QString(), QString(),
536                                            1, 50, 1, s_settings->mainWindow().recentlyUsedCount());
537
538    m_recentlyClosedCountSpinBox = addSpinBox(m_interfaceLayout, tr("Recently closed count:"), tr("Effective after restart."), QString(), QString(),
539                                              1, 25, 1, s_settings->mainWindow().recentlyClosedCount());
540
541
542    m_fileToolBarLineEdit = addLineEdit(m_interfaceLayout, tr("File tool bar:"), tr("Effective after restart."),
543                                        s_settings->mainWindow().fileToolBar().join(","));
544
545    m_editToolBarLineEdit = addLineEdit(m_interfaceLayout, tr("Edit tool bar:"), tr("Effective after restart."),
546                                        s_settings->mainWindow().editToolBar().join(","));
547
548    m_viewToolBarLineEdit = addLineEdit(m_interfaceLayout, tr("View tool bar:"), tr("Effective after restart."),
549                                        s_settings->mainWindow().viewToolBar().join(","));
550
551    m_documentContextMenuLineEdit = addLineEdit(m_interfaceLayout, tr("Document context menu:"), QString(),
552                                                s_settings->mainWindow().documentContextMenu().join(","));
553
554    m_tabContextMenuLineEdit = addLineEdit(m_interfaceLayout, tr("Tab context menu:"), QString(),
555                                           s_settings->mainWindow().tabContextMenu().join(","));
556
557    m_scrollableMenusCheckBox = addCheckBox(m_interfaceLayout, tr("Scrollable menus:"), tr("Effective after restart."),
558                                            s_settings->mainWindow().scrollableMenus());
559
560    m_searchableMenusCheckBox = addCheckBox(m_interfaceLayout, tr("Searchable menus:"), QString(),
561                                            s_settings->mainWindow().searchableMenus());
562
563
564    m_toggleToolAndMenuBarsWithFullscreenCheckBox = addCheckBox(m_interfaceLayout, tr("Toggle tool and menu bars with fullscreen:"), QString(),
565                                                                s_settings->mainWindow().toggleToolAndMenuBarsWithFullscreen());
566
567
568    m_usePageLabelCheckBox = addCheckBox(m_interfaceLayout, tr("Use page label:"), QString(),
569                                         s_settings->mainWindow().usePageLabel());
570
571    m_documentTitleAsTabTitleCheckBox = addCheckBox(m_interfaceLayout, tr("Document title as tab title:"), QString(),
572                                                    s_settings->mainWindow().documentTitleAsTabTitle());
573
574
575    m_currentPageInWindowTitleCheckBox = addCheckBox(m_interfaceLayout, tr("Current page in window title:"), QString(),
576                                                     s_settings->mainWindow().currentPageInWindowTitle());
577
578    m_instanceNameInWindowTitleCheckBox = addCheckBox(m_interfaceLayout, tr("Instance name in window title:"), QString(),
579                                                      s_settings->mainWindow().instanceNameInWindowTitle());
580
581
582    m_highlightCurrentThumbnailCheckBox = addCheckBox(m_interfaceLayout, tr("Highlight current thumbnail:"), QString(),
583                                                      s_settings->documentView().highlightCurrentThumbnail());
584
585    m_limitThumbnailsToResultsCheckBox = addCheckBox(m_interfaceLayout, tr("Limit thumbnails to results:"), QString(),
586                                                     s_settings->documentView().limitThumbnailsToResults());
587}
588
589void SettingsDialog::acceptInterfaceTab()
590{
591    s_settings->mainWindow().setExtendedSearchDock(m_extendedSearchDock->isChecked());
592
593    s_settings->pageItem().setAnnotationOverlay(m_annotationOverlayCheckBox->isChecked());
594    s_settings->pageItem().setFormFieldOverlay(m_formFieldOverlayCheckBox);
595
596    s_settings->mainWindow().setTabPosition(dataFromCurrentIndex(m_tabPositionComboBox));
597    s_settings->mainWindow().setTabVisibility(dataFromCurrentIndex(m_tabVisibilityComboBox));
598    s_settings->mainWindow().setSpreadTabs(m_spreadTabsCheckBox->isChecked());
599
600    s_settings->mainWindow().setNewTabNextToCurrentTab(m_newTabNextToCurrentTabCheckBox->isChecked());
601    s_settings->mainWindow().setExitAfterLastTab(m_exitAfterLastTabCheckBox->isChecked());
602
603    s_settings->mainWindow().setRecentlyUsedCount(m_recentlyUsedCountSpinBox->value());
604    s_settings->mainWindow().setRecentlyClosedCount(m_recentlyClosedCountSpinBox->value());
605
606    s_settings->mainWindow().setFileToolBar(m_fileToolBarLineEdit->text().split(",", QString::SkipEmptyParts));
607    s_settings->mainWindow().setEditToolBar(m_editToolBarLineEdit->text().split(",", QString::SkipEmptyParts));
608    s_settings->mainWindow().setViewToolBar(m_viewToolBarLineEdit->text().split(",", QString::SkipEmptyParts));
609
610    s_settings->mainWindow().setDocumentContextMenu(m_documentContextMenuLineEdit->text().split(",", QString::SkipEmptyParts));
611    s_settings->mainWindow().setTabContextMenu(m_tabContextMenuLineEdit->text().split(",", QString::SkipEmptyParts));
612
613    s_settings->mainWindow().setScrollableMenus(m_scrollableMenusCheckBox->isChecked());
614    s_settings->mainWindow().setSearchableMenus(m_searchableMenusCheckBox->isChecked());
615
616    s_settings->mainWindow().setToggleToolAndMenuBarsWithFullscreen(m_toggleToolAndMenuBarsWithFullscreenCheckBox->isChecked());
617
618    s_settings->mainWindow().setUsePageLabel(m_usePageLabelCheckBox->isChecked());
619    s_settings->mainWindow().setDocumentTitleAsTabTitle(m_documentTitleAsTabTitleCheckBox->isChecked());
620
621    s_settings->mainWindow().setCurrentPageInWindowTitle(m_currentPageInWindowTitleCheckBox->isChecked());
622    s_settings->mainWindow().setInstanceNameInWindowTitle(m_instanceNameInWindowTitleCheckBox->isChecked());
623
624    s_settings->documentView().setHighlightCurrentThumbnail(m_highlightCurrentThumbnailCheckBox->isChecked());
625    s_settings->documentView().setLimitThumbnailsToResults(m_limitThumbnailsToResultsCheckBox->isChecked());
626}
627
628void SettingsDialog::resetInterfaceTab()
629{
630    m_extendedSearchDock->setChecked(Defaults::MainWindow::extendedSearchDock());
631
632    m_annotationOverlayCheckBox->setChecked(Defaults::PageItem::annotationOverlay());
633    m_formFieldOverlayCheckBox->setChecked(Defaults::PageItem::formFieldOverlay());
634
635    setCurrentIndexFromData(m_tabPositionComboBox, Defaults::MainWindow::tabPosition());
636    setCurrentIndexFromData(m_tabVisibilityComboBox, Defaults::MainWindow::tabVisibility());
637    m_spreadTabsCheckBox->setChecked(Defaults::MainWindow::spreadTabs());
638
639    m_newTabNextToCurrentTabCheckBox->setChecked(Defaults::MainWindow::newTabNextToCurrentTab());
640    m_exitAfterLastTabCheckBox->setChecked(Defaults::MainWindow::exitAfterLastTab());
641
642    m_recentlyUsedCountSpinBox->setValue(Defaults::MainWindow::recentlyUsedCount());
643    m_recentlyClosedCountSpinBox->setValue(Defaults::MainWindow::recentlyClosedCount());
644
645    m_fileToolBarLineEdit->setText(Defaults::MainWindow::fileToolBar().join(","));
646    m_editToolBarLineEdit->setText(Defaults::MainWindow::editToolBar().join(","));
647    m_viewToolBarLineEdit->setText(Defaults::MainWindow::viewToolBar().join(","));
648
649    m_documentContextMenuLineEdit->setText(Defaults::MainWindow::documentContextMenu().join(","));
650    m_tabContextMenuLineEdit->setText(Defaults::MainWindow::tabContexntMenu().join(","));
651
652    m_scrollableMenusCheckBox->setChecked(Defaults::MainWindow::scrollableMenus());
653    m_searchableMenusCheckBox->setChecked(Defaults::MainWindow::searchableMenus());
654
655    m_toggleToolAndMenuBarsWithFullscreenCheckBox->setChecked(Defaults::MainWindow::toggleToolAndMenuBarsWithFullscreen());
656
657    m_usePageLabelCheckBox->setChecked(Defaults::MainWindow::usePageLabel());
658    m_documentTitleAsTabTitleCheckBox->setChecked(Defaults::MainWindow::documentTitleAsTabTitle());
659
660    m_currentPageInWindowTitleCheckBox->setChecked(Defaults::MainWindow::currentPageInWindowTitle());
661    m_instanceNameInWindowTitleCheckBox->setChecked(Defaults::MainWindow::instanceNameInWindowTitle());
662
663    m_highlightCurrentThumbnailCheckBox->setChecked(Defaults::DocumentView::highlightCurrentThumbnail());
664    m_limitThumbnailsToResultsCheckBox->setChecked(Defaults::DocumentView::limitThumbnailsToResults());
665}
666
667void SettingsDialog::createModifiersTab()
668{
669    m_zoomModifiersComboBox = addModifiersComboBox(m_modifiersLayout, tr("Zoom:"), QString(),
670                                                   s_settings->documentView().zoomModifiers());
671
672    m_rotateModifiersComboBox = addModifiersComboBox(m_modifiersLayout, tr("Rotate:"), QString(),
673                                                     s_settings->documentView().rotateModifiers());
674
675    m_scrollModifiersComboBox = addModifiersComboBox(m_modifiersLayout, tr("Scroll:"), QString(),
676                                                     s_settings->documentView().scrollModifiers());
677
678
679    m_copyToClipboardModifiersComboBox = addModifiersComboBox(m_modifiersLayout, tr("Copy to clipboard:"), QString(),
680                                                              s_settings->pageItem().copyToClipboardModifiers());
681
682    m_addAnnotationModifiersComboBox = addModifiersComboBox(m_modifiersLayout, tr("Add annotation:"), QString(),
683                                                            s_settings->pageItem().addAnnotationModifiers());
684
685    m_zoomToSelectionModifiersComboBox = addModifiersComboBox(m_modifiersLayout, tr("Zoom to selection:"), QString(),
686                                                              s_settings->pageItem().zoomToSelectionModifiers());
687}
688
689void SettingsDialog::acceptModifiersTab()
690{
691    s_settings->documentView().setZoomModifiers(keyboardModifierFromCurrentIndex(m_zoomModifiersComboBox));
692    s_settings->documentView().setRotateModifiers(keyboardModifierFromCurrentIndex(m_rotateModifiersComboBox));
693    s_settings->documentView().setScrollModifiers(keyboardModifierFromCurrentIndex(m_scrollModifiersComboBox));
694
695    s_settings->pageItem().setCopyToClipboardModifiers(keyboardModifierFromCurrentIndex(m_copyToClipboardModifiersComboBox));
696    s_settings->pageItem().setAddAnnotationModifiers(keyboardModifierFromCurrentIndex(m_addAnnotationModifiersComboBox));
697    s_settings->pageItem().setZoomToSelectionModifiers(keyboardModifierFromCurrentIndex(m_zoomToSelectionModifiersComboBox));
698}
699
700void SettingsDialog::resetModifiersTab()
701{
702    setCurrentIndexFromKeyboardModifiers(m_zoomModifiersComboBox, Defaults::DocumentView::zoomModifiers());
703    setCurrentIndexFromKeyboardModifiers(m_rotateModifiersComboBox, Defaults::DocumentView::rotateModifiers());
704    setCurrentIndexFromKeyboardModifiers(m_scrollModifiersComboBox, Defaults::DocumentView::scrollModifiers());
705
706    setCurrentIndexFromKeyboardModifiers(m_copyToClipboardModifiersComboBox, Defaults::PageItem::copyToClipboardModifiers());
707    setCurrentIndexFromKeyboardModifiers(m_addAnnotationModifiersComboBox, Defaults::PageItem::addAnnotationModifiers());
708    setCurrentIndexFromKeyboardModifiers(m_zoomToSelectionModifiersComboBox, Defaults::PageItem::zoomToSelectionModifiers());
709}
710
711QCheckBox* SettingsDialog::addCheckBox(QFormLayout* layout, const QString& label, const QString& toolTip, bool checked)
712{
713    QCheckBox* checkBox = new QCheckBox(this);
714    checkBox->setChecked(checked);
715
716    checkBox->setToolTip(toolTip);
717    layout->addRow(label, checkBox);
718
719    return checkBox;
720}
721
722QLineEdit* SettingsDialog::addLineEdit(QFormLayout* layout, const QString& label, const QString& toolTip, const QString& text)
723{
724    QLineEdit* lineEdit = new QLineEdit(this);
725    lineEdit->setText(text);
726
727    lineEdit->setToolTip(toolTip);
728    layout->addRow(label, lineEdit);
729
730    return lineEdit;
731}
732
733QSpinBox* SettingsDialog::addSpinBox(QFormLayout* layout, const QString& label, const QString& toolTip, const QString& suffix, const QString& special, int min, int max, int step, int val)
734{
735    QSpinBox* spinBox = new QSpinBox(this);
736    spinBox->setRange(min, max);
737    spinBox->setSingleStep(step);
738    spinBox->setValue(val);
739
740    spinBox->setSuffix(suffix);
741    spinBox->setSpecialValueText(special);
742
743    spinBox->setToolTip(toolTip);
744    layout->addRow(label, spinBox);
745
746    return spinBox;
747}
748
749QDoubleSpinBox* SettingsDialog::addDoubleSpinBox(QFormLayout* layout, const QString& label, const QString& toolTip, const QString& suffix, const QString& special, double min, double max, double step, double val)
750{
751    QDoubleSpinBox* spinBox = new QDoubleSpinBox(this);
752    spinBox->setRange(min, max);
753    spinBox->setSingleStep(step);
754    spinBox->setValue(val);
755
756    spinBox->setSuffix(suffix);
757    spinBox->setSpecialValueText(special);
758
759    spinBox->setToolTip(toolTip);
760    layout->addRow(label, spinBox);
761
762    return spinBox;
763}
764
765QComboBox* SettingsDialog::addComboBox(QFormLayout* layout, const QString& label, const QString& toolTip, const QStringList& text, const QList< int >& data, int value)
766{
767    QComboBox* comboBox = new QComboBox(this);
768
769    for(int index = 0, count = text.count(); index < count; ++index)
770    {
771        comboBox->addItem(text.at(index), data.at(index));
772    }
773
774    setCurrentIndexFromData(comboBox, value);
775
776    comboBox->setToolTip(toolTip);
777    layout->addRow(label, comboBox);
778
779    return comboBox;
780}
781
782QComboBox* SettingsDialog::addDataSizeComboBox(QFormLayout* layout, const QString& label, const QString& toolTip, int dataSize)
783{
784    QComboBox* comboBox = new QComboBox(this);
785
786    comboBox->addItem(tr("%1 MB").arg(0), 0);
787    comboBox->addItem(tr("%1 MB").arg(8), 8 << 20);
788    comboBox->addItem(tr("%1 MB").arg(16), 16 << 20);
789    comboBox->addItem(tr("%1 MB").arg(32), 32 << 20);
790    comboBox->addItem(tr("%1 MB").arg(64), 64 << 20);
791    comboBox->addItem(tr("%1 MB").arg(128), 128 << 20);
792    comboBox->addItem(tr("%1 MB").arg(256), 256 << 20);
793    comboBox->addItem(tr("%1 MB").arg(512), 512 << 20);
794    comboBox->addItem(tr("%1 MB").arg(1024), 1024 << 20);
795    comboBox->addItem(tr("%1 MB").arg(2048), INT_MAX);
796
797    int currentIndex = comboBox->findData(dataSize);
798
799    if(currentIndex == -1)
800    {
801        currentIndex = comboBox->count();
802
803        comboBox->addItem(tr("%1 MB").arg(dataSize >> 20), dataSize);
804    }
805
806    comboBox->setCurrentIndex(currentIndex);
807
808    comboBox->setToolTip(toolTip);
809    layout->addRow(label, comboBox);
810
811    return comboBox;
812}
813
814QComboBox* SettingsDialog::addColorComboBox(QFormLayout* layout, const QString& label, const QString& toolTip, const QColor& color)
815{
816    QComboBox* comboBox = new QComboBox(this);
817    comboBox->setEditable(true);
818    comboBox->setInsertPolicy(QComboBox::NoInsert);
819    comboBox->addItems(QColor::colorNames());
820
821    setCurrentTextToColorName(comboBox, color);
822
823    comboBox->setToolTip(toolTip);
824    layout->addRow(label, comboBox);
825
826    return comboBox;
827}
828
829QComboBox* SettingsDialog::addModifiersComboBox(QFormLayout* layout, const QString& label, const QString& toolTip, const Qt::KeyboardModifiers& modifiers)
830{
831    QComboBox* comboBox = new QComboBox(this);
832    comboBox->addItem(QShortcut::tr("Shift"), static_cast< int >(Qt::ShiftModifier));
833    comboBox->addItem(QShortcut::tr("Ctrl"), static_cast< int >(Qt::ControlModifier));
834    comboBox->addItem(QShortcut::tr("Alt"), static_cast< int >(Qt::AltModifier));
835    comboBox->addItem(QShortcut::tr("Shift and Ctrl"), static_cast< int >(Qt::ShiftModifier | Qt::ControlModifier));
836    comboBox->addItem(QShortcut::tr("Shift and Alt"), static_cast< int >(Qt::ShiftModifier | Qt::AltModifier));
837    comboBox->addItem(QShortcut::tr("Ctrl and Alt"), static_cast< int >(Qt::ControlModifier | Qt::AltModifier));
838    comboBox->addItem(QShortcut::tr("Right mouse button"), static_cast< int >(Qt::RightButton));
839    comboBox->addItem(QShortcut::tr("Middle mouse button"), static_cast< int >(Qt::MidButton));
840
841    setCurrentIndexFromKeyboardModifiers(comboBox, modifiers);
842
843    comboBox->setToolTip(toolTip);
844    layout->addRow(label, comboBox);
845
846    return comboBox;
847}
848
849} // qpdfview
Note: See TracBrowser for help on using the repository browser.