ViewBase added and major changes to use the new architecture
[qtmeetings] / src / UserInterface / WindowManager.cpp
1 #include "WindowManager.h"
2
3 #include <QEvent>
4 #include <QDialog>
5 #include "ViewBase.h"
6
7 #include <QtDebug>
8
9 const int IDLE_TIME_MULTIPLIER = 60000; // Multiplies milliseconds to minutes
10
11 WindowManager::WindowManager( QWidget *aParent ) :
12                 QWidget( aParent ),
13                 iApplicationName( tr( "Qt Meetings" ) ),
14                 iCurrentView( 0 )
15 {
16         this->setWindowTitle( iApplicationName );
17 }
18
19 WindowManager::~WindowManager()
20 {
21         
22 }
23
24 void WindowManager::showView( ViewBase *view )
25 {
26         // The views parent must be WindowManager when it is displayed trough this
27         QWidget *parent = static_cast<QWidget *>(view->parent());
28         if ( parent != this )
29         {
30                 view->setParent( this );
31         }
32         
33         // Store the current view because it is hidden after the new view is shown
34         QWidget *oldView = iCurrentView;
35         
36         // If the new view is observed view we store the current into stack
37         // from which it is restored when the new view receives event we are
38         // listening to.
39         if ( view->viewMode() == ViewBase::ObservedView )
40         {
41                 iViewList.push( iCurrentView );
42         }
43         
44         // Make the new view visible and handle connections
45         iCurrentView = view;
46         connect( iCurrentView, SIGNAL( eventDetected() ), this, SLOT( viewEventDetected() ) );
47         connect( this, SIGNAL( viewResized(const QSize &) ), iCurrentView, SLOT( viewResized( const QSize & ) ) );
48         view->resize( this->size() );
49         
50         view->show();
51         
52         // Disconnect old connections and hide the view
53         if ( oldView != 0 )
54         {
55                 disconnect( oldView, SIGNAL( eventDetected() ), this, SLOT( viewEventDetected() ) );
56                 disconnect( this, SIGNAL( viewResized(const QSize &) ), oldView, SLOT( viewResized(const QSize &) ) );
57                 oldView->hide();
58         }
59         
60 }
61
62 void WindowManager::showDialog(QDialog *dialog)
63 {
64         // Handle dialog displaying
65         emit dialogActivated();
66         dialog->exec();
67         emit dialogDeactivated();
68 }
69
70 void WindowManager::viewEventDetected()
71 {
72         
73         if ( iCurrentView != 0 )
74         {
75                 if ( iCurrentView->viewMode() == ViewBase::NormalView )
76                 {
77                         emit eventDetected();
78                 }
79                 else if ( iCurrentView->viewMode() == ViewBase::ObservedView )
80                 {
81                         if ( !iViewList.isEmpty() )
82                         {
83                                 ViewBase *previousView = static_cast<ViewBase *>( iViewList.pop() );
84                                 this->showView( previousView );
85                                 emit previousViewRestored();
86                         }
87                 }
88         }
89
90 }
91
92 bool WindowManager::event(QEvent *event)
93 {
94         if ( event->type() == QEvent::Resize )
95         {
96                 if ( iCurrentView != 0 )
97                 {
98                         iCurrentView->setFixedSize( this->size() );
99                         emit viewResized( this->size() );
100                 }
101         }
102         
103         return QWidget::event( event );
104 }
105
106 void WindowManager::setFullscreen()
107 {
108         this->setWindowState( Qt::WindowFullScreen );
109         // Resize event handles the rest.
110 }