Got something working
[qtmeetings] / src / UserInterface / WindowManager.h
index f1f72b5..2f46050 100644 (file)
@@ -1,28 +1,24 @@
 #ifndef WINDOWMANAGER_H_\r
 #define WINDOWMANAGER_H_\r
 \r
-#include <QObject>\r
-#include <QTime>\r
-#include "Room.h"\r
-#include "Meeting.h"\r
-#include "PasswordDialog.h"\r
-#include "DeviceManager.h"\r
+#include <QWidget>\r
+#include <QStack>\r
 \r
-class QTimer;\r
-class RoomStatusIndicatorWidget;\r
-class WeeklyViewWidget;\r
-class Engine;\r
-class MeetingInfoDialog;\r
-class SettingsView;\r
+// Forward declarations\r
+class ViewBase;\r
+class QEvent;\r
+class QSize;\r
+class QDialog;\r
+class QString;\r
 \r
-//! UserInterface class. Behaves as a proxy between the user interface and application's business logic.\r
+//! UserInterface class. Manages displayed views.\r
 /*!\r
- * UserInterface class. Controls the whole user interface, starting with displaying the appropriate\r
- * views. It behaves as a proxy between the user interface and application's business logic, it connects\r
- * the specified components together and forwards the data to the correct place. It also manages the correct\r
- * appearance of current views on the screen.\r
+ * UserInterface class. WindowManager class is responsible for displaying views that inherit the\r
+ * ViewBase class. It also handles dialog showing. Depending on the views type the WindowManager\r
+ * can track the views events and restore previous view if the current on is ObservedView. This\r
+ * is a handy mechanism for screensaver etc.\r
  */\r
-class WindowManager : public QObject\r
+class WindowManager : public QWidget\r
 {\r
        Q_OBJECT\r
 \r
@@ -31,9 +27,11 @@ public:
        /*!\r
         * Constructor of WindowManager.\r
         */\r
-       WindowManager();\r
+       WindowManager( QWidget *aParent = 0 );\r
        //! Destructor.\r
        virtual ~WindowManager();\r
+       \r
+       virtual bool event(QEvent *event);\r
 \r
 signals:\r
        //! Request current status of the room.\r
@@ -41,84 +39,68 @@ signals:
         * Signal is emitted when there is need to check current status of room aRoom.\r
         * \param aRoom Meetingroom which status is requested.\r
         */\r
-       void roomStatusInfoNeeded( Room *aRoom );\r
-\r
-private slots:\r
-       //! Closes the application.\r
-       void closeApplication();\r
-       //! Updates the time.\r
-       /*!\r
-        * Forwards the signal of changed time to current view.\r
-        * \param aCurrentDateTime Current date and time.\r
-        */\r
-       void distributeDateTimeInfo( QDateTime aCurrentDateTime );\r
-       //! Updates the rooms status.\r
-       /*!\r
-        * Forwards the signal of changed status to current view.\r
-        * \param aRoom Room which status is changed.\r
-        * \param aStatus Current status of room.\r
-        * \param aTime Time when status is changed.\r
-        */\r
-       void roomStatusChanged( Room *aRoom, Room::Status aStatus, QTime aTime );\r
-       //! Displays the weekly view\r
-       void showWeeklyView();\r
-       //! Displays the screensaver (room status view)\r
-       void showRoomStatus();\r
-       //! Displays the settings view\r
-       void showSettingsView();\r
+       void eventDetected();\r
+       \r
+       //! The view size is changed.\r
        /*!\r
-        * Displays the meeting info dialog\r
-        * \param aMeeting Meeting to be displayd\r
+        * This signal is emitted when the window managers view changes,\r
+        * i.e. it received resized QEvent.\r
+        * \param The new view size.\r
         */\r
-       void showMeetingInfo( Meeting *aMeeting );\r
+       void viewResized(const QSize &newSize, const QSize &oldSize);\r
+       \r
+       //! Previous view is restored.\r
        /*!\r
-        * Displays an error message\r
-        * \param aErrorMessage Message to be displayd\r
+        * This signal is emitted when previously stored view is\r
+        * restored. This happens when view with type ViewMode::ObservedView\r
+        * is shown and it receives an event that initiates the view\r
+        * restoring chain.\r
         */\r
-       void error( const QString &aErrorMessage );\r
-       //! Restarts the timer to launch the screensaver.\r
-       void observedEventDetected();\r
-       //! Slot for fetching meetings.\r
-       /*!\r
-        * Slot. Fetches meetings for room aRoom for currently visible week\r
-        * \param aRoom\r
-        */\r
-       void fetchMeetings( Room *aRoom );\r
-       //! Slot for fetching meetings.\r
+       void previousViewRestored();\r
+       \r
+       void dialogActivated();\r
+       void dialogDeactivated();\r
+\r
+public slots:\r
+       //! Shows the view.\r
        /*!\r
-        * Slot. Fetches meetings for current room from date aFrom to week ahead.\r
-        * \param aFrom Date where to begin fetching\r
+        * Show view that inherits ViewBase class. If the views parent is not\r
+        * the WindowManager it will changed within this method. Depeding on the\r
+        * views type the currently active view might be stored and restored\r
+        * when specific event occurs in the view to be displayed.\r
         */\r
-       void fetchMeetings( QDate aFrom );\r
-       //! Slot for popping up the confirmation dialog to change the current operation mode\r
+       void showView( ViewBase *view );\r
+       \r
+       //! Shows modal dialog.\r
        /*!\r
-        * Slot. Asks PopUpMessageBox to pop up a confirmation dialog.\r
-        * \param aMode The operation mode to be changed to\r
+        * Shows modal dialog. Emits dialogActivated() signal prior calling\r
+        * QDialog's exec() method and emits dialogDeactivated signal when\r
+        * the exec() method returns.\r
         */\r
-       void changeModeOrdered( DeviceManager::OperationMode aMode );\r
-       //! Slot for receiving the status of the entered password\r
+       void showDialog( QDialog *aDialog, bool blocking = true, bool aSendSignal = true );\r
+       \r
+       //! View event is detected.\r
        /*!\r
-        * Slot. Receives the status of the entered password and makes the DeviceManager to change the\r
-        * operation mode if the password is correct.\r
-        * \param aPasswordStatus The status of the password.\r
+        * WindowManager connects this slot to ViewBase classes eventDetected()\r
+        * signal and either emits eventDetected() signal if the current views\r
+        * type is ViewMode::NormalView or restores possible previous view\r
+        * if the current views type is ViewMode::ObservedView.\r
         */\r
-       void passwordEntered( PasswordDialog::PasswordStatus aPasswordStatus );\r
+       void viewEventDetected();\r
+       \r
+       void setFullscreen();\r
+       \r
+       void error( const QString &aErrorMessage );\r
 \r
 private:\r
        //! Name of the application.\r
        QString iApplicationName;\r
-       //! Pointer to the weekly view.\r
-       WeeklyViewWidget *iWeeklyView;\r
-       //! Pointer to the screensaver (room status view).\r
-       RoomStatusIndicatorWidget *iRoomStatusView;\r
-       //! Pointer to the meeting info dialog\r
-       MeetingInfoDialog *iMeetingInfo;\r
-       //! Pointer to the engine.\r
-       Engine *iEngine;\r
-       //! Timer to launch the screensaver widget\r
-       QTimer *iIdleTimeCounter;\r
-       //! Pointer to the settings view\r
-       SettingsView *iSettingsView;\r
+       \r
+       //! Currently active view.\r
+       ViewBase *iCurrentView;\r
+       \r
+       //! Stack of views previously displayed.\r
+       QStack<ViewBase *> iViewList;\r
 \r
 };\r
 \r