kalarm/lib
synchtimer.h00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef SYNCHTIMER_H
00022 #define SYNCHTIMER_H
00023
00024
00025
00026 #include <qobject.h>
00027 #include <qvaluelist.h>
00028 #include <qcstring.h>
00029 #include <qdatetime.h>
00030 class QTimer;
00031
00037 class SynchTimer : public QObject
00038 {
00039 Q_OBJECT
00040 public:
00041 virtual ~SynchTimer();
00042
00043 struct Connection
00044 {
00045 Connection() { }
00046 Connection(QObject* r, const char* s) : receiver(r), slot(s) { }
00047 bool operator==(const Connection& c) const { return receiver == c.receiver && slot == c.slot; }
00048 QObject* receiver;
00049 const QCString slot;
00050 };
00051 protected:
00052 SynchTimer();
00053 virtual void start() = 0;
00054 void connecT(QObject* receiver, const char* member);
00055 void disconnecT(QObject* receiver, const char* member = 0);
00056 bool hasConnections() const { return !mConnections.isEmpty(); }
00057
00058 QTimer* mTimer;
00059
00060 protected slots:
00061 virtual void slotTimer() = 0;
00062
00063 private slots:
00064 void slotReceiverGone(QObject* r) { disconnecT(r); }
00065
00066 private:
00067 SynchTimer(const SynchTimer&);
00068 QValueList<Connection> mConnections;
00069 };
00070
00071
00076 class MinuteTimer : public SynchTimer
00077 {
00078 Q_OBJECT
00079 public:
00080 virtual ~MinuteTimer() { mInstance = 0; }
00085 static void connect(QObject* receiver, const char* member)
00086 { instance()->connecT(receiver, member); }
00092 static void disconnect(QObject* receiver, const char* member = 0)
00093 { if (mInstance) mInstance->disconnecT(receiver, member); }
00094
00095 protected:
00096 MinuteTimer() : SynchTimer() { }
00097 static MinuteTimer* instance();
00098 virtual void start() { slotTimer(); }
00099
00100 protected slots:
00101 virtual void slotTimer();
00102
00103 private:
00104 static MinuteTimer* mInstance;
00105 };
00106
00107
00115 class DailyTimer : public SynchTimer
00116 {
00117 Q_OBJECT
00118 public:
00119 virtual ~DailyTimer();
00126 static void connect(const QTime& timeOfDay, QObject* receiver, const char* member)
00127 { fixedInstance(timeOfDay)->connecT(receiver, member); }
00135 static void disconnect(const QTime& timeOfDay, QObject* receiver, const char* member = 0);
00142 void changeTime(const QTime& newTimeOfDay, bool triggerMissed = true);
00144 QTime timeOfDay() const { return mTime; }
00145
00146 protected:
00152 DailyTimer(const QTime&, bool fixed);
00160 static DailyTimer* fixedInstance(const QTime& timeOfDay, bool create = true);
00161 virtual void start();
00162
00163 protected slots:
00164 virtual void slotTimer();
00165
00166 private:
00167 static QValueList<DailyTimer*> mFixedTimers;
00168 QTime mTime;
00169 QDate mLastDate;
00170 bool mFixed;
00171 };
00172
00173
00178 class MidnightTimer
00179 {
00180 public:
00185 static void connect(QObject* receiver, const char* member)
00186 { DailyTimer::connect(QTime(0,0), receiver, member); }
00192 static void disconnect(QObject* receiver, const char* member = 0)
00193 { DailyTimer::disconnect(QTime(0,0), receiver, member); }
00194
00195 };
00196
00197 #endif // SYNCHTIMER_H
00198
|