/* * daemon.h - interface with alarm daemon * Program: kalarm * Copyright © 2001-2007 by David Jarvie * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef DAEMON_H #define DAEMON_H #include #include #include #include #include class TDEActionCollection; class AlarmCalendar; class AlarmEnableAction; class NotificationHandler; class Daemon : public TQObject { Q_OBJECT public: static void initialise(); static void createDcopHandler(); static bool isDcopHandlerReady() { return mDcopHandler; } static AlarmEnableAction* createAlarmEnableAction(TDEActionCollection*, const char* name); static bool start(); static bool reregister() { return registerWith(true); } static bool reset(); static bool stop(); static bool autoStart(); static void enableAutoStart(bool enable); static void notifyTimeChanged(); static void setAlarmsEnabled() { mInstance->setAlarmsEnabled(true); } static void checkStatus() { checkIfRunning(); } static bool monitoringAlarms(); static bool isRunning(bool startDaemon = true); static int maxTimeSinceCheck(); static bool isRegistered() { return mStatus == REGISTERED; } static void allowRegisterFailMsg() { mRegisterFailMsg = false; } static void queueEvent(const TQString& eventID); static void savingEvent(const TQString& eventID); static void eventHandled(const TQString& eventID, bool reloadCal); signals: void daemonRunning(bool running); private slots: void slotCalendarSaved(AlarmCalendar*); void checkIfStarted(); void slotStarted() { updateRegisteredStatus(true); } void registerTimerExpired() { registrationResult((mStatus == REGISTERED), KAlarmd::FAILURE); } void setAlarmsEnabled(bool enable); void timerCheckIfRunning(); void slotPreferencesChanged(); private: enum Status // daemon status. KEEP IN THIS ORDER!! { STOPPED, // daemon is not registered with DCOP RUNNING, // daemon is newly registered with DCOP READY, // daemon is ready to accept DCOP calls REGISTERED // we have registered with the daemon }; Daemon() { } static bool registerWith(bool reregister); static void registrationResult(bool reregister, int result, int version = 0); static void reload(); static void notifyEventHandled(const TQString& eventID, bool reloadCal); static void updateRegisteredStatus(bool timeout = false); static void enableCalendar(bool enable); static void calendarIsEnabled(bool enabled); static bool checkIfRunning(); static void setFastCheck(); static Daemon* mInstance; // only one instance allowed static NotificationHandler* mDcopHandler; // handles DCOP requests from daemon static TQValueList mQueuedEvents; // IDs of pending events that daemon has triggered static TQValueList mSavingEvents; // IDs of updated events that are currently being saved static TQTimer* mStartTimer; // timer to check daemon status after starting daemon static TQTimer* mRegisterTimer; // timer to check whether daemon has sent registration status static TQTimer* mStatusTimer; // timer for checking daemon status static int mStatusTimerCount; // countdown for fast status checking static int mStatusTimerInterval; // timer interval (seconds) for checking daemon status static int mStartTimeout; // remaining number of times to check if alarm daemon has started static Status mStatus; // daemon status static bool mRunning; // whether the alarm daemon is currently running static bool mCalendarDisabled; // monitoring of calendar is currently disabled by daemon static bool mEnableCalPending; // waiting to tell daemon to enable calendar static bool mRegisterFailMsg; // true if registration failure message has been displayed friend class NotificationHandler; }; /*============================================================================= = Class: AlarmEnableAction =============================================================================*/ class AlarmEnableAction : public TDEToggleAction { Q_OBJECT public: AlarmEnableAction(int accel, TQObject* parent, const char* name = 0); public slots: void setCheckedActual(bool); // set state and emit switched() signal virtual void setChecked(bool); // request state change and emit userClicked() signal signals: void switched(bool); // state has changed (TDEToggleAction::toggled() is only emitted when clicked by user) void userClicked(bool); // user has clicked the control (param = desired state) private: bool mInitialised; }; #endif // DAEMON_H