karm

preferences.cpp
00001 #undef Unsorted // for --enable-final
00002 #include <tqcheckbox.h>
00003 #include <tqlabel.h>
00004 #include <tqstring.h>
00005 #include <tqspinbox.h>
00006 #include <tqlayout.h>
00007 
00008 #include <kapplication.h>       // kapp
00009 #include <kconfig.h>
00010 #include <kdebug.h>
00011 #include <kemailsettings.h>
00012 #include <kiconloader.h>
00013 #include <klineedit.h>          // lineEdit()
00014 #include <klocale.h>            // i18n
00015 #include <kstandarddirs.h>
00016 #include <kurlrequester.h>
00017 
00018 #include "preferences.h"
00019 
00020 Preferences *Preferences::_instance = 0;
00021 
00022 Preferences::Preferences( const TQString& icsFile )
00023   : KDialogBase( IconList, i18n("Preferences"), Ok|Cancel, Ok )
00024 {
00025 
00026   setIconListAllVisible( true );
00027 
00028   makeBehaviorPage();
00029   makeDisplayPage();
00030   makeStoragePage();
00031 
00032   load();
00033 
00034   // command-line option overrides what is stored in 
00035   if ( ! icsFile.isEmpty() ) _iCalFileV = icsFile;
00036 
00037 }
00038 
00039 Preferences *Preferences::instance( const TQString &icsfile )
00040 {
00041   if (_instance == 0) {
00042     _instance = new Preferences( icsfile );
00043   }
00044   return _instance;
00045 }
00046 
00047 void Preferences::makeBehaviorPage()
00048 {
00049   TQPixmap icon = SmallIcon( "kcmsystem", KIcon::SizeMedium);
00050   TQFrame* behaviorPage = addPage( i18n("Behavior"), i18n("Behavior Settings"),
00051       icon );
00052 
00053   TQVBoxLayout* topLevel = new TQVBoxLayout( behaviorPage, 0, spacingHint() );
00054   TQGridLayout* layout = new TQGridLayout( topLevel, 2, 2 );
00055   layout->setColStretch( 1, 1 );
00056 
00057   _doIdleDetectionW = new TQCheckBox
00058     ( i18n("Detect desktop as idle after"), behaviorPage, "_doIdleDetectionW");
00059   _idleDetectValueW = new TQSpinBox
00060     (1,60*24, 1, behaviorPage, "_idleDetectValueW");
00061   _idleDetectValueW->setSuffix(i18n(" min"));
00062   _promptDeleteW = new TQCheckBox
00063     ( i18n( "Prompt before deleting tasks" ), behaviorPage, "_promptDeleteW" );
00064 
00065   layout->addWidget(_doIdleDetectionW, 0, 0 );
00066   layout->addWidget(_idleDetectValueW, 0, 1 );
00067   layout->addWidget(_promptDeleteW, 1, 0 );
00068 
00069   topLevel->addStretch();
00070 
00071   connect( _doIdleDetectionW, TQT_SIGNAL( clicked() ), this,
00072       TQT_SLOT( idleDetectCheckBoxChanged() ));
00073 }
00074 
00075 void Preferences::makeDisplayPage()
00076 {
00077   TQPixmap icon = SmallIcon( "viewmag", KIcon::SizeMedium );
00078   TQFrame* displayPage = addPage( i18n("Display"), i18n("Display Settings"),
00079       icon );
00080 
00081   TQVBoxLayout* topLevel = new TQVBoxLayout( displayPage, 0, spacingHint() );
00082   TQGridLayout* layout = new TQGridLayout( topLevel, 5, 2 );
00083   layout->setColStretch( 1, 1 );
00084 
00085   TQLabel* _displayColumnsLabelW = new TQLabel( i18n("Columns displayed:"),
00086       displayPage );
00087   _displaySessionW = new TQCheckBox ( i18n("Session time"),
00088       displayPage, "_displaySessionW");
00089   _displayTimeW = new TQCheckBox ( i18n("Cumulative task time"),
00090       displayPage, "_displayTimeW");
00091   _displayTotalSessionW = new TQCheckBox( i18n("Total session time"),
00092       displayPage, "_displayTotalSessionW");
00093   _displayTotalTimeW = new TQCheckBox ( i18n("Total task time"),
00094       displayPage, "_displayTotalTimeW");
00095 
00096   layout->addMultiCellWidget( _displayColumnsLabelW, 0, 0, 0, 1 );
00097   layout->addWidget(_displaySessionW, 1, 1 );
00098   layout->addWidget(_displayTimeW, 2, 1 );
00099   layout->addWidget(_displayTotalSessionW, 3, 1 );
00100   layout->addWidget(_displayTotalTimeW, 4, 1 );
00101 
00102   topLevel->addStretch();
00103 }
00104 
00105 void Preferences::makeStoragePage()
00106 {
00107   TQPixmap icon = SmallIcon( "kfm", KIcon::SizeMedium );
00108   TQFrame* storagePage = addPage( i18n("Storage"), i18n("Storage Settings"),
00109       icon );
00110 
00111   TQVBoxLayout* topLevel = new TQVBoxLayout( storagePage, 0, spacingHint() );
00112   TQGridLayout* layout = new TQGridLayout( topLevel, 4, 2 );
00113   layout->setColStretch( 1, 1 );
00114 
00115   // autosave
00116   _doAutoSaveW = new TQCheckBox
00117     ( i18n("Save tasks every"), storagePage, "_doAutoSaveW" );
00118   _autoSaveValueW = new TQSpinBox(1, 60*24, 1, storagePage, "_autoSaveValueW");
00119   _autoSaveValueW->setSuffix(i18n(" min"));
00120 
00121   // iCalendar
00122   TQLabel* _iCalFileLabel = new TQLabel( i18n("iCalendar file:"), storagePage);
00123   _iCalFileW = new KURLRequester(storagePage, "_iCalFileW");
00124   _iCalFileW->setFilter(TQString::fromLatin1("*.ics"));
00125   _iCalFileW->setMode(KFile::File);
00126 
00127   // Log time?
00128   _loggingW = new TQCheckBox 
00129     ( i18n("Log history"), storagePage, "_loggingW" );
00130 
00131   // add widgets to layout
00132   layout->addWidget(_doAutoSaveW, 0, 0);
00133   layout->addWidget(_autoSaveValueW, 0, 1);
00134   layout->addWidget(_iCalFileLabel, 1, 0 );
00135   layout->addWidget(_iCalFileW, 1, 1 );
00136   layout->addWidget(_loggingW, 2, 0 );
00137 
00138   topLevel->addStretch();
00139 
00140   // checkboxes disable file selection controls
00141   connect( _doAutoSaveW, TQT_SIGNAL( clicked() ),
00142       this, TQT_SLOT( autoSaveCheckBoxChanged() ));
00143 }
00144 
00145 void Preferences::disableIdleDetection()
00146 {
00147   _doIdleDetectionW->setEnabled(false);
00148   _idleDetectValueW->setEnabled(false);
00149 }
00150 
00151 
00152 //---------------------------------------------------------------------------
00153 //                            SLOTS
00154 //---------------------------------------------------------------------------
00155 
00156 void Preferences::showDialog()
00157 {
00158 
00159   // set all widgets
00160   _iCalFileW->lineEdit()->setText(_iCalFileV);
00161 
00162   _doIdleDetectionW->setChecked(_doIdleDetectionV);
00163   _idleDetectValueW->setValue(_idleDetectValueV);
00164 
00165   _doAutoSaveW->setChecked(_doAutoSaveV);
00166   _autoSaveValueW->setValue(_autoSaveValueV);
00167   _loggingW->setChecked(_loggingV);
00168 
00169   _promptDeleteW->setChecked(_promptDeleteV);
00170 
00171   _displaySessionW->setChecked(_displayColumnV[0]);
00172   _displayTimeW->setChecked(_displayColumnV[1]);
00173   _displayTotalSessionW->setChecked(_displayColumnV[2]);
00174   _displayTotalTimeW->setChecked(_displayColumnV[3]);
00175 
00176   // adapt visibility of preference items according
00177   // to settings
00178   idleDetectCheckBoxChanged();
00179   autoSaveCheckBoxChanged();
00180 
00181   show();
00182 }
00183 
00184 void Preferences::slotOk()
00185 {
00186   kdDebug(5970) << "Entering Preferences::slotOk" << endl;
00187   // storage
00188   _iCalFileV = _iCalFileW->lineEdit()->text();
00189 
00190   _doIdleDetectionV = _doIdleDetectionW->isChecked();
00191   _idleDetectValueV = _idleDetectValueW->value();
00192 
00193   _doAutoSaveV = _doAutoSaveW->isChecked();
00194   _autoSaveValueV = _autoSaveValueW->value();
00195   _loggingV = _loggingW->isChecked();
00196 
00197   // behavior
00198   _promptDeleteV = _promptDeleteW->isChecked();
00199 
00200   // display
00201   _displayColumnV[0] = _displaySessionW->isChecked();
00202   _displayColumnV[1] = _displayTimeW->isChecked();
00203   _displayColumnV[2] = _displayTotalSessionW->isChecked();
00204   _displayColumnV[3] = _displayTotalTimeW->isChecked();
00205 
00206   emitSignals();
00207   save();
00208   KDialogBase::slotOk();
00209 }
00210 
00211 void Preferences::slotCancel()
00212 {
00213   kdDebug(5970) << "Entering Preferences::slotCancel" << endl;
00214   KDialogBase::slotCancel();
00215 }
00216 
00217 void Preferences::idleDetectCheckBoxChanged()
00218 {
00219   _idleDetectValueW->setEnabled(_doIdleDetectionW->isChecked());
00220 }
00221 
00222 void Preferences::autoSaveCheckBoxChanged()
00223 {
00224   _autoSaveValueW->setEnabled(_doAutoSaveW->isChecked());
00225 }
00226 
00227 void Preferences::emitSignals()
00228 {
00229   kdDebug(5970) << "Entering Preferences::emitSignals" << endl;
00230   emit iCalFile( _iCalFileV );
00231   emit detectIdleness( _doIdleDetectionV );
00232   emit idlenessTimeout( _idleDetectValueV );
00233   emit autoSave( _doAutoSaveV );
00234   emit autoSavePeriod( _autoSaveValueV );
00235   emit setupChanged();
00236 }
00237 
00238 TQString Preferences::iCalFile()                 const { return _iCalFileV; }
00239 TQString Preferences::activeCalendarFile()       const { return _iCalFileV; }
00240 bool    Preferences::detectIdleness()                const { return _doIdleDetectionV; }
00241 int     Preferences::idlenessTimeout()               const { return _idleDetectValueV; }
00242 bool    Preferences::autoSave()                      const { return _doAutoSaveV; }
00243 int     Preferences::autoSavePeriod()                const { return _autoSaveValueV; }
00244 bool    Preferences::logging()                       const { return _loggingV; }
00245 bool    Preferences::promptDelete()                  const { return _promptDeleteV; }
00246 TQString Preferences::setPromptDelete(bool prompt)    { _promptDeleteV=prompt; return ""; }
00247 bool    Preferences::displayColumn(int n)            const { return _displayColumnV[n]; }
00248 TQString Preferences::userRealName()                  const { return _userRealName; }
00249 
00250 //---------------------------------------------------------------------------
00251 //                                  Load and Save
00252 //---------------------------------------------------------------------------
00253 void Preferences::load()
00254 {
00255   KConfig &config = *kapp->config();
00256 
00257   config.setGroup( TQString::fromLatin1("Idle detection") );
00258   _doIdleDetectionV = config.readBoolEntry( TQString::fromLatin1("enabled"),
00259      true );
00260   _idleDetectValueV = config.readNumEntry(TQString::fromLatin1("period"), 15);
00261 
00262   config.setGroup( TQString::fromLatin1("Saving") );
00263   _iCalFileV = config.readPathEntry
00264     ( TQString::fromLatin1("ical file"), 
00265       locateLocal( "appdata", TQString::fromLatin1( "karm.ics")));
00266   _doAutoSaveV = config.readBoolEntry
00267     ( TQString::fromLatin1("auto save"), true);
00268   _autoSaveValueV = config.readNumEntry
00269     ( TQString::fromLatin1("auto save period"), 5);
00270   _promptDeleteV = config.readBoolEntry
00271     ( TQString::fromLatin1("prompt delete"), true);
00272   _loggingV = config.readBoolEntry
00273     ( TQString::fromLatin1("logging"), true);
00274 
00275   _displayColumnV[0] = config.readBoolEntry
00276     ( TQString::fromLatin1("display session time"), true);
00277   _displayColumnV[1] = config.readBoolEntry
00278     ( TQString::fromLatin1("display time"), true);
00279   _displayColumnV[2] = config.readBoolEntry
00280     ( TQString::fromLatin1("display total session time"), true);
00281   _displayColumnV[3] = config.readBoolEntry
00282     ( TQString::fromLatin1("display total time"), true);
00283 
00284   KEMailSettings settings;
00285   _userRealName = settings.getSetting( KEMailSettings::RealName );
00286 }
00287 
00288 void Preferences::save()
00289 {
00290   KConfig &config = *KGlobal::config();
00291 
00292   config.setGroup( TQString::fromLatin1("Idle detection"));
00293   config.writeEntry( TQString::fromLatin1("enabled"), _doIdleDetectionV);
00294   config.writeEntry( TQString::fromLatin1("period"), _idleDetectValueV);
00295 
00296   config.setGroup( TQString::fromLatin1("Saving"));
00297   config.writePathEntry( TQString::fromLatin1("ical file"), _iCalFileV);
00298   config.writeEntry( TQString::fromLatin1("auto save"), _doAutoSaveV);
00299   config.writeEntry( TQString::fromLatin1("logging"), _loggingV);
00300   config.writeEntry( TQString::fromLatin1("auto save period"), _autoSaveValueV);
00301   config.writeEntry( TQString::fromLatin1("prompt delete"), _promptDeleteV);
00302 
00303   config.writeEntry( TQString::fromLatin1("display session time"),
00304       _displayColumnV[0]);
00305   config.writeEntry( TQString::fromLatin1("display time"),
00306       _displayColumnV[1]);
00307   config.writeEntry( TQString::fromLatin1("display total session time"),
00308       _displayColumnV[2]);
00309   config.writeEntry( TQString::fromLatin1("display total time"),
00310       _displayColumnV[3]);
00311 
00312   config.sync();
00313 }
00314 
00315 // HACK: this entire config dialog should be upgraded to KConfigXT
00316 bool Preferences::readBoolEntry( const TQString& key )
00317 {
00318   KConfig &config = *KGlobal::config();
00319   return config.readBoolEntry ( key, true );
00320 }
00321 
00322 void Preferences::writeEntry( const TQString &key, bool value)
00323 {
00324   KConfig &config = *KGlobal::config();
00325   config.writeEntry( key, value );
00326   config.sync();
00327 }
00328 
00329 void Preferences::deleteEntry( const TQString &key )
00330 {
00331   KConfig &config = *KGlobal::config();
00332   config.deleteEntry( key );
00333   config.sync();
00334 }
00335 
00336 #include "preferences.moc"