7 #include "WindowManager.h"
8 #include "DeviceManager.h"
9 #include "PasswordDialog.h"
14 class CommunicationManager;
18 //! BusinessLogic class. Contains all the business logic of the application.
20 * BusinessLogic class. Contains all the business logic of the application. It is responsible
21 * for connecting user interface to lower application layers (IO).
23 class Engine : public QObject
30 * Constructor to initialize an Engine instance.
35 //! Gets default room of the application.
37 * Gets default room of the application.
38 * \return Pointer to the default Room instance.
44 QString errorMessage();
48 void roomStatusChanged( Room::Status aStatus, QTime aUntil );
51 //! Slot. Closes the application.
53 * Slot. Closes the application.
55 void closeApplication();
56 //! Slot. Checks actual availability information of the specified room.
58 * Slot. Checks actual availability information of the specified room.
59 * \param aRoom The room which availability information is needed.
61 void roomStatusInfoNeeded( Room *aRoom );
62 //! Slot. Asks the communication to fetch new meeting data.
64 * Slot. Asks the communication to fetch new meeting data.
65 * \param aCurrentRoom The current room.
67 void shownWeekChanged( QDate aDate );
68 //! Slot. Handles errors.
70 * Slot. Handles errors and informs the UI by emitting the error() signal with the message in
72 * \param aCode The error code.
73 * \param aAddInfo Possible addition info.
75 void errorHandler( int aCode, const QString &aAddInfo = "" );
76 //! Slot. Saves fetched meetings to the current instance's local storage.
78 * Slot. Saves fetched meetings to the current instance's local storage. Meetings are soted in a
79 * private QList, it is iterated through and signals are emitted if there is any new, updated or
81 * \param aMeetings The list of freshly fetched meetings.
83 void meetingsFetched( const QList<Meeting*>& );
84 //! Slot. Checks the availability of all the rooms.
86 * Slot. Checks the availability of all the rooms by iterating through the current object's local
87 * room storage and calling the roomStatusInfoNeeded() separately on each of them.
89 void checkStatusOfAllRooms();
90 //! Slot for receiving the failure event of operation mode changing.
92 * Slot. Receives the failure event of operation mode changing.
94 void changeModeFailed();
95 //! Slot for receiving the cancel event of the progress bar.
97 * Receives the cancel event of the progress bar when meeting details requested.
99 void fetchMeetingDetails( Meeting *aMeeting );
100 void cancelFetchMeetingDetails();
102 void handleViewEvent();
103 void previousViewRestored();
105 //! Slot for dialog activation signal.
107 * This slot is used to inform that dialog is activated. It stops
108 * the idle time counter so screensaver is not activated while the
109 * dialog is displayed.
111 void dialogActivated();
112 //! Slot for dialog deactivation signal.
114 * This slot is used to inform that dialog is deactivated. It restarts
115 * the idle time counter so that the screensaver is being activated again
118 void dialogDeactivated();
120 void stopIdleTimeCounter();
121 void startIdleTimeCounter();
123 void changeDeviceMode();
125 void currentRoomChanged( Room *aRoom );
127 void tick( QDateTime aCurrentDateTime );
130 * Updates the current rooms info.
132 void updateRoomInfo();
136 void configurationChanged();
139 // Make the UIManager as friendly class so it can connect to private slots.
140 friend class UIManager;
142 //! Provides the index of the Meeting instance which is at the specified time.
144 * Provides the index of the Meeting instance which is at the specified time. If there are
145 * overlapping meetings then returns one of then undetetministically.
146 * \param aRoom The room which meetings are looked through.
147 * \param aAt Date and time when the meeting is already going.
148 * \return Index of the meeting if found; otherwise, -1.
150 int indexOfMeetingAt( Room *aRoom, QDateTime aAt );
151 //! Provides the index of the Meeting instance which is starts the closest to the specified time.
153 * Provides the index of the Meeting instance which is starts the closest to the specified time.
154 * If there are overlapping meetings then returns one of then undetetministically.
155 * \param aRoom The room which meetings are looked through.
156 * \param aAt Date and time when the meeting is not yet started.
157 * \return Index of the meeting if found; otherwise, -1.
159 int indexOfMeetingAfter( Room *aRoom, QDateTime aAfter );
160 //! Slot. Fetches meetings from the server.
162 * Slot. Fetches meetings from the server, exact parameters are specified in the parameter list.
163 * \param aWeek Week for which the meetings need to be fetched.
164 * \param aYear Year for which the meetings need to be fetched.
165 * \param aIn The room which meetings need to be fetched.
167 void fetchMeetings( const int aWeek, const int aYear, const Room *aIn );
168 //! Initialize configuration package.
170 * This method initializes configuration classes and
171 * connects signals from and to the engine.
173 void initConfiguration();
174 //! Initialize device package.
176 * This method initializes device manager and
177 * connects signals from and to the engine.
180 //! Initialize communication package.
182 * This method initializes the communication manager and
183 * connects signals from and to the engine.
185 void initCommunication();
186 //! Initialize user interface package.
188 * This method initializes the user interface and
189 * connects signals from and to the engine. This method
190 * makes the window manager visible and shows weekly
191 * view as the first view.
193 void initUserInterface();
194 //! Connects signal between objects.
196 * Signals that could not be connected while initializing different
197 * packages are connected here.
199 void connectSignals();
201 bool isMeetingInList(const QList<Meeting*> &aList, const Meeting *aMeeting);
204 static QTime endOfTheDay;
206 QTimer *iIdleTimeCounter;
209 Configuration *iConfiguration;
210 CommunicationManager *iCommunication;
211 WindowManager *iWindowManager;
212 DeviceManager *iDevice;
213 UIManager *iUIManager;
215 QTimer *iAutoRefresh;
217 QList<Meeting*> iMeetings;
220 bool iCommunicationFailed;
221 QString iCommunicationError;
222 QTime iLastCommunication;