xref: /glogg/src/optionsdialog.cpp (revision 11582726a85c08832d009bfe179074b8d1152d21)
1bb02e0acSNicolas Bonnefon /*
2bb02e0acSNicolas Bonnefon  * Copyright (C) 2009, 2010, 2011, 2013 Nicolas Bonnefon and other contributors
3bb02e0acSNicolas Bonnefon  *
4bb02e0acSNicolas Bonnefon  * This file is part of glogg.
5bb02e0acSNicolas Bonnefon  *
6bb02e0acSNicolas Bonnefon  * glogg is free software: you can redistribute it and/or modify
7bb02e0acSNicolas Bonnefon  * it under the terms of the GNU General Public License as published by
8bb02e0acSNicolas Bonnefon  * the Free Software Foundation, either version 3 of the License, or
9bb02e0acSNicolas Bonnefon  * (at your option) any later version.
10bb02e0acSNicolas Bonnefon  *
11bb02e0acSNicolas Bonnefon  * glogg is distributed in the hope that it will be useful,
12bb02e0acSNicolas Bonnefon  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13bb02e0acSNicolas Bonnefon  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14bb02e0acSNicolas Bonnefon  * GNU General Public License for more details.
15bb02e0acSNicolas Bonnefon  *
16bb02e0acSNicolas Bonnefon  * You should have received a copy of the GNU General Public License
17bb02e0acSNicolas Bonnefon  * along with glogg.  If not, see <http://www.gnu.org/licenses/>.
18bb02e0acSNicolas Bonnefon  */
19bb02e0acSNicolas Bonnefon 
20bb02e0acSNicolas Bonnefon #include <QtGui>
21bb02e0acSNicolas Bonnefon 
22bb02e0acSNicolas Bonnefon #include "optionsdialog.h"
23bb02e0acSNicolas Bonnefon 
24bb02e0acSNicolas Bonnefon #include "log.h"
25bb02e0acSNicolas Bonnefon #include "persistentinfo.h"
26bb02e0acSNicolas Bonnefon #include "configuration.h"
27bb02e0acSNicolas Bonnefon 
28bb02e0acSNicolas Bonnefon // Constructor
29bb02e0acSNicolas Bonnefon OptionsDialog::OptionsDialog( QWidget* parent ) : QDialog(parent)
30bb02e0acSNicolas Bonnefon {
31bb02e0acSNicolas Bonnefon     setupUi( this );
32bb02e0acSNicolas Bonnefon 
33bb02e0acSNicolas Bonnefon     setupFontList();
34bb02e0acSNicolas Bonnefon     setupRegexp();
35bb02e0acSNicolas Bonnefon 
36bb02e0acSNicolas Bonnefon     connect(buttonBox, SIGNAL( clicked( QAbstractButton* ) ),
37bb02e0acSNicolas Bonnefon             this, SLOT( onButtonBoxClicked( QAbstractButton* ) ) );
38bb02e0acSNicolas Bonnefon     connect(fontFamilyBox, SIGNAL( currentIndexChanged(const QString& ) ),
39bb02e0acSNicolas Bonnefon             this, SLOT( updateFontSize( const QString& ) ));
40bb02e0acSNicolas Bonnefon     connect(incrementalCheckBox, SIGNAL( toggled( bool ) ),
41bb02e0acSNicolas Bonnefon             this, SLOT( onIncrementalChanged() ) );
42bb02e0acSNicolas Bonnefon 
43bb02e0acSNicolas Bonnefon     updateDialogFromConfig();
44bb02e0acSNicolas Bonnefon 
45bb02e0acSNicolas Bonnefon     setupIncremental();
46bb02e0acSNicolas Bonnefon }
47bb02e0acSNicolas Bonnefon 
48bb02e0acSNicolas Bonnefon //
49bb02e0acSNicolas Bonnefon // Private functions
50bb02e0acSNicolas Bonnefon //
51bb02e0acSNicolas Bonnefon 
52bb02e0acSNicolas Bonnefon // Populates the 'family' ComboBox
53bb02e0acSNicolas Bonnefon void OptionsDialog::setupFontList()
54bb02e0acSNicolas Bonnefon {
55bb02e0acSNicolas Bonnefon     QFontDatabase database;
56bb02e0acSNicolas Bonnefon 
57bb02e0acSNicolas Bonnefon     // We only show the fixed fonts
58bb02e0acSNicolas Bonnefon     foreach ( const QString &str, database.families() ) {
59bb02e0acSNicolas Bonnefon          if ( database.isFixedPitch( str ) )
60bb02e0acSNicolas Bonnefon              fontFamilyBox->addItem( str );
61bb02e0acSNicolas Bonnefon      }
62bb02e0acSNicolas Bonnefon }
63bb02e0acSNicolas Bonnefon 
64bb02e0acSNicolas Bonnefon // Populate the regexp ComboBoxes
65bb02e0acSNicolas Bonnefon void OptionsDialog::setupRegexp()
66bb02e0acSNicolas Bonnefon {
67bb02e0acSNicolas Bonnefon     QStringList regexpTypes;
68bb02e0acSNicolas Bonnefon 
69bb02e0acSNicolas Bonnefon     regexpTypes << tr("Extended Regexp")
70bb02e0acSNicolas Bonnefon         << tr("Wildcards") << tr("Fixed Strings");
71bb02e0acSNicolas Bonnefon 
72bb02e0acSNicolas Bonnefon     mainSearchBox->addItems( regexpTypes );
73bb02e0acSNicolas Bonnefon     quickFindSearchBox->addItems( regexpTypes );
74bb02e0acSNicolas Bonnefon }
75bb02e0acSNicolas Bonnefon 
76bb02e0acSNicolas Bonnefon // Enable/disable the QuickFind options depending on the state
77bb02e0acSNicolas Bonnefon // of the "incremental" checkbox.
78bb02e0acSNicolas Bonnefon void OptionsDialog::setupIncremental()
79bb02e0acSNicolas Bonnefon {
80bb02e0acSNicolas Bonnefon     if ( incrementalCheckBox->isChecked() ) {
81bb02e0acSNicolas Bonnefon         quickFindSearchBox->setCurrentIndex(
82bb02e0acSNicolas Bonnefon                 getRegexpIndex( FixedString ) );
83bb02e0acSNicolas Bonnefon         quickFindSearchBox->setEnabled( false );
84bb02e0acSNicolas Bonnefon     }
85bb02e0acSNicolas Bonnefon     else {
86bb02e0acSNicolas Bonnefon         quickFindSearchBox->setEnabled( true );
87bb02e0acSNicolas Bonnefon     }
88bb02e0acSNicolas Bonnefon }
89bb02e0acSNicolas Bonnefon 
90bb02e0acSNicolas Bonnefon // Convert a regexp type to its index in the list
91bb02e0acSNicolas Bonnefon int OptionsDialog::getRegexpIndex( SearchRegexpType syntax ) const
92bb02e0acSNicolas Bonnefon {
93bb02e0acSNicolas Bonnefon     return static_cast<int>( syntax );
94bb02e0acSNicolas Bonnefon }
95bb02e0acSNicolas Bonnefon 
96bb02e0acSNicolas Bonnefon // Convert the index of a regexp type to its type
97bb02e0acSNicolas Bonnefon SearchRegexpType OptionsDialog::getRegexpTypeFromIndex( int index ) const
98bb02e0acSNicolas Bonnefon {
99bb02e0acSNicolas Bonnefon     return static_cast<SearchRegexpType>( index );;
100bb02e0acSNicolas Bonnefon }
101bb02e0acSNicolas Bonnefon 
102bb02e0acSNicolas Bonnefon // Updates the dialog box using values in global Config()
103bb02e0acSNicolas Bonnefon void OptionsDialog::updateDialogFromConfig()
104bb02e0acSNicolas Bonnefon {
105*11582726SNicolas Bonnefon     std::shared_ptr<Configuration> config =
106*11582726SNicolas Bonnefon         Persistent<Configuration>( "settings" );
107bb02e0acSNicolas Bonnefon 
108bb02e0acSNicolas Bonnefon     // Main font
109*11582726SNicolas Bonnefon     QFontInfo fontInfo = QFontInfo( config->mainFont() );
110bb02e0acSNicolas Bonnefon 
111bb02e0acSNicolas Bonnefon     int familyIndex = fontFamilyBox->findText( fontInfo.family() );
112bb02e0acSNicolas Bonnefon     if ( familyIndex != -1 )
113bb02e0acSNicolas Bonnefon         fontFamilyBox->setCurrentIndex( familyIndex );
114bb02e0acSNicolas Bonnefon 
115bb02e0acSNicolas Bonnefon     int sizeIndex = fontSizeBox->findText( QString::number(fontInfo.pointSize()) );
116bb02e0acSNicolas Bonnefon     if ( sizeIndex != -1 )
117bb02e0acSNicolas Bonnefon         fontSizeBox->setCurrentIndex( sizeIndex );
118bb02e0acSNicolas Bonnefon 
119bb02e0acSNicolas Bonnefon     // Regexp types
120bb02e0acSNicolas Bonnefon     mainSearchBox->setCurrentIndex(
121*11582726SNicolas Bonnefon             getRegexpIndex( config->mainRegexpType() ) );
122bb02e0acSNicolas Bonnefon     quickFindSearchBox->setCurrentIndex(
123*11582726SNicolas Bonnefon             getRegexpIndex( config->quickfindRegexpType() ) );
124bb02e0acSNicolas Bonnefon 
125*11582726SNicolas Bonnefon     incrementalCheckBox->setChecked( config->isQuickfindIncremental() );
126bb02e0acSNicolas Bonnefon }
127bb02e0acSNicolas Bonnefon 
128bb02e0acSNicolas Bonnefon //
129bb02e0acSNicolas Bonnefon // Slots
130bb02e0acSNicolas Bonnefon //
131bb02e0acSNicolas Bonnefon 
132bb02e0acSNicolas Bonnefon void OptionsDialog::updateFontSize(const QString& fontFamily)
133bb02e0acSNicolas Bonnefon {
134bb02e0acSNicolas Bonnefon     QFontDatabase database;
135bb02e0acSNicolas Bonnefon     QString oldFontSize = fontSizeBox->currentText();
136bb02e0acSNicolas Bonnefon     QList<int> sizes = database.pointSizes( fontFamily, "" );
137bb02e0acSNicolas Bonnefon 
138bb02e0acSNicolas Bonnefon     fontSizeBox->clear();
139bb02e0acSNicolas Bonnefon     foreach (int size, sizes) {
140bb02e0acSNicolas Bonnefon         fontSizeBox->addItem( QString::number(size) );
141bb02e0acSNicolas Bonnefon     }
142bb02e0acSNicolas Bonnefon     // Now restore the size we had before
143bb02e0acSNicolas Bonnefon     int i = fontSizeBox->findText(oldFontSize);
144bb02e0acSNicolas Bonnefon     if ( i != -1 )
145bb02e0acSNicolas Bonnefon         fontSizeBox->setCurrentIndex(i);
146bb02e0acSNicolas Bonnefon }
147bb02e0acSNicolas Bonnefon 
148bb02e0acSNicolas Bonnefon void OptionsDialog::updateConfigFromDialog()
149bb02e0acSNicolas Bonnefon {
150*11582726SNicolas Bonnefon     std::shared_ptr<Configuration> config =
151*11582726SNicolas Bonnefon         Persistent<Configuration>( "settings" );
152bb02e0acSNicolas Bonnefon 
153bb02e0acSNicolas Bonnefon     QFont font = QFont(
154bb02e0acSNicolas Bonnefon             fontFamilyBox->currentText(),
155bb02e0acSNicolas Bonnefon             (fontSizeBox->currentText()).toInt() );
156*11582726SNicolas Bonnefon     config->setMainFont(font);
157bb02e0acSNicolas Bonnefon 
158*11582726SNicolas Bonnefon     config->setMainRegexpType(
159bb02e0acSNicolas Bonnefon             getRegexpTypeFromIndex( mainSearchBox->currentIndex() ) );
160*11582726SNicolas Bonnefon     config->setQuickfindRegexpType(
161bb02e0acSNicolas Bonnefon             getRegexpTypeFromIndex( quickFindSearchBox->currentIndex() ) );
162*11582726SNicolas Bonnefon     config->setQuickfindIncremental( incrementalCheckBox->isChecked() );
163bb02e0acSNicolas Bonnefon 
164bb02e0acSNicolas Bonnefon     emit optionsChanged();
165bb02e0acSNicolas Bonnefon }
166bb02e0acSNicolas Bonnefon 
167bb02e0acSNicolas Bonnefon void OptionsDialog::onButtonBoxClicked( QAbstractButton* button )
168bb02e0acSNicolas Bonnefon {
169bb02e0acSNicolas Bonnefon     QDialogButtonBox::ButtonRole role = buttonBox->buttonRole( button );
170bb02e0acSNicolas Bonnefon     if (   ( role == QDialogButtonBox::AcceptRole )
171bb02e0acSNicolas Bonnefon         || ( role == QDialogButtonBox::ApplyRole ) ) {
172bb02e0acSNicolas Bonnefon         updateConfigFromDialog();
173bb02e0acSNicolas Bonnefon     }
174bb02e0acSNicolas Bonnefon 
175bb02e0acSNicolas Bonnefon     if ( role == QDialogButtonBox::AcceptRole )
176bb02e0acSNicolas Bonnefon         accept();
177bb02e0acSNicolas Bonnefon     else if ( role == QDialogButtonBox::RejectRole )
178bb02e0acSNicolas Bonnefon         reject();
179bb02e0acSNicolas Bonnefon }
180bb02e0acSNicolas Bonnefon 
181bb02e0acSNicolas Bonnefon void OptionsDialog::onIncrementalChanged()
182bb02e0acSNicolas Bonnefon {
183bb02e0acSNicolas Bonnefon     setupIncremental();
184bb02e0acSNicolas Bonnefon }
185