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