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