diff options
Diffstat (limited to 'karm/preferences.cpp')
-rw-r--r-- | karm/preferences.cpp | 335 |
1 files changed, 335 insertions, 0 deletions
diff --git a/karm/preferences.cpp b/karm/preferences.cpp new file mode 100644 index 000000000..9316aa440 --- /dev/null +++ b/karm/preferences.cpp @@ -0,0 +1,335 @@ +#undef Unsorted // for --enable-final +#include <qcheckbox.h> +#include <qlabel.h> +#include <qstring.h> +#include <qspinbox.h> +#include <qlayout.h> + +#include <kapplication.h> // kapp +#include <kconfig.h> +#include <kdebug.h> +#include <kemailsettings.h> +#include <kiconloader.h> +#include <klineedit.h> // lineEdit() +#include <klocale.h> // i18n +#include <kstandarddirs.h> +#include <kurlrequester.h> + +#include "preferences.h" + +Preferences *Preferences::_instance = 0; + +Preferences::Preferences( const QString& icsFile ) + : KDialogBase( IconList, i18n("Preferences"), Ok|Cancel, Ok ) +{ + + setIconListAllVisible( true ); + + makeBehaviorPage(); + makeDisplayPage(); + makeStoragePage(); + + load(); + + // command-line option overrides what is stored in + if ( ! icsFile.isEmpty() ) _iCalFileV = icsFile; + +} + +Preferences *Preferences::instance( const QString &icsfile ) +{ + if (_instance == 0) { + _instance = new Preferences( icsfile ); + } + return _instance; +} + +void Preferences::makeBehaviorPage() +{ + QPixmap icon = SmallIcon( "kcmsystem", KIcon::SizeMedium); + QFrame* behaviorPage = addPage( i18n("Behavior"), i18n("Behavior Settings"), + icon ); + + QVBoxLayout* topLevel = new QVBoxLayout( behaviorPage, 0, spacingHint() ); + QGridLayout* layout = new QGridLayout( topLevel, 2, 2 ); + layout->setColStretch( 1, 1 ); + + _doIdleDetectionW = new QCheckBox + ( i18n("Detect desktop as idle after"), behaviorPage, "_doIdleDetectionW"); + _idleDetectValueW = new QSpinBox + (1,60*24, 1, behaviorPage, "_idleDetectValueW"); + _idleDetectValueW->setSuffix(i18n(" min")); + _promptDeleteW = new QCheckBox + ( i18n( "Prompt before deleting tasks" ), behaviorPage, "_promptDeleteW" ); + + layout->addWidget(_doIdleDetectionW, 0, 0 ); + layout->addWidget(_idleDetectValueW, 0, 1 ); + layout->addWidget(_promptDeleteW, 1, 0 ); + + topLevel->addStretch(); + + connect( _doIdleDetectionW, SIGNAL( clicked() ), this, + SLOT( idleDetectCheckBoxChanged() )); +} + +void Preferences::makeDisplayPage() +{ + QPixmap icon = SmallIcon( "viewmag", KIcon::SizeMedium ); + QFrame* displayPage = addPage( i18n("Display"), i18n("Display Settings"), + icon ); + + QVBoxLayout* topLevel = new QVBoxLayout( displayPage, 0, spacingHint() ); + QGridLayout* layout = new QGridLayout( topLevel, 5, 2 ); + layout->setColStretch( 1, 1 ); + + QLabel* _displayColumnsLabelW = new QLabel( i18n("Columns displayed:"), + displayPage ); + _displaySessionW = new QCheckBox ( i18n("Session time"), + displayPage, "_displaySessionW"); + _displayTimeW = new QCheckBox ( i18n("Cumulative task time"), + displayPage, "_displayTimeW"); + _displayTotalSessionW = new QCheckBox( i18n("Total session time"), + displayPage, "_displayTotalSessionW"); + _displayTotalTimeW = new QCheckBox ( i18n("Total task time"), + displayPage, "_displayTotalTimeW"); + + layout->addMultiCellWidget( _displayColumnsLabelW, 0, 0, 0, 1 ); + layout->addWidget(_displaySessionW, 1, 1 ); + layout->addWidget(_displayTimeW, 2, 1 ); + layout->addWidget(_displayTotalSessionW, 3, 1 ); + layout->addWidget(_displayTotalTimeW, 4, 1 ); + + topLevel->addStretch(); +} + +void Preferences::makeStoragePage() +{ + QPixmap icon = SmallIcon( "kfm", KIcon::SizeMedium ); + QFrame* storagePage = addPage( i18n("Storage"), i18n("Storage Settings"), + icon ); + + QVBoxLayout* topLevel = new QVBoxLayout( storagePage, 0, spacingHint() ); + QGridLayout* layout = new QGridLayout( topLevel, 4, 2 ); + layout->setColStretch( 1, 1 ); + + // autosave + _doAutoSaveW = new QCheckBox + ( i18n("Save tasks every"), storagePage, "_doAutoSaveW" ); + _autoSaveValueW = new QSpinBox(1, 60*24, 1, storagePage, "_autoSaveValueW"); + _autoSaveValueW->setSuffix(i18n(" min")); + + // iCalendar + QLabel* _iCalFileLabel = new QLabel( i18n("iCalendar file:"), storagePage); + _iCalFileW = new KURLRequester(storagePage, "_iCalFileW"); + _iCalFileW->setFilter(QString::fromLatin1("*.ics")); + _iCalFileW->setMode(KFile::File); + + // Log time? + _loggingW = new QCheckBox + ( i18n("Log history"), storagePage, "_loggingW" ); + + // add widgets to layout + layout->addWidget(_doAutoSaveW, 0, 0); + layout->addWidget(_autoSaveValueW, 0, 1); + layout->addWidget(_iCalFileLabel, 1, 0 ); + layout->addWidget(_iCalFileW, 1, 1 ); + layout->addWidget(_loggingW, 2, 0 ); + + topLevel->addStretch(); + + // checkboxes disable file selection controls + connect( _doAutoSaveW, SIGNAL( clicked() ), + this, SLOT( autoSaveCheckBoxChanged() )); +} + +void Preferences::disableIdleDetection() +{ + _doIdleDetectionW->setEnabled(false); +} + + +//--------------------------------------------------------------------------- +// SLOTS +//--------------------------------------------------------------------------- + +void Preferences::showDialog() +{ + + // set all widgets + _iCalFileW->lineEdit()->setText(_iCalFileV); + + _doIdleDetectionW->setChecked(_doIdleDetectionV); + _idleDetectValueW->setValue(_idleDetectValueV); + + _doAutoSaveW->setChecked(_doAutoSaveV); + _autoSaveValueW->setValue(_autoSaveValueV); + _loggingW->setChecked(_loggingV); + + _promptDeleteW->setChecked(_promptDeleteV); + + _displaySessionW->setChecked(_displayColumnV[0]); + _displayTimeW->setChecked(_displayColumnV[1]); + _displayTotalSessionW->setChecked(_displayColumnV[2]); + _displayTotalTimeW->setChecked(_displayColumnV[3]); + + // adapt visibility of preference items according + // to settings + idleDetectCheckBoxChanged(); + autoSaveCheckBoxChanged(); + + show(); +} + +void Preferences::slotOk() +{ + kdDebug(5970) << "Entering Preferences::slotOk" << endl; + // storage + _iCalFileV = _iCalFileW->lineEdit()->text(); + + _doIdleDetectionV = _doIdleDetectionW->isChecked(); + _idleDetectValueV = _idleDetectValueW->value(); + + _doAutoSaveV = _doAutoSaveW->isChecked(); + _autoSaveValueV = _autoSaveValueW->value(); + _loggingV = _loggingW->isChecked(); + + // behavior + _promptDeleteV = _promptDeleteW->isChecked(); + + // display + _displayColumnV[0] = _displaySessionW->isChecked(); + _displayColumnV[1] = _displayTimeW->isChecked(); + _displayColumnV[2] = _displayTotalSessionW->isChecked(); + _displayColumnV[3] = _displayTotalTimeW->isChecked(); + + emitSignals(); + save(); + KDialogBase::slotOk(); +} + +void Preferences::slotCancel() +{ + kdDebug(5970) << "Entering Preferences::slotCancel" << endl; + KDialogBase::slotCancel(); +} + +void Preferences::idleDetectCheckBoxChanged() +{ + _idleDetectValueW->setEnabled(_doIdleDetectionW->isChecked()); +} + +void Preferences::autoSaveCheckBoxChanged() +{ + _autoSaveValueW->setEnabled(_doAutoSaveW->isChecked()); +} + +void Preferences::emitSignals() +{ + kdDebug(5970) << "Entering Preferences::emitSignals" << endl; + emit iCalFile( _iCalFileV ); + emit detectIdleness( _doIdleDetectionV ); + emit idlenessTimeout( _idleDetectValueV ); + emit autoSave( _doAutoSaveV ); + emit autoSavePeriod( _autoSaveValueV ); + emit setupChanged(); +} + +QString Preferences::iCalFile() const { return _iCalFileV; } +QString Preferences::activeCalendarFile() const { return _iCalFileV; } +bool Preferences::detectIdleness() const { return _doIdleDetectionV; } +int Preferences::idlenessTimeout() const { return _idleDetectValueV; } +bool Preferences::autoSave() const { return _doAutoSaveV; } +int Preferences::autoSavePeriod() const { return _autoSaveValueV; } +bool Preferences::logging() const { return _loggingV; } +bool Preferences::promptDelete() const { return _promptDeleteV; } +QString Preferences::setPromptDelete(bool prompt) { _promptDeleteV=prompt; return ""; } +bool Preferences::displayColumn(int n) const { return _displayColumnV[n]; } +QString Preferences::userRealName() const { return _userRealName; } + +//--------------------------------------------------------------------------- +// Load and Save +//--------------------------------------------------------------------------- +void Preferences::load() +{ + KConfig &config = *kapp->config(); + + config.setGroup( QString::fromLatin1("Idle detection") ); + _doIdleDetectionV = config.readBoolEntry( QString::fromLatin1("enabled"), + true ); + _idleDetectValueV = config.readNumEntry(QString::fromLatin1("period"), 15); + + config.setGroup( QString::fromLatin1("Saving") ); + _iCalFileV = config.readPathEntry + ( QString::fromLatin1("ical file"), + locateLocal( "appdata", QString::fromLatin1( "karm.ics"))); + _doAutoSaveV = config.readBoolEntry + ( QString::fromLatin1("auto save"), true); + _autoSaveValueV = config.readNumEntry + ( QString::fromLatin1("auto save period"), 5); + _promptDeleteV = config.readBoolEntry + ( QString::fromLatin1("prompt delete"), true); + _loggingV = config.readBoolEntry + ( QString::fromLatin1("logging"), true); + + _displayColumnV[0] = config.readBoolEntry + ( QString::fromLatin1("display session time"), true); + _displayColumnV[1] = config.readBoolEntry + ( QString::fromLatin1("display time"), true); + _displayColumnV[2] = config.readBoolEntry + ( QString::fromLatin1("display total session time"), true); + _displayColumnV[3] = config.readBoolEntry + ( QString::fromLatin1("display total time"), true); + + KEMailSettings settings; + _userRealName = settings.getSetting( KEMailSettings::RealName ); +} + +void Preferences::save() +{ + KConfig &config = *KGlobal::config(); + + config.setGroup( QString::fromLatin1("Idle detection")); + config.writeEntry( QString::fromLatin1("enabled"), _doIdleDetectionV); + config.writeEntry( QString::fromLatin1("period"), _idleDetectValueV); + + config.setGroup( QString::fromLatin1("Saving")); + config.writePathEntry( QString::fromLatin1("ical file"), _iCalFileV); + config.writeEntry( QString::fromLatin1("auto save"), _doAutoSaveV); + config.writeEntry( QString::fromLatin1("logging"), _loggingV); + config.writeEntry( QString::fromLatin1("auto save period"), _autoSaveValueV); + config.writeEntry( QString::fromLatin1("prompt delete"), _promptDeleteV); + + config.writeEntry( QString::fromLatin1("display session time"), + _displayColumnV[0]); + config.writeEntry( QString::fromLatin1("display time"), + _displayColumnV[1]); + config.writeEntry( QString::fromLatin1("display total session time"), + _displayColumnV[2]); + config.writeEntry( QString::fromLatin1("display total time"), + _displayColumnV[3]); + + config.sync(); +} + +// HACK: this entire config dialog should be upgraded to KConfigXT +bool Preferences::readBoolEntry( const QString& key ) +{ + KConfig &config = *KGlobal::config(); + return config.readBoolEntry ( key, true ); +} + +void Preferences::writeEntry( const QString &key, bool value) +{ + KConfig &config = *KGlobal::config(); + config.writeEntry( key, value ); + config.sync(); +} + +void Preferences::deleteEntry( const QString &key ) +{ + KConfig &config = *KGlobal::config(); + config.deleteEntry( key ); + config.sync(); +} + +#include "preferences.moc" |