00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "kalarm.h"
00022
00023 #include <kglobal.h>
00024 #include <kconfig.h>
00025 #include <kstandarddirs.h>
00026 #include <kapplication.h>
00027 #include <kglobalsettings.h>
00028 #include <kmessagebox.h>
00029
00030 #include <libkpimidentities/identity.h>
00031 #include <libkpimidentities/identitymanager.h>
00032
00033 #include "daemon.h"
00034 #include "functions.h"
00035 #include "kamail.h"
00036 #include "messagebox.h"
00037 #include "preferences.moc"
00038
00039
00040 static QString translateXTermPath(KConfig*, const QString& cmdline, bool write);
00041
00042 Preferences* Preferences::mInstance = 0;
00043
00044
00045 QColor defaultMessageColours[] = { Qt::red, Qt::green, Qt::blue, Qt::cyan, Qt::magenta, Qt::yellow, Qt::white, Qt::lightGray, Qt::black, QColor() };
00046 const ColourList Preferences::default_messageColours(defaultMessageColours);
00047 const QColor Preferences::default_defaultBgColour(Qt::red);
00048 const QColor Preferences::default_defaultFgColour(Qt::black);
00049 QFont Preferences::mDefault_messageFont;
00050 const QTime Preferences::default_startOfDay(0, 0);
00051 const bool Preferences::default_runInSystemTray = true;
00052 const bool Preferences::default_disableAlarmsIfStopped = true;
00053 const bool Preferences::default_quitWarn = true;
00054 const bool Preferences::default_autostartTrayIcon = true;
00055 const bool Preferences::default_confirmAlarmDeletion = true;
00056 const bool Preferences::default_modalMessages = true;
00057 const int Preferences::default_messageButtonDelay = 0;
00058 const bool Preferences::default_showExpiredAlarms = false;
00059 const bool Preferences::default_showAlarmTime = true;
00060 const bool Preferences::default_showTimeToAlarm = false;
00061 const int Preferences::default_tooltipAlarmCount = 5;
00062 const bool Preferences::default_showTooltipAlarmTime = true;
00063 const bool Preferences::default_showTooltipTimeToAlarm = true;
00064 const QString Preferences::default_tooltipTimeToPrefix = QString::fromLatin1("+");
00065 const int Preferences::default_daemonTrayCheckInterval = 10;
00066 const bool Preferences::default_emailCopyToKMail = false;
00067 const bool Preferences::default_emailQueuedNotify = false;
00068 const QColor Preferences::default_disabledColour(Qt::lightGray);
00069 const QColor Preferences::default_expiredColour(Qt::darkRed);
00070 const int Preferences::default_expiredKeepDays = 7;
00071 const QString Preferences::default_defaultSoundFile = QString::null;
00072 const float Preferences::default_defaultSoundVolume = -1;
00073 const int Preferences::default_defaultLateCancel = 0;
00074 const bool Preferences::default_defaultAutoClose = false;
00075 const bool Preferences::default_defaultCopyToKOrganizer = false;
00076 const bool Preferences::default_defaultSoundRepeat = false;
00077 const SoundPicker::Type Preferences::default_defaultSoundType = SoundPicker::BEEP;
00078 const bool Preferences::default_defaultConfirmAck = false;
00079 const bool Preferences::default_defaultCmdScript = false;
00080 const EditAlarmDlg::CmdLogType Preferences::default_defaultCmdLogType = EditAlarmDlg::DISCARD_OUTPUT;
00081 const bool Preferences::default_defaultEmailBcc = false;
00082 const QString Preferences::default_emailAddress = QString::null;
00083 const QString Preferences::default_emailBccAddress = QString::null;
00084 const Preferences::MailClient Preferences::default_emailClient = KMAIL;
00085 const Preferences::MailFrom Preferences::default_emailBccFrom = MAIL_FROM_CONTROL_CENTRE;
00086 const RecurrenceEdit::RepeatType Preferences::default_defaultRecurPeriod = RecurrenceEdit::NO_RECUR;
00087 const KARecurrence::Feb29Type Preferences::default_defaultFeb29Type = KARecurrence::FEB29_MAR1;
00088 const TimePeriod::Units Preferences::default_defaultReminderUnits = TimePeriod::HOURS_MINUTES;
00089 const QString Preferences::default_defaultPreAction;
00090 const QString Preferences::default_defaultPostAction;
00091
00092 Preferences::MailFrom Preferences::default_emailFrom()
00093 {
00094 return KAMail::identitiesExist() ? MAIL_FROM_KMAIL : MAIL_FROM_CONTROL_CENTRE;
00095 }
00096
00097
00098 ColourList Preferences::mMessageColours;
00099 QColor Preferences::mDefaultBgColour;
00100 QFont Preferences::mMessageFont;
00101 QTime Preferences::mStartOfDay;
00102 bool Preferences::mRunInSystemTray;
00103 bool Preferences::mDisableAlarmsIfStopped;
00104 bool Preferences::mAutostartTrayIcon;
00105 KARecurrence::Feb29Type Preferences::mDefaultFeb29Type;
00106 bool Preferences::mModalMessages;
00107 int Preferences::mMessageButtonDelay;
00108 bool Preferences::mShowExpiredAlarms;
00109 bool Preferences::mShowAlarmTime;
00110 bool Preferences::mShowTimeToAlarm;
00111 int Preferences::mTooltipAlarmCount;
00112 bool Preferences::mShowTooltipAlarmTime;
00113 bool Preferences::mShowTooltipTimeToAlarm;
00114 QString Preferences::mTooltipTimeToPrefix;
00115 int Preferences::mDaemonTrayCheckInterval;
00116 QString Preferences::mEmailAddress;
00117 QString Preferences::mEmailBccAddress;
00118 Preferences::MailClient Preferences::mEmailClient;
00119 Preferences::MailFrom Preferences::mEmailFrom;
00120 Preferences::MailFrom Preferences::mEmailBccFrom;
00121 bool Preferences::mEmailCopyToKMail;
00122 QString Preferences::mCmdXTermCommand;
00123 QColor Preferences::mDisabledColour;
00124 QColor Preferences::mExpiredColour;
00125 int Preferences::mExpiredKeepDays;
00126
00127 QString Preferences::mDefaultSoundFile;
00128 float Preferences::mDefaultSoundVolume;
00129 int Preferences::mDefaultLateCancel;
00130 bool Preferences::mDefaultAutoClose;
00131 bool Preferences::mDefaultCopyToKOrganizer;
00132 SoundPicker::Type Preferences::mDefaultSoundType;
00133 bool Preferences::mDefaultSoundRepeat;
00134 bool Preferences::mDefaultConfirmAck;
00135 bool Preferences::mDefaultEmailBcc;
00136 bool Preferences::mDefaultCmdScript;
00137 EditAlarmDlg::CmdLogType Preferences::mDefaultCmdLogType;
00138 QString Preferences::mDefaultCmdLogFile;
00139 RecurrenceEdit::RepeatType Preferences::mDefaultRecurPeriod;
00140 TimePeriod::Units Preferences::mDefaultReminderUnits;
00141 QString Preferences::mDefaultPreAction;
00142 QString Preferences::mDefaultPostAction;
00143
00144 QTime Preferences::mOldStartOfDay;
00145 bool Preferences::mStartOfDayChanged;
00146
00147
00148 static const QString defaultFeb29RecurType = QString::fromLatin1("Mar1");
00149 static const QString defaultEmailClient = QString::fromLatin1("kmail");
00150
00151
00152 static const QString GENERAL_SECTION = QString::fromLatin1("General");
00153 static const QString VERSION_NUM = QString::fromLatin1("Version");
00154 static const QString MESSAGE_COLOURS = QString::fromLatin1("MessageColours");
00155 static const QString MESSAGE_BG_COLOUR = QString::fromLatin1("MessageBackgroundColour");
00156 static const QString MESSAGE_FONT = QString::fromLatin1("MessageFont");
00157 static const QString RUN_IN_SYSTEM_TRAY = QString::fromLatin1("RunInSystemTray");
00158 static const QString DISABLE_IF_STOPPED = QString::fromLatin1("DisableAlarmsIfStopped");
00159 static const QString AUTOSTART_TRAY = QString::fromLatin1("AutostartTray");
00160 static const QString FEB29_RECUR_TYPE = QString::fromLatin1("Feb29Recur");
00161 static const QString MODAL_MESSAGES = QString::fromLatin1("ModalMessages");
00162 static const QString MESSAGE_BUTTON_DELAY = QString::fromLatin1("MessageButtonDelay");
00163 static const QString SHOW_EXPIRED_ALARMS = QString::fromLatin1("ShowExpiredAlarms");
00164 static const QString SHOW_ALARM_TIME = QString::fromLatin1("ShowAlarmTime");
00165 static const QString SHOW_TIME_TO_ALARM = QString::fromLatin1("ShowTimeToAlarm");
00166 static const QString TOOLTIP_ALARM_COUNT = QString::fromLatin1("TooltipAlarmCount");
00167 static const QString TOOLTIP_ALARM_TIME = QString::fromLatin1("ShowTooltipAlarmTime");
00168 static const QString TOOLTIP_TIME_TO_ALARM = QString::fromLatin1("ShowTooltipTimeToAlarm");
00169 static const QString TOOLTIP_TIME_TO_PREFIX = QString::fromLatin1("TooltipTimeToPrefix");
00170 static const QString DAEMON_TRAY_INTERVAL = QString::fromLatin1("DaemonTrayCheckInterval");
00171 static const QString EMAIL_CLIENT = QString::fromLatin1("EmailClient");
00172 static const QString EMAIL_COPY_TO_KMAIL = QString::fromLatin1("EmailCopyToKMail");
00173 static const QString EMAIL_FROM = QString::fromLatin1("EmailFrom");
00174 static const QString EMAIL_BCC_ADDRESS = QString::fromLatin1("EmailBccAddress");
00175 static const QString CMD_XTERM_COMMAND = QString::fromLatin1("CmdXTerm");
00176 static const QString START_OF_DAY = QString::fromLatin1("StartOfDay");
00177 static const QString START_OF_DAY_CHECK = QString::fromLatin1("Sod");
00178 static const QString DISABLED_COLOUR = QString::fromLatin1("DisabledColour");
00179 static const QString EXPIRED_COLOUR = QString::fromLatin1("ExpiredColour");
00180 static const QString EXPIRED_KEEP_DAYS = QString::fromLatin1("ExpiredKeepDays");
00181 static const QString DEFAULTS_SECTION = QString::fromLatin1("Defaults");
00182 static const QString DEF_LATE_CANCEL = QString::fromLatin1("DefLateCancel");
00183 static const QString DEF_AUTO_CLOSE = QString::fromLatin1("DefAutoClose");
00184 static const QString DEF_CONFIRM_ACK = QString::fromLatin1("DefConfirmAck");
00185 static const QString DEF_COPY_TO_KORG = QString::fromLatin1("DefCopyKOrg");
00186 static const QString DEF_SOUND_TYPE = QString::fromLatin1("DefSoundType");
00187 static const QString DEF_SOUND_FILE = QString::fromLatin1("DefSoundFile");
00188 static const QString DEF_SOUND_VOLUME = QString::fromLatin1("DefSoundVolume");
00189 static const QString DEF_SOUND_REPEAT = QString::fromLatin1("DefSoundRepeat");
00190 static const QString DEF_CMD_SCRIPT = QString::fromLatin1("DefCmdScript");
00191 static const QString DEF_CMD_LOG_TYPE = QString::fromLatin1("DefCmdLogType");
00192 static const QString DEF_LOG_FILE = QString::fromLatin1("DefLogFile");
00193 static const QString DEF_EMAIL_BCC = QString::fromLatin1("DefEmailBcc");
00194 static const QString DEF_RECUR_PERIOD = QString::fromLatin1("DefRecurPeriod");
00195 static const QString DEF_REMIND_UNITS = QString::fromLatin1("DefRemindUnits");
00196 static const QString DEF_PRE_ACTION = QString::fromLatin1("DefPreAction");
00197 static const QString DEF_POST_ACTION = QString::fromLatin1("DefPostAction");
00198
00199
00200 static const QString TEMP = QString::fromLatin1("Temp");
00201
00202
00203 static const QString FROM_CONTROL_CENTRE = QString::fromLatin1("@ControlCenter");
00204 static const QString FROM_KMAIL = QString::fromLatin1("@KMail");
00205
00206
00207 const QString Preferences::QUIT_WARN = QString::fromLatin1("QuitWarn");
00208 const QString Preferences::CONFIRM_ALARM_DELETION = QString::fromLatin1("ConfirmAlarmDeletion");
00209 const QString Preferences::EMAIL_QUEUED_NOTIFY = QString::fromLatin1("EmailQueuedNotify");
00210
00211 static const int SODxor = 0x82451630;
00212 inline int Preferences::startOfDayCheck()
00213 {
00214
00215
00216 return QTime().msecsTo(mStartOfDay) ^ SODxor;
00217 }
00218
00219
00220 void Preferences::initialise()
00221 {
00222 if (!mInstance)
00223 {
00224
00225
00226 mDefault_messageFont = QFont(KGlobalSettings::generalFont().family(), 16, QFont::Bold);
00227
00228 mInstance = new Preferences;
00229
00230 convertOldPrefs();
00231 read();
00232
00233
00234 MessageBox::setContinueDefault(QUIT_WARN, KMessageBox::Cancel);
00235 MessageBox::setDefaultShouldBeShownContinue(QUIT_WARN, default_quitWarn);
00236 MessageBox::setDefaultShouldBeShownContinue(EMAIL_QUEUED_NOTIFY, default_emailQueuedNotify);
00237 MessageBox::setDefaultShouldBeShownContinue(CONFIRM_ALARM_DELETION, default_confirmAlarmDeletion);
00238 }
00239 }
00240
00241 void Preferences::connect(const char* signal, const QObject* receiver, const char* member)
00242 {
00243 initialise();
00244 QObject::connect(mInstance, signal, receiver, member);
00245 }
00246
00247 void Preferences::emitStartOfDayChanged()
00248 {
00249 emit startOfDayChanged(mOldStartOfDay);
00250 }
00251
00252 void Preferences::emitPreferencesChanged()
00253 {
00254 emit preferencesChanged();
00255 }
00256
00257
00258
00259
00260 void Preferences::read()
00261 {
00262 initialise();
00263
00264 KConfig* config = KGlobal::config();
00265 config->setGroup(GENERAL_SECTION);
00266 QStringList cols = config->readListEntry(MESSAGE_COLOURS);
00267 if (!cols.count())
00268 mMessageColours = default_messageColours;
00269 else
00270 {
00271 mMessageColours.clear();
00272 for (QStringList::Iterator it = cols.begin(); it != cols.end(); ++it)
00273 {
00274 QColor c((*it));
00275 if (c.isValid())
00276 mMessageColours.insert(c);
00277 }
00278 }
00279 mDefaultBgColour = config->readColorEntry(MESSAGE_BG_COLOUR, &default_defaultBgColour);
00280 mMessageFont = config->readFontEntry(MESSAGE_FONT, &mDefault_messageFont);
00281 mRunInSystemTray = config->readBoolEntry(RUN_IN_SYSTEM_TRAY, default_runInSystemTray);
00282 mDisableAlarmsIfStopped = config->readBoolEntry(DISABLE_IF_STOPPED, default_disableAlarmsIfStopped);
00283 mAutostartTrayIcon = config->readBoolEntry(AUTOSTART_TRAY, default_autostartTrayIcon);
00284 mModalMessages = config->readBoolEntry(MODAL_MESSAGES, default_modalMessages);
00285 mMessageButtonDelay = config->readNumEntry(MESSAGE_BUTTON_DELAY, default_messageButtonDelay);
00286 mShowExpiredAlarms = config->readBoolEntry(SHOW_EXPIRED_ALARMS, default_showExpiredAlarms);
00287 mShowTimeToAlarm = config->readBoolEntry(SHOW_TIME_TO_ALARM, default_showTimeToAlarm);
00288 mShowAlarmTime = !mShowTimeToAlarm ? true : config->readBoolEntry(SHOW_ALARM_TIME, default_showAlarmTime);
00289 mTooltipAlarmCount = static_cast<int>(config->readUnsignedNumEntry(TOOLTIP_ALARM_COUNT, default_tooltipAlarmCount));
00290 if (mTooltipAlarmCount < 1)
00291 mTooltipAlarmCount = 1;
00292 mShowTooltipAlarmTime = config->readBoolEntry(TOOLTIP_ALARM_TIME, default_showTooltipAlarmTime);
00293 mShowTooltipTimeToAlarm = config->readBoolEntry(TOOLTIP_TIME_TO_ALARM, default_showTooltipTimeToAlarm);
00294 mTooltipTimeToPrefix = config->readEntry(TOOLTIP_TIME_TO_PREFIX, default_tooltipTimeToPrefix);
00295 mDaemonTrayCheckInterval = static_cast<int>(config->readUnsignedNumEntry(DAEMON_TRAY_INTERVAL, default_daemonTrayCheckInterval));
00296 if (mDaemonTrayCheckInterval < 1)
00297 mDaemonTrayCheckInterval = 1;
00298 QCString client = config->readEntry(EMAIL_CLIENT, defaultEmailClient).local8Bit();
00299 mEmailClient = (client == "sendmail" ? SENDMAIL : KMAIL);
00300 mEmailCopyToKMail = config->readBoolEntry(EMAIL_COPY_TO_KMAIL, default_emailCopyToKMail);
00301 QString from = config->readEntry(EMAIL_FROM, emailFrom(default_emailFrom(), false, false));
00302 mEmailFrom = emailFrom(from);
00303 QString bccFrom = config->readEntry(EMAIL_BCC_ADDRESS, emailFrom(default_emailBccFrom, false, true));
00304 mEmailBccFrom = emailFrom(bccFrom);
00305 if (mEmailFrom == MAIL_FROM_CONTROL_CENTRE || mEmailBccFrom == MAIL_FROM_CONTROL_CENTRE)
00306 mEmailAddress = mEmailBccAddress = KAMail::controlCentreAddress();
00307 if (mEmailFrom == MAIL_FROM_ADDR)
00308 mEmailAddress = from;
00309 if (mEmailBccFrom == MAIL_FROM_ADDR)
00310 mEmailBccAddress = bccFrom;
00311 mCmdXTermCommand = translateXTermPath(config, config->readEntry(CMD_XTERM_COMMAND), false);
00312 QDateTime defStartOfDay(QDate(1900,1,1), default_startOfDay);
00313 mStartOfDay = config->readDateTimeEntry(START_OF_DAY, &defStartOfDay).time();
00314 mOldStartOfDay.setHMS(0,0,0);
00315 int sod = config->readNumEntry(START_OF_DAY_CHECK, 0);
00316 if (sod)
00317 mOldStartOfDay = mOldStartOfDay.addMSecs(sod ^ SODxor);
00318 mDisabledColour = config->readColorEntry(DISABLED_COLOUR, &default_disabledColour);
00319 mExpiredColour = config->readColorEntry(EXPIRED_COLOUR, &default_expiredColour);
00320 mExpiredKeepDays = config->readNumEntry(EXPIRED_KEEP_DAYS, default_expiredKeepDays);
00321
00322 config->setGroup(DEFAULTS_SECTION);
00323 mDefaultLateCancel = static_cast<int>(config->readUnsignedNumEntry(DEF_LATE_CANCEL, default_defaultLateCancel));
00324 mDefaultAutoClose = config->readBoolEntry(DEF_AUTO_CLOSE, default_defaultAutoClose);
00325 mDefaultConfirmAck = config->readBoolEntry(DEF_CONFIRM_ACK, default_defaultConfirmAck);
00326 mDefaultCopyToKOrganizer = config->readBoolEntry(DEF_COPY_TO_KORG, default_defaultCopyToKOrganizer);
00327 int soundType = config->readNumEntry(DEF_SOUND_TYPE, default_defaultSoundType);
00328 mDefaultSoundType = (soundType < 0 || soundType > SoundPicker::SPEAK)
00329 ? default_defaultSoundType : (SoundPicker::Type)soundType;
00330 mDefaultSoundVolume = static_cast<float>(config->readDoubleNumEntry(DEF_SOUND_VOLUME, default_defaultSoundVolume));
00331 #ifdef WITHOUT_ARTS
00332 mDefaultSoundRepeat = false;
00333 #else
00334 mDefaultSoundRepeat = config->readBoolEntry(DEF_SOUND_REPEAT, default_defaultSoundRepeat);
00335 #endif
00336 mDefaultSoundFile = config->readPathEntry(DEF_SOUND_FILE);
00337 mDefaultCmdScript = config->readBoolEntry(DEF_CMD_SCRIPT, default_defaultCmdScript);
00338 int logType = config->readNumEntry(DEF_CMD_LOG_TYPE, default_defaultCmdLogType);
00339 mDefaultCmdLogType = (logType < EditAlarmDlg::DISCARD_OUTPUT || logType > EditAlarmDlg::EXEC_IN_TERMINAL)
00340 ? default_defaultCmdLogType : (EditAlarmDlg::CmdLogType)logType;
00341 mDefaultCmdLogFile = config->readPathEntry(DEF_LOG_FILE);
00342 mDefaultEmailBcc = config->readBoolEntry(DEF_EMAIL_BCC, default_defaultEmailBcc);
00343 int recurPeriod = config->readNumEntry(DEF_RECUR_PERIOD, default_defaultRecurPeriod);
00344 mDefaultRecurPeriod = (recurPeriod < RecurrenceEdit::SUBDAILY || recurPeriod > RecurrenceEdit::ANNUAL)
00345 ? default_defaultRecurPeriod : (RecurrenceEdit::RepeatType)recurPeriod;
00346 QCString feb29 = config->readEntry(FEB29_RECUR_TYPE, defaultFeb29RecurType).local8Bit();
00347 mDefaultFeb29Type = (feb29 == "Mar1") ? KARecurrence::FEB29_MAR1 : (feb29 == "Feb28") ? KARecurrence::FEB29_FEB28 : KARecurrence::FEB29_FEB29;
00348 int reminderUnits = config->readNumEntry(DEF_REMIND_UNITS, default_defaultReminderUnits);
00349 mDefaultReminderUnits = (reminderUnits < TimePeriod::HOURS_MINUTES || reminderUnits > TimePeriod::WEEKS)
00350 ? default_defaultReminderUnits : (TimePeriod::Units)reminderUnits;
00351 mDefaultPreAction = config->readEntry(DEF_PRE_ACTION, default_defaultPreAction);
00352 mDefaultPostAction = config->readEntry(DEF_POST_ACTION, default_defaultPostAction);
00353 mInstance->emitPreferencesChanged();
00354 mStartOfDayChanged = (mStartOfDay != mOldStartOfDay);
00355 if (mStartOfDayChanged)
00356 {
00357 mInstance->emitStartOfDayChanged();
00358 mOldStartOfDay = mStartOfDay;
00359 }
00360 }
00361
00362
00363
00364
00365 void Preferences::save(bool syncToDisc)
00366 {
00367 KConfig* config = KGlobal::config();
00368 config->setGroup(GENERAL_SECTION);
00369 config->writeEntry(VERSION_NUM, KALARM_VERSION);
00370 QStringList colours;
00371 for (ColourList::const_iterator it = mMessageColours.begin(); it != mMessageColours.end(); ++it)
00372 colours.append(QColor(*it).name());
00373 config->writeEntry(MESSAGE_COLOURS, colours);
00374 config->writeEntry(MESSAGE_BG_COLOUR, mDefaultBgColour);
00375 config->writeEntry(MESSAGE_FONT, mMessageFont);
00376 config->writeEntry(RUN_IN_SYSTEM_TRAY, mRunInSystemTray);
00377 config->writeEntry(DISABLE_IF_STOPPED, mDisableAlarmsIfStopped);
00378 config->writeEntry(AUTOSTART_TRAY, mAutostartTrayIcon);
00379 config->writeEntry(MODAL_MESSAGES, mModalMessages);
00380 config->writeEntry(MESSAGE_BUTTON_DELAY, mMessageButtonDelay);
00381 config->writeEntry(SHOW_EXPIRED_ALARMS, mShowExpiredAlarms);
00382 config->writeEntry(SHOW_ALARM_TIME, mShowAlarmTime);
00383 config->writeEntry(SHOW_TIME_TO_ALARM, mShowTimeToAlarm);
00384 config->writeEntry(TOOLTIP_ALARM_COUNT, mTooltipAlarmCount);
00385 config->writeEntry(TOOLTIP_ALARM_TIME, mShowTooltipAlarmTime);
00386 config->writeEntry(TOOLTIP_TIME_TO_ALARM, mShowTooltipTimeToAlarm);
00387 config->writeEntry(TOOLTIP_TIME_TO_PREFIX, mTooltipTimeToPrefix);
00388 config->writeEntry(DAEMON_TRAY_INTERVAL, mDaemonTrayCheckInterval);
00389 config->writeEntry(EMAIL_CLIENT, (mEmailClient == SENDMAIL ? "sendmail" : "kmail"));
00390 config->writeEntry(EMAIL_COPY_TO_KMAIL, mEmailCopyToKMail);
00391 config->writeEntry(EMAIL_FROM, emailFrom(mEmailFrom, true, false));
00392 config->writeEntry(EMAIL_BCC_ADDRESS, emailFrom(mEmailBccFrom, true, true));
00393 config->writeEntry(CMD_XTERM_COMMAND, translateXTermPath(config, mCmdXTermCommand, true));
00394 config->writeEntry(START_OF_DAY, QDateTime(QDate(1900,1,1), mStartOfDay));
00395
00396 config->writeEntry(DISABLED_COLOUR, mDisabledColour);
00397 config->writeEntry(EXPIRED_COLOUR, mExpiredColour);
00398 config->writeEntry(EXPIRED_KEEP_DAYS, mExpiredKeepDays);
00399
00400 config->setGroup(DEFAULTS_SECTION);
00401 config->writeEntry(DEF_LATE_CANCEL, mDefaultLateCancel);
00402 config->writeEntry(DEF_AUTO_CLOSE, mDefaultAutoClose);
00403 config->writeEntry(DEF_CONFIRM_ACK, mDefaultConfirmAck);
00404 config->writeEntry(DEF_COPY_TO_KORG, mDefaultCopyToKOrganizer);
00405 config->writeEntry(DEF_SOUND_TYPE, mDefaultSoundType);
00406 config->writePathEntry(DEF_SOUND_FILE, mDefaultSoundFile);
00407 config->writeEntry(DEF_SOUND_VOLUME, static_cast<double>(mDefaultSoundVolume));
00408 config->writeEntry(DEF_SOUND_REPEAT, mDefaultSoundRepeat);
00409 config->writeEntry(DEF_CMD_SCRIPT, mDefaultCmdScript);
00410 config->writeEntry(DEF_CMD_LOG_TYPE, mDefaultCmdLogType);
00411 config->writePathEntry(DEF_LOG_FILE, mDefaultCmdLogFile);
00412 config->writeEntry(DEF_EMAIL_BCC, mDefaultEmailBcc);
00413 config->writeEntry(DEF_RECUR_PERIOD, mDefaultRecurPeriod);
00414 config->writeEntry(FEB29_RECUR_TYPE, (mDefaultFeb29Type == KARecurrence::FEB29_MAR1 ? "Mar1" : mDefaultFeb29Type == KARecurrence::FEB29_FEB28 ? "Feb28" : "None"));
00415 config->writeEntry(DEF_REMIND_UNITS, mDefaultReminderUnits);
00416 config->writeEntry(DEF_PRE_ACTION, mDefaultPreAction);
00417 config->writeEntry(DEF_POST_ACTION, mDefaultPostAction);
00418
00419 if (syncToDisc)
00420 config->sync();
00421 mInstance->emitPreferencesChanged();
00422 if (mStartOfDay != mOldStartOfDay)
00423 {
00424 mInstance->emitStartOfDayChanged();
00425 mOldStartOfDay = mStartOfDay;
00426 }
00427 }
00428
00429 void Preferences::syncToDisc()
00430 {
00431 KGlobal::config()->sync();
00432 }
00433
00434 void Preferences::updateStartOfDayCheck()
00435 {
00436 KConfig* config = KGlobal::config();
00437 config->setGroup(GENERAL_SECTION);
00438 config->writeEntry(START_OF_DAY_CHECK, startOfDayCheck());
00439 config->sync();
00440 mStartOfDayChanged = false;
00441 }
00442
00443 QString Preferences::emailFrom(Preferences::MailFrom from, bool useAddress, bool bcc)
00444 {
00445 switch (from)
00446 {
00447 case MAIL_FROM_KMAIL:
00448 return FROM_KMAIL;
00449 case MAIL_FROM_CONTROL_CENTRE:
00450 return FROM_CONTROL_CENTRE;
00451 case MAIL_FROM_ADDR:
00452 return useAddress ? (bcc ? mEmailBccAddress : mEmailAddress) : QString::null;
00453 default:
00454 return QString::null;
00455 }
00456 }
00457
00458 Preferences::MailFrom Preferences::emailFrom(const QString& str)
00459 {
00460 if (str == FROM_KMAIL)
00461 return MAIL_FROM_KMAIL;
00462 if (str == FROM_CONTROL_CENTRE)
00463 return MAIL_FROM_CONTROL_CENTRE;
00464 return MAIL_FROM_ADDR;
00465 }
00466
00467
00468
00469
00470 QString Preferences::emailAddress()
00471 {
00472 switch (mEmailFrom)
00473 {
00474 case MAIL_FROM_KMAIL:
00475 return KAMail::identityManager()->defaultIdentity().fullEmailAddr();
00476 case MAIL_FROM_CONTROL_CENTRE:
00477 return KAMail::controlCentreAddress();
00478 case MAIL_FROM_ADDR:
00479 return mEmailAddress;
00480 default:
00481 return QString::null;
00482 }
00483 }
00484
00485 QString Preferences::emailBccAddress()
00486 {
00487 switch (mEmailBccFrom)
00488 {
00489 case MAIL_FROM_CONTROL_CENTRE:
00490 return KAMail::controlCentreAddress();
00491 case MAIL_FROM_ADDR:
00492 return mEmailBccAddress;
00493 default:
00494 return QString::null;
00495 }
00496 }
00497
00498 void Preferences::setEmailAddress(Preferences::MailFrom from, const QString& address)
00499 {
00500 switch (from)
00501 {
00502 case MAIL_FROM_KMAIL:
00503 break;
00504 case MAIL_FROM_CONTROL_CENTRE:
00505 mEmailAddress = KAMail::controlCentreAddress();
00506 break;
00507 case MAIL_FROM_ADDR:
00508 mEmailAddress = address;
00509 break;
00510 default:
00511 return;
00512 }
00513 mEmailFrom = from;
00514 }
00515
00516 void Preferences::setEmailBccAddress(bool useControlCentre, const QString& address)
00517 {
00518 if (useControlCentre)
00519 mEmailBccAddress = KAMail::controlCentreAddress();
00520 else
00521 mEmailBccAddress = address;
00522 mEmailBccFrom = useControlCentre ? MAIL_FROM_CONTROL_CENTRE : MAIL_FROM_ADDR;
00523 }
00524
00525
00526
00527
00528
00529 void Preferences::setNotify(const QString& messageID, bool notify)
00530 {
00531 MessageBox::saveDontShowAgainContinue(messageID, !notify);
00532 }
00533
00534
00535
00536
00537
00538
00539
00540
00541 bool Preferences::notifying(const QString& messageID)
00542 {
00543 return MessageBox::shouldBeShownContinue(messageID);
00544 }
00545
00546
00547
00548
00549
00550 void Preferences::convertOldPrefs()
00551 {
00552 KConfig* config = KGlobal::config();
00553 config->setGroup(GENERAL_SECTION);
00554 int version = KAlarm::getVersionNumber(config->readEntry(VERSION_NUM));
00555 if (version >= KAlarm::Version(1,4,6))
00556 return;
00557
00558
00559 static const QString DEF_SOUND = QString::fromLatin1("DefSound");
00560 config->setGroup(DEFAULTS_SECTION);
00561 bool sound = config->readBoolEntry(DEF_SOUND, false);
00562 if (!sound)
00563 config->writeEntry(DEF_SOUND_TYPE, SoundPicker::NONE);
00564 config->deleteEntry(DEF_SOUND);
00565
00566 if (version < KAlarm::Version(1,3,0))
00567 {
00568
00569 static const QString EMAIL_ADDRESS = QString::fromLatin1("EmailAddress");
00570 static const QString EMAIL_USE_CTRL_CENTRE = QString::fromLatin1("EmailUseControlCenter");
00571 static const QString EMAIL_BCC_USE_CTRL_CENTRE = QString::fromLatin1("EmailBccUseControlCenter");
00572 QMap<QString, QString> entries = config->entryMap(GENERAL_SECTION);
00573 if (entries.find(EMAIL_FROM) == entries.end()
00574 && entries.find(EMAIL_USE_CTRL_CENTRE) != entries.end())
00575 {
00576
00577 config->setGroup(GENERAL_SECTION);
00578 bool useCC = false;
00579 bool bccUseCC = false;
00580 const bool default_emailUseControlCentre = true;
00581 const bool default_emailBccUseControlCentre = true;
00582 useCC = config->readBoolEntry(EMAIL_USE_CTRL_CENTRE, default_emailUseControlCentre);
00583
00584 bccUseCC = config->hasKey(EMAIL_BCC_USE_CTRL_CENTRE)
00585 ? config->readBoolEntry(EMAIL_BCC_USE_CTRL_CENTRE, default_emailBccUseControlCentre)
00586 : useCC;
00587 config->writeEntry(EMAIL_FROM, (useCC ? FROM_CONTROL_CENTRE : config->readEntry(EMAIL_ADDRESS)));
00588 config->writeEntry(EMAIL_BCC_ADDRESS, (bccUseCC ? FROM_CONTROL_CENTRE : config->readEntry(EMAIL_BCC_ADDRESS)));
00589 config->deleteEntry(EMAIL_ADDRESS);
00590 config->deleteEntry(EMAIL_BCC_USE_CTRL_CENTRE);
00591 config->deleteEntry(EMAIL_USE_CTRL_CENTRE);
00592 }
00593
00594 static const QString DEF_CMD_XTERM = QString::fromLatin1("DefCmdXterm");
00595 config->setGroup(DEFAULTS_SECTION);
00596 if (config->hasKey(DEF_CMD_XTERM))
00597 {
00598 config->writeEntry(DEF_CMD_LOG_TYPE,
00599 (config->readBoolEntry(DEF_CMD_XTERM, false) ? EditAlarmDlg::EXEC_IN_TERMINAL : EditAlarmDlg::DISCARD_OUTPUT));
00600 config->deleteEntry(DEF_CMD_XTERM);
00601 }
00602 }
00603 config->setGroup(GENERAL_SECTION);
00604 config->writeEntry(VERSION_NUM, KALARM_VERSION);
00605 config->sync();
00606 }
00607
00608
00609
00610
00611
00612
00613
00614
00615
00616
00617 QString translateXTermPath(KConfig* config, const QString& cmdline, bool write)
00618 {
00619 QString params;
00620 QString cmd = cmdline;
00621 if (cmdline.isEmpty())
00622 return cmdline;
00623
00624 QChar quote = cmdline[0];
00625 char q = static_cast<char>(quote);
00626 bool quoted = (q == '"' || q == '\'');
00627 if (quoted)
00628 cmd = cmdline.mid(1);
00629
00630 for (int i = 0, count = cmd.length(); i < count; ++i)
00631 {
00632 switch (cmd[i].latin1())
00633 {
00634 case '\\':
00635 ++i;
00636 continue;
00637 case '"':
00638 case '\'':
00639 if (cmd[i] != quote)
00640 continue;
00641
00642 case ' ':
00643 params = cmd.mid(i);
00644 cmd = cmd.left(i);
00645 break;
00646 default:
00647 continue;
00648 }
00649 break;
00650 }
00651
00652
00653 if (write)
00654 {
00655 config->writePathEntry(TEMP, cmd);
00656 cmd = config->readEntry(TEMP);
00657 }
00658 else
00659 {
00660 config->writeEntry(TEMP, cmd);
00661 cmd = config->readPathEntry(TEMP);
00662 }
00663 config->deleteEntry(TEMP);
00664 if (quoted)
00665 return quote + cmd + params;
00666 else
00667 return cmd + params;
00668 }