00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
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
00182
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 }