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