korganizer Library API Documentation

koprefs.cpp

00001 /*
00002     This file is part of KOrganizer.
00003     Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
00004 
00005     This program is free software; you can redistribute it and/or modify
00006     it under the terms of the GNU General Public License as published by
00007     the Free Software Foundation; either version 2 of the License, or
00008     (at your option) any later version.
00009 
00010     This program is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00013     GNU General Public License for more details.
00014 
00015     You should have received a copy of the GNU General Public License
00016     along with this program; if not, write to the Free Software
00017     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00018 
00019     As a special exception, permission is given to link this program
00020     with any edition of Qt, and distribute the resulting executable,
00021     without including the source code for Qt in the source distribution.
00022 */
00023 
00024 #include <time.h>
00025 #include <unistd.h>
00026 
00027 #include <qdir.h>
00028 #include <qstring.h>
00029 #include <qfont.h>
00030 #include <qcolor.h>
00031 #include <qstringlist.h>
00032 
00033 #include <kglobal.h>
00034 #include <kconfig.h>
00035 #include <klocale.h>
00036 #include <kdebug.h>
00037 #include <kemailsettings.h>
00038 #include <kstaticdeleter.h>
00039 
00040 #include "koprefs.h"
00041 
00042 KOPrefs *KOPrefs::mInstance = 0;
00043 static KStaticDeleter<KOPrefs> insd;
00044 
00045 KOPrefs::KOPrefs() :
00046   KPimPrefs()
00047 {
00048   mCategoryColors.setAutoDelete(true);
00049 
00050   mDefaultCategoryColor           = QColor(196,196,196);
00051   QColor defaultHolidayColor      = QColor("red");
00052   QColor defaultHighlightColor    = QColor("blue");
00053   QColor defaultAgendaBgColor     = QColor(128,128,128);
00054   QColor defaultWorkingHoursColor = QColor(160,160,160);
00055   QColor defaultTodoDueTodayColor = QColor("blue");
00056   QColor defaultTodoOverdueColor  = QColor("red");
00057   
00058   mDefaultTimeBarFont = QFont("helvetica",12,QFont::Bold);
00059   mDefaultViewFont = QFont("helvetica",12);
00060   mDefaultMonthViewFont = QFont("helvetica",10);
00061 
00062   KPrefs::setCurrentGroup("General");
00063 
00064   addItemBool("Enable Group Scheduling",&mEnableGroupScheduling,false);
00065   addItemBool("Enable Project View",&mEnableProjectView,false);
00066   addItemBool("Auto Save",&mAutoSave,false);
00067   addItemInt("Auto Save Interval",&mAutoSaveInterval,10);
00068   addItemBool("Confirm Deletes",&mConfirm,true);
00069   addItemString("Archive File",&mArchiveFile);
00070   addItemString("Html Export File",&mHtmlExportFile,
00071       QDir::homeDirPath() + "/" + i18n("Default export file", "calendar.html"));
00072   addItemBool("Html With Save",&mHtmlWithSave,false);
00073 
00074   KPrefs::setCurrentGroup("Personal Settings");
00075 
00076   addItemInt("Mail Client",&mMailClient,MailClientKMail);
00077   addItemBool("Use Control Center Email",&mEmailControlCenter,false);
00078   addItemBool("Bcc",&mBcc,false);
00079 
00080   KPrefs::setCurrentGroup("Time & Date");
00081 
00082   addItemString("Time Zone",&mTimeZone,"+0000");
00083   addItemString("TimeZoneId",&mTimeZoneId);
00084   addItemInt("Default Start Time",&mStartTime,10);
00085   addItemInt("Default Duration",&mDefaultDuration,2);
00086   addItemInt("Default Alarm Time",&mAlarmTime,0);
00087   addItemInt("Daylight Savings",&mDaylightSavings,0);
00088 
00089   KPrefs::setCurrentGroup("Calendar");
00090 
00091   addItemInt("Default Calendar Format",&mDefaultFormat,FormatICalendar);
00092 
00093   KPrefs::setCurrentGroup("Fonts");
00094 
00095   addItemFont("TimeBar Font",&mTimeBarFont);
00096   addItemFont("MonthView Font",&mMonthViewFont);
00097   addItemFont("AgendaView Font",&mAgendaViewFont);
00098   addItemFont("MarcusBains Font",&mAgendaViewFont);
00099 
00100   KPrefs::setCurrentGroup("Colors");
00101 
00102   addItemColor("Holiday Color",&mHolidayColor,defaultHolidayColor);
00103   addItemColor("Highlight Color",&mHighlightColor,defaultHighlightColor);
00104   addItemColor("Event Color",&mEventColor,mDefaultCategoryColor);
00105   addItemColor("Agenda Background Color",&mAgendaBgColor,defaultAgendaBgColor);
00106   addItemColor("WorkingHours Color",&mWorkingHoursColor,defaultWorkingHoursColor);
00107   addItemColor("Todo due today Color",&mTodoDueTodayColor,defaultTodoDueTodayColor);
00108   addItemColor("Todo overdue Color",&mTodoOverdueColor,defaultTodoOverdueColor);
00109 
00110   KPrefs::setCurrentGroup("Views");
00111 
00112   addItemInt("Hour Size",&mHourSize,10);
00113   addItemBool("Show Daily Recurrences",&mDailyRecur,true);
00114   addItemBool("Show Weekly Recurrences",&mWeeklyRecur,true);
00115   addItemBool("Enable ToolTips",&mEnableToolTips,false);
00116   addItemBool("Enable MonthView ScrollBars",&mEnableMonthScroll,false);
00117   addItemBool("Marcus Bains shows seconds",&mMarcusBainsShowSeconds,false);
00118   addItemBool("Show Marcus Bains",&mMarcusBainsEnabled,true);
00119 
00120   addItemInt("Day Begins",&mDayBegins,7);
00121   addItemInt("Working Hours Start",&mWorkingHoursStart,8);
00122   addItemInt("Working Hours End",&mWorkingHoursEnd,17);
00123   addItemBool("Exclude Holidays",&mExcludeHolidays,true);
00124   addItemBool("Exclude Saturdays",&mExcludeSaturdays,true);
00125 
00126   addItemBool("Month View Uses Category Color",&mMonthViewUsesCategoryColor,false);
00127   addItemBool("Full View Month",&mFullViewMonth,false);
00128   addItemBool("Full View Todo",&mFullViewTodo,true);
00129   
00130   addItemInt("Next X Days",&mNextXDays,3);
00131 
00132   KPrefs::setCurrentGroup("Printer");
00133 
00134   KPrefs::setCurrentGroup("Layout");
00135 
00136   addItemBool("CompactDialogs",&mCompactDialogs,false);
00137   addItemBool("VerticalScreen",&mVerticalScreen,false);
00138 
00139   KPrefs::setCurrentGroup("KOrganizer Plugins");
00140 
00141   addItemStringList("SelectedPlugins",&mSelectedPlugins,"holidays");
00142 
00143   KPrefs::setCurrentGroup("Group Scheduling");
00144 
00145   addItemInt("IMIPScheduler",&mIMIPScheduler,IMIPKMail);
00146   addItemInt("IMIPSend",&mIMIPSend,IMIPdirectsend);
00147   addItemStringList("AdditionalMails",&mAdditionalMails,"");
00148   addItemInt("IMIP auto refresh",&mIMIPAutoRefresh,neverAuto);
00149   addItemInt("IMIP auto insert request",&mIMIPAutoInsertRequest,neverAuto);
00150   addItemInt("IMIP auto insert reply",&mIMIPAutoInsertReply,neverAuto);
00151   addItemInt("IMIP auto FreeBusy",&mIMIPAutoFreeBusy,neverAuto);
00152   addItemInt("IMIP auto save FreeBusy",&mIMIPAutoFreeBusyReply,neverAuto);
00153 
00154   KPrefs::setCurrentGroup( "Editors" );
00155   
00156   addItemStringList( "EventTemplates", &mEventTemplates );
00157   addItemStringList( "TodoTemplates", &mTodoTemplates );
00158 }
00159 
00160 
00161 KOPrefs::~KOPrefs()
00162 {
00163   kdDebug() << "KOPrefs::~KOPrefs()" << endl;
00164   if (mInstance == this)
00165       mInstance = insd.setObject(0);
00166 }
00167 
00168 
00169 KOPrefs *KOPrefs::instance()
00170 {
00171   if (!mInstance) {
00172       mInstance = insd.setObject(new KOPrefs());
00173       mInstance->readConfig();
00174   }
00175 
00176   return mInstance;
00177 }
00178 
00179 void KOPrefs::usrSetDefaults()
00180 {
00181   // Default should be set a bit smarter, respecting username and locale
00182   // settings for example.
00183 
00184   KEMailSettings settings;
00185   mName = settings.getSetting(KEMailSettings::RealName);
00186   mEmail = settings.getSetting(KEMailSettings::RealName);
00187   fillMailDefaults();
00188 
00189   mTimeZone = "+0000";
00190 
00191   mTimeBarFont = mDefaultTimeBarFont;
00192   mMonthViewFont = mDefaultMonthViewFont;
00193   mAgendaViewFont = mDefaultViewFont;
00194   mMarcusBainsFont = mDefaultViewFont;
00195 
00196   setTimeZoneIdDefault();
00197 
00198   KPimPrefs::usrSetDefaults();
00199 }
00200 
00201 void KOPrefs::fillMailDefaults()
00202 {
00203   if (mName.isEmpty()) mName = i18n("Anonymous");
00204   if (mEmail.isEmpty()) mEmail = i18n("nobody@nowhere");
00205 }
00206 
00207 void KOPrefs::setTimeZoneIdDefault()
00208 {
00209   QString zone;
00210 
00211   char zonefilebuf[100];
00212   int len = readlink("/etc/localtime",zonefilebuf,100);
00213   if (len > 0 && len < 100) {
00214     zonefilebuf[len] = '\0';
00215     zone = zonefilebuf;
00216     zone = zone.mid(zone.find("zoneinfo/") + 9);
00217   } else {
00218     tzset();
00219     zone = tzname[0];
00220   }
00221   
00222   kdDebug () << "----- time zone: " << zone << endl;
00223 
00224   mTimeZoneId = zone;
00225 }
00226 
00227 void KOPrefs::setCategoryDefaults()
00228 {
00229   mCustomCategories.clear();
00230 
00231   mCustomCategories << i18n("Appointment") << i18n("Business")
00232       << i18n("Meeting") << i18n("Phone Call") << i18n("Education")
00233       << i18n("Holiday") << i18n("Vacation") << i18n("Special Occasion")
00234       << i18n("Personal") << i18n("Travel") << i18n("Miscellaneous")
00235       << i18n("Birthday");
00236 
00237   QStringList::Iterator it;
00238   for (it = mCustomCategories.begin();it != mCustomCategories.end();++it ) {
00239     setCategoryColor(*it,mDefaultCategoryColor);
00240   }
00241 }
00242 
00243 
00244 void KOPrefs::usrReadConfig()
00245 {
00246   config()->setGroup("General");
00247   mCustomCategories = config()->readListEntry("Custom Categories");
00248   if (mCustomCategories.isEmpty()) setCategoryDefaults();
00249 
00250   config()->setGroup("Personal Settings");
00251   mName = config()->readEntry("user_name","");
00252   mEmail = config()->readEntry("user_email","");
00253   fillMailDefaults();
00254 
00255   config()->setGroup("Category Colors");
00256   QStringList::Iterator it;
00257   for (it = mCustomCategories.begin();it != mCustomCategories.end();++it ) {
00258     setCategoryColor(*it,config()->readColorEntry(*it,&mDefaultCategoryColor));
00259   }
00260   
00261   if (mTimeZoneId.isEmpty()) {
00262     setTimeZoneIdDefault();
00263   }
00264 
00265   KPimPrefs::usrReadConfig();
00266 }
00267 
00268 
00269 void KOPrefs::usrWriteConfig()
00270 {
00271   config()->setGroup("General");
00272   config()->writeEntry("Custom Categories",mCustomCategories);
00273 
00274   config()->setGroup("Personal Settings");
00275   config()->writeEntry("user_name",mName);
00276   config()->writeEntry("user_email",mEmail);
00277 
00278   config()->setGroup("Category Colors");
00279   QDictIterator<QColor> it(mCategoryColors);
00280   while (it.current()) {
00281     config()->writeEntry(it.currentKey(),*(it.current()));
00282     ++it;
00283   }
00284 
00285   KPimPrefs::usrWriteConfig();
00286 }
00287 
00288 void KOPrefs::setCategoryColor(QString cat,const QColor & color)
00289 {
00290   mCategoryColors.replace(cat,new QColor(color));
00291 }
00292 
00293 QColor *KOPrefs::categoryColor(QString cat)
00294 {
00295   QColor *color = 0;
00296 
00297   if (!cat.isEmpty()) color = mCategoryColors[cat];
00298 
00299   if (color) return color;
00300   else return &mDefaultCategoryColor;
00301 }
00302 
00303 void KOPrefs::setFullName(const QString &name)
00304 {
00305   mName = name;
00306 }
00307 
00308 void KOPrefs::setEmail(const QString &email)
00309 {
00310   mEmail = email;
00311 }
00312 
00313 QString KOPrefs::fullName()
00314 {
00315   if (mEmailControlCenter) {
00316     KEMailSettings settings;
00317     return settings.getSetting(KEMailSettings::RealName);
00318   } else {
00319     return mName;
00320   }
00321 }
00322 
00323 QString KOPrefs::email()
00324 {
00325   if (mEmailControlCenter) {
00326     KEMailSettings settings;
00327     return settings.getSetting(KEMailSettings::EmailAddress);
00328   } else {
00329     return mEmail;
00330   }
00331 }
KDE Logo
This file is part of the documentation for kdelibs Version 3.1.5.
Documentation copyright © 1996-2002 the KDE developers.
Generated on Sun Feb 15 11:41:09 2004 by doxygen 1.3.5 written by Dimitri van Heesch, © 1997-2001