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 void meetingDetailsFetched( Meeting *aDetailedMeeting );
47 //! Slot. Closes the application.
49 * Slot. Closes the application.
51 void closeApplication();
52 //! Slot. Checks actual availability information of the specified room.
54 * Slot. Checks actual availability information of the specified room.
55 * \param aRoom The room which availability information is needed.
57 void roomStatusInfoNeeded( Room *aRoom );
58 //! Slot. Asks the communication to fetch new meeting data.
60 * Slot. Asks the communication to fetch new meeting data.
61 * \param aCurrentRoom The current room.
63 void shownWeekChanged( QDate aDate );
64 //! Slot. Handles errors.
66 * Slot. Handles errors and informs the UI by emitting the error() signal with the message in
68 * \param aCode The error code.
69 * \param aAddInfo Possible addition info.
71 void errorHandler( int aCode, const QString &aAddInfo = "" );
72 //! Slot. Fetches meetings from the server.
74 * Slot. Fetches meetings from the server. Parameters are hard coded: the meetings of the default
75 * room from current and +/- 2 weeks are fetched.
78 //! Slot. Saves fetched meetings to the current instance's local storage.
80 * Slot. Saves fetched meetings to the current instance's local storage. Meetings are soted in a
81 * private QList, it is iterated through and signals are emitted if there is any new, updated or
83 * \param aMeetings The list of freshly fetched meetings.
85 void meetingsFetched( const QList<Meeting*>& );
86 //! Slot. Checks the availability of all the rooms.
88 * Slot. Checks the availability of all the rooms by iterating through the current object's local
89 * room storage and calling the roomStatusInfoNeeded() separately on each of them.
91 void checkStatusOfAllRooms();
92 //! Slot. Fetches meeting details from the server.
94 * Slot. Fetches meeting details from the server.
95 * \param aMeeting The meeting.
97 void fetchMeetingDetails( Meeting *aMeeting );
98 //! Slot for receiving the status of the entered password
100 * Slot. Receives the status of the entered password and makes the DeviceManager to change the
101 * operation mode if the password is correct.
102 * \param aPasswordStatus The status of the password.
104 void passwordEntered( PasswordDialog::PasswordStatus aPasswordStatus );
105 //! Slot for receiving the cancel event of the progress bar.
107 * Slot. Receives the cancel event of the progress bar.
109 void progressBarCancelled();
110 //! Slot for receiving the cancel event of the progress bar.
112 * Receives the cancel event of the progress bar when meeting details requested.
114 void fetchMeetingDetailsCancelled();
116 void handleViewEvent();
117 void previousViewRestored();
119 //! Slot for dialog activation signal.
121 * This slot is used to inform that dialog is activated. It stops
122 * the idle time counter so screensaver is not activated while the
123 * dialog is displayed.
125 void dialogActivated();
126 //! Slot for dialog deactivation signal.
128 * This slot is used to inform that dialog is deactivated. It restarts
129 * the idle time counter so that the screensaver is being activated again
132 void dialogDeactivated();
134 void stopIdleTimeCounter();
135 void startIdleTimeCounter();
138 // Make the UIManager as friendly class so it can connect to private slots.
139 friend class UIManager;
141 //! Provides the index of the Meeting instance which is at the specified time.
143 * Provides the index of the Meeting instance which is at the specified time. If there are
144 * overlapping meetings then returns one of then undetetministically.
145 * \param aRoom The room which meetings are looked through.
146 * \param aAt Date and time when the meeting is already going.
147 * \return Index of the meeting if found; otherwise, -1.
149 int indexOfMeetingAt( Room *aRoom, QDateTime aAt );
150 //! Provides the index of the Meeting instance which is starts the closest to the specified time.
152 * Provides the index of the Meeting instance which is starts the closest to the specified time.
153 * If there are overlapping meetings then returns one of then undetetministically.
154 * \param aRoom The room which meetings are looked through.
155 * \param aAt Date and time when the meeting is not yet started.
156 * \return Index of the meeting if found; otherwise, -1.
158 int indexOfMeetingAfter( Room *aRoom, QDateTime aAfter );
159 //! Indicates if the QList contains the Meeting or not.
161 * Indicates if the QList contains the Meeting or not.
162 * \param aList List of meetings.
163 * \param aMeeting The meeting which is seeked in the list for.
164 * \return True if contains; otherwise, false.
166 static bool isMeetingInList( const QList<Meeting*> &aList, const Meeting *aMeeting );
167 //! Slot. Fetches meetings from the server.
169 * Slot. Fetches meetings from the server, exact parameters are specified in the parameter list.
170 * \param aFrom Time from when the meetings need to be fetched.
171 * \param aUntil Time until when the meetings need to be fetched.
172 * \param aIn The room which meetings need to be fetched.
174 void fetchMeetings( const QDateTime &aFrom, const QDateTime &aUntil, const Room *aIn );
175 //! Initialize configuration package.
177 * This method initializes configuration classes and
178 * connects signals from and to the engine.
180 void initConfiguration();
181 //! Initialize device package.
183 * This method initializes device manager and
184 * connects signals from and to the engine.
187 //! Initialize communication package.
189 * This method initializes the communication manager and
190 * connects signals from and to the engine.
192 void initCommunication();
193 //! Initialize user interface package.
195 * This method initializes the user interface and
196 * connects signals from and to the engine. This method
197 * makes the window manager visible and shows weekly
198 * view as the first view.
200 void initUserInterface();
201 //! Connects signal between objects.
203 * Signals that could not be connected while initializing different
204 * packages are connected here.
206 void connectSignals();
209 static QTime endOfTheDay;
211 WindowManager *iWindowManager;
213 QTimer *iIdleTimeCounter;
215 Configuration *iConfiguration;
216 CommunicationManager *iCommunication;
217 DeviceManager *iDevice;
218 UIManager *iUIManager;
220 QTimer *iAutoRefresh;
222 QList<Meeting*> iMeetings;