/* * Copyright (C) 2009, 2010, 2011, 2013 Nicolas Bonnefon and other contributors * * This file is part of glogg. * * glogg is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * glogg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with glogg. If not, see . */ #include #include "optionsdialog.h" #include "log.h" #include "persistentinfo.h" #include "configuration.h" static const uint32_t POLL_INTERVAL_MIN = 10; static const uint32_t POLL_INTERVAL_MAX = 3600000; // Constructor OptionsDialog::OptionsDialog( QWidget* parent ) : QDialog(parent) { setupUi( this ); setupTabs(); setupFontList(); setupRegexp(); // Validators QValidator* polling_interval_validator_ = new QIntValidator( POLL_INTERVAL_MIN, POLL_INTERVAL_MAX, this ); pollIntervalLineEdit->setValidator( polling_interval_validator_ ); connect(buttonBox, SIGNAL( clicked( QAbstractButton* ) ), this, SLOT( onButtonBoxClicked( QAbstractButton* ) ) ); connect(fontFamilyBox, SIGNAL( currentIndexChanged(const QString& ) ), this, SLOT( updateFontSize( const QString& ) )); connect(incrementalCheckBox, SIGNAL( toggled( bool ) ), this, SLOT( onIncrementalChanged() ) ); connect(pollingCheckBox, SIGNAL( toggled( bool ) ), this, SLOT( onPollingChanged() ) ); updateDialogFromConfig(); setupIncremental(); setupPolling(); } // // Private functions // // Setups the tabs depending on the configuration void OptionsDialog::setupTabs() { #ifndef GLOGG_SUPPORTS_POLLING tabWidget->removeTab( 1 ); #endif } // Populates the 'family' ComboBox void OptionsDialog::setupFontList() { QFontDatabase database; // We only show the fixed fonts foreach ( const QString &str, database.families() ) { if ( database.isFixedPitch( str ) ) fontFamilyBox->addItem( str ); } } // Populate the regexp ComboBoxes void OptionsDialog::setupRegexp() { QStringList regexpTypes; regexpTypes << tr("Extended Regexp") << tr("Fixed Strings"); mainSearchBox->addItems( regexpTypes ); quickFindSearchBox->addItems( regexpTypes ); } // Enable/disable the QuickFind options depending on the state // of the "incremental" checkbox. void OptionsDialog::setupIncremental() { if ( incrementalCheckBox->isChecked() ) { quickFindSearchBox->setCurrentIndex( getRegexpIndex( FixedString ) ); quickFindSearchBox->setEnabled( false ); } else { quickFindSearchBox->setEnabled( true ); } } void OptionsDialog::setupPolling() { pollIntervalLineEdit->setEnabled( pollingCheckBox->isChecked() ); } // Convert a regexp type to its index in the list int OptionsDialog::getRegexpIndex( SearchRegexpType syntax ) const { int index; switch ( syntax ) { case FixedString: index = 1; break; default: index = 0; break; } return index; } // Convert the index of a regexp type to its type SearchRegexpType OptionsDialog::getRegexpTypeFromIndex( int index ) const { SearchRegexpType type; switch ( index ) { case 1: type = FixedString; break; default: type = ExtendedRegexp; break; } return type; } // Updates the dialog box using values in global Config() void OptionsDialog::updateDialogFromConfig() { std::shared_ptr config = Persistent( "settings" ); // Main font QFontInfo fontInfo = QFontInfo( config->mainFont() ); int familyIndex = fontFamilyBox->findText( fontInfo.family() ); if ( familyIndex != -1 ) fontFamilyBox->setCurrentIndex( familyIndex ); int sizeIndex = fontSizeBox->findText( QString::number(fontInfo.pointSize()) ); if ( sizeIndex != -1 ) fontSizeBox->setCurrentIndex( sizeIndex ); // Regexp types mainSearchBox->setCurrentIndex( getRegexpIndex( config->mainRegexpType() ) ); quickFindSearchBox->setCurrentIndex( getRegexpIndex( config->quickfindRegexpType() ) ); incrementalCheckBox->setChecked( config->isQuickfindIncremental() ); // Polling pollingCheckBox->setChecked( config->pollingEnabled() ); pollIntervalLineEdit->setText( QString::number( config->pollIntervalMs() ) ); // Last session loadLastSessionCheckBox->setChecked( config->loadLastSession() ); } // // Slots // void OptionsDialog::updateFontSize(const QString& fontFamily) { QFontDatabase database; QString oldFontSize = fontSizeBox->currentText(); QList sizes = database.pointSizes( fontFamily, "" ); fontSizeBox->clear(); foreach (int size, sizes) { fontSizeBox->addItem( QString::number(size) ); } // Now restore the size we had before int i = fontSizeBox->findText(oldFontSize); if ( i != -1 ) fontSizeBox->setCurrentIndex(i); } void OptionsDialog::updateConfigFromDialog() { std::shared_ptr config = Persistent( "settings" ); QFont font = QFont( fontFamilyBox->currentText(), (fontSizeBox->currentText()).toInt() ); config->setMainFont(font); config->setMainRegexpType( getRegexpTypeFromIndex( mainSearchBox->currentIndex() ) ); config->setQuickfindRegexpType( getRegexpTypeFromIndex( quickFindSearchBox->currentIndex() ) ); config->setQuickfindIncremental( incrementalCheckBox->isChecked() ); config->setPollingEnabled( pollingCheckBox->isChecked() ); uint32_t poll_interval = pollIntervalLineEdit->text().toUInt(); if ( poll_interval < POLL_INTERVAL_MIN ) poll_interval = POLL_INTERVAL_MIN; else if (poll_interval > POLL_INTERVAL_MAX ) poll_interval = POLL_INTERVAL_MAX; config->setPollIntervalMs( poll_interval ); config->setLoadLastSession( loadLastSessionCheckBox->isChecked() ); emit optionsChanged(); } void OptionsDialog::onButtonBoxClicked( QAbstractButton* button ) { QDialogButtonBox::ButtonRole role = buttonBox->buttonRole( button ); if ( ( role == QDialogButtonBox::AcceptRole ) || ( role == QDialogButtonBox::ApplyRole ) ) { updateConfigFromDialog(); } if ( role == QDialogButtonBox::AcceptRole ) accept(); else if ( role == QDialogButtonBox::RejectRole ) reject(); } void OptionsDialog::onIncrementalChanged() { setupIncremental(); } void OptionsDialog::onPollingChanged() { setupPolling(); }