kalarm
alarmcalendar.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef ALARMCALENDAR_H
00022 #define ALARMCALENDAR_H
00023
00024 #include <QObject>
00025 #include <kurl.h>
00026 #include "alarmevent.h"
00027 #include "alarmresources.h"
00028
00029 namespace KCal {
00030 class Calendar;
00031 class CalendarLocal;
00032 }
00033 class AlarmResource;
00034 class ProgressDialog;
00035
00036
00041 class AlarmCalendar : public QObject
00042 {
00043 Q_OBJECT
00044 public:
00045 virtual ~AlarmCalendar();
00046 bool valid() const { return (mCalType == RESOURCES) || mUrl.isValid(); }
00047 KCalEvent::Status type() const { return (mCalType == RESOURCES) ? KCalEvent::EMPTY : mEventType; }
00048 bool open();
00049 int load();
00050 void loadResource(AlarmResource*, QWidget* parent);
00051 bool reload();
00052 void reloadFromCache(const QString& resourceID);
00053 bool save();
00054 void close();
00055 void startUpdate();
00056 bool endUpdate();
00057 KAEvent* earliestAlarm() const;
00058 void setAlarmPending(KAEvent*, bool pending = true);
00059 KAEvent::List atLoginAlarms() const;
00060 KCal::Event* createKCalEvent(const KAEvent* e, bool original = false, bool cancelCancelledDefer = false) const
00061 { return createKCalEvent(e, QString(), original, cancelCancelledDefer); }
00062 KCal::Event* createKCalEvent(const KAEvent*, const QString& baseID, bool original = false, bool cancelCancelledDefer = false) const;
00063 KAEvent* event(const QString& uniqueID);
00064 KCal::Event* kcalEvent(const QString& uniqueID);
00065 KAEvent* templateEvent(const QString& templateName);
00066 KAEvent::List events(KCalEvent::Status s = KCalEvent::EMPTY) { return events(0, s); }
00067 KAEvent::List events(AlarmResource*, KCalEvent::Status = KCalEvent::EMPTY);
00068 KAEvent::List events(const KDateTime& from, const KDateTime& to, KCalEvent::Status);
00069 KCal::Event::List kcalEvents(KCalEvent::Status s = KCalEvent::EMPTY) { return kcalEvents(0, s); }
00070 KCal::Event::List kcalEvents(AlarmResource*, KCalEvent::Status = KCalEvent::EMPTY);
00071 bool eventReadOnly(const QString& uniqueID) const;
00072 AlarmResource* resourceForEvent(const QString& eventID) const;
00073 bool addEvent(KAEvent*, QWidget* promptParent = 0, bool useEventID = false, AlarmResource* = 0, bool noPrompt = false, bool* cancelled = 0);
00074 bool modifyEvent(const QString& oldEventId, KAEvent* newEvent);
00075 KAEvent* updateEvent(const KAEvent&);
00076 KAEvent* updateEvent(const KAEvent*);
00077 bool deleteEvent(const QString& eventID, bool save = false);
00078 void emitEmptyStatus();
00079 void purgeEvents(const KAEvent::List&);
00080 bool isOpen() const { return mOpen; }
00081 bool isEmpty() const;
00082 QString path() const { return (mCalType == RESOURCES) ? QString() : mUrl.prettyUrl(); }
00083 QString urlString() const { return (mCalType == RESOURCES) ? QString() : mUrl.url(); }
00084
00085 static QString icalProductId();
00086 static bool initialiseCalendars();
00087 static void terminateCalendars();
00088 static AlarmCalendar* resources() { return mResourcesCalendar; }
00089 static AlarmCalendar* displayCalendar() { return mDisplayCalendar; }
00090 static AlarmCalendar* displayCalendarOpen();
00091 static bool importAlarms(QWidget*, AlarmResource* = 0);
00092 static KAEvent* getEvent(const QString& uniqueID);
00093 static const KCal::Event* getKCalEvent(const QString& uniqueID);
00094
00095 signals:
00096 void earliestAlarmChanged();
00097 void calendarSaved(AlarmCalendar*);
00098 void emptyStatus(bool empty);
00099
00100 private slots:
00101 void slotCacheDownloaded(AlarmResource*);
00102 void slotResourceLoaded(AlarmResource*, bool success);
00103 void slotResourceChange(AlarmResource*, AlarmResources::Change);
00104
00105 private:
00106 enum CalType { RESOURCES, LOCAL_ICAL, LOCAL_VCAL };
00107 typedef QMap<AlarmResource*, KAEvent::List> ResourceMap;
00108 typedef QMap<QString, KAEvent*> KAEventMap;
00109 typedef QMap<AlarmResource*, KAEvent*> EarliestMap;
00110
00111 AlarmCalendar();
00112 AlarmCalendar(const QString& file, KCalEvent::Status);
00113 bool saveCal(const QString& newFile = QString());
00114 bool addEvent(AlarmResource*, KAEvent*);
00115 KAEvent* addEvent(AlarmResource*, const KCal::Event*);
00116 void addNewEvent(AlarmResource*, KAEvent*);
00117 KCalEvent::Status deleteEventInternal(const QString& eventID);
00118 void updateKAEvents(AlarmResource*, KCal::CalendarLocal*);
00119 static void updateResourceKAEvents(AlarmResource*, KCal::CalendarLocal*);
00120 void removeKAEvents(AlarmResource*, bool closing = false);
00121 void findEarliestAlarm(AlarmResource*);
00122
00123 static AlarmCalendar* mResourcesCalendar;
00124 static AlarmCalendar* mDisplayCalendar;
00125
00126 KCal::Calendar* mCalendar;
00127 ResourceMap mResourceMap;
00128 KAEventMap mEventMap;
00129 EarliestMap mEarliestAlarm;
00130 QList<QString> mPendingAlarms;
00131 KUrl mUrl;
00132 KUrl mICalUrl;
00133 typedef QMap<AlarmResource*, ProgressDialog*> ProgressDlgMap;
00134 typedef QMap<AlarmResource*, QWidget*> ResourceWidgetMap;
00135 ProgressDlgMap mProgressDlgs;
00136 ResourceWidgetMap mProgressParents;
00137 QString mLocalFile;
00138 CalType mCalType;
00139 KCalEvent::Status mEventType;
00140 bool mOpen;
00141 int mUpdateCount;
00142 bool mUpdateSave;
00143
00144 using QObject::event;
00145 };
00146
00147 #endif // ALARMCALENDAR_H