Corrected the password dialog and progress bar related errors. Texts and titles of...
[qtmeetings] / src / BusinessLogic / UIManager.cpp
1 #include "UIManager.h"
2
3 #include <QDateTime>
4 #include <QTime>
5
6 #include "Engine.h"
7 #include "WindowManager.h"
8 #include "ViewBase.h"
9 #include "WeeklyViewWidget.h"
10 #include "SettingsView.h"
11 #include "RoomStatusIndicatorWidget.h"
12 #include "MeetingInfoDialog.h"
13 #include "ProgressBar.h"
14 #include "CommunicationManager.h"
15 #include "Configuration.h"
16 #include "DisplaySettings.h"
17
18 #include <QtDebug>
19
20 #define QT_DELETE(X) \
21         if ( X != 0 ) \
22         { \
23                 delete X; \
24                 X = 0; \
25         }
26
27 UIManager::UIManager( Engine *aEngine, WindowManager *aWindowManager ) :
28         iEngine( aEngine ),
29         iWindowManager( aWindowManager ),
30         iWeeklyView( 0 ),
31         iSettingsView( 0 ),
32         iRoomStatusIndicator( 0 ),
33         iPasswordDialog( 0 ),
34         iProgressBar( 0 ),
35         iMeetingInfo( 0 )
36 {
37         if ( iEngine == 0 ) return;
38         if ( iWindowManager == 0 ) return;
39         
40         qDebug() << "[UIManager::ctor] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>";
41         
42         createWeeklyView();
43         createSettingsView();
44         createRoomStatusIndicator();
45         createPasswordDialog();
46         createProgressBar();
47         createMeetingInfoDialog();
48         
49         qDebug() << "[UIManager::ctor] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>";
50 }
51
52 UIManager::~UIManager()
53 {
54         iEngine = 0;
55         iWindowManager = 0;
56         
57         QT_DELETE( iMeetingInfo );
58         QT_DELETE( iProgressBar );
59         QT_DELETE( iPasswordDialog );
60         QT_DELETE( iRoomStatusIndicator );
61         QT_DELETE( iSettingsView );
62         QT_DELETE( iWeeklyView );
63 }
64
65 void UIManager::showMainView()
66 {
67         iWindowManager->showView( iWeeklyView );
68 }
69
70 // ===============================================
71 //              INITIALIZE THE UIMANAGER
72 void UIManager::createWeeklyView()
73 {
74         iWeeklyView = new WeeklyViewWidget( QDateTime::currentDateTime(), iEngine->iConfiguration );
75         
76         // Connect signals to UIManager
77         connect( iWeeklyView, SIGNAL( settingsButtonClicked() ), this, SLOT( settingsViewRequest() ) );
78         connect( iWeeklyView, SIGNAL( currentRoomChanged( Room * ) ), this, SLOT( currentRoomChanged( Room * ) ) );
79         connect( iWeeklyView, SIGNAL( meetingActivated( Meeting * ) ), this, SLOT( showMeetingProgressBar( Meeting * ) ) );
80         // Connect signals to engine
81         connect( iWeeklyView, SIGNAL( meetingActivated( Meeting * ) ), iEngine, SLOT( fetchMeetingDetails( Meeting * ) ) );
82         connect( iWeeklyView, SIGNAL( shownWeekChanged( QDate ) ), iEngine, SLOT( shownWeekChanged( QDate ) ) );
83         connect( iWeeklyView, SIGNAL( currentRoomChanged( Room * ) ), iEngine, SLOT( currentRoomChanged( Room * ) ) );
84 }
85
86 void UIManager::createSettingsView()
87 {
88         iSettingsView = new SettingsView;
89         
90         // Connect signals
91         connect( iSettingsView, SIGNAL( okClicked() ), this, SLOT( settingsOkClicked() ) );
92 }
93
94 void UIManager::createRoomStatusIndicator()
95 {
96         iRoomStatusIndicator = new RoomStatusIndicatorWidget( iEngine->defaultRoom(), Room::FreeStatus, QTime::currentTime(), iEngine->iConfiguration->displaySettings()->dateFormat() );
97 }
98
99 void UIManager::createPasswordDialog()
100 {
101         iPasswordDialog = new PasswordDialog( iEngine->iConfiguration->adminPassword(), "", tr("Enter password") );
102         connect( iPasswordDialog, SIGNAL( passwordEntered( PasswordDialog::PasswordStatus ) ), this, SLOT( passwordEntered( PasswordDialog::PasswordStatus ) ) );
103 }
104
105 void UIManager::createProgressBar()
106 {
107         iProgressBar = new ProgressBar( tr("CHANGE THIS"), true );
108         
109         // Connect to UIManager
110         connect( iProgressBar, SIGNAL( cancel() ), this, SLOT( progressBarCancelled() ) );
111         // Connect to Engine
112         connect( iProgressBar, SIGNAL( cancel() ), iEngine, SLOT( cancelFetchMeetingDetails() ) );
113 }
114
115 void UIManager::createMeetingInfoDialog()
116 {
117         iMeetingInfo = new MeetingInfoDialog();
118 }
119
120 void UIManager::connectDeviceManager( DeviceManager *aDeviceManager )
121 {
122         connect( aDeviceManager, SIGNAL( changeModeOrdered( DeviceManager::OperationMode ) ),
123                         this, SLOT( changeModeOrdered( DeviceManager::OperationMode ) ) );
124         
125         connect( aDeviceManager, SIGNAL( changingMode( const QString & ) ), this, SLOT( updateProgressBarText( const QString & ) ) );
126         connect( aDeviceManager, SIGNAL( changeModeFailed() ), this, SLOT( hideProgressBar() ) );
127 }
128
129 void UIManager::connectCommunicationManager( CommunicationManager *aCommunicationManager )
130 {
131         connect( aCommunicationManager, SIGNAL( meetingDetailsFetched( Meeting & ) ), this, SLOT( meetingDetailsFetched( Meeting & ) ) );
132         connect( aCommunicationManager, SIGNAL( meetingsFetched( const QList<Meeting *> & ) ), this, SLOT( meetingsFetched( const QList<Meeting *> & ) ) );
133 }
134
135 // ============================================
136 //              UIMANAGER SLOTS
137 void UIManager::settingsViewRequest()
138 {
139         // Show the settings view and stop the idle timer
140         if ( iSettingsView != 0 )
141         {
142                 iWindowManager->showView( static_cast<ViewBase *>( iSettingsView ) );
143                 iEngine->stopIdleTimeCounter();
144         }
145 }
146
147 void UIManager::settingsOkClicked()
148 {
149         // Show the weekly view and restart the idle timer
150         if ( iWeeklyView != 0 )
151         {
152                 iWindowManager->showView( static_cast<ViewBase *>( iWeeklyView ) );
153                 iEngine->startIdleTimeCounter();
154         }
155 }
156
157 void UIManager::meetingsFetched( const QList<Meeting*> &aMeetings )
158 {
159         qDebug() << "[UIManager::meetingsFetched] <Change the weekly views method to slot so we don't need this>";
160         if ( iWeeklyView != 0 )
161         {
162                 iWeeklyView->refreshMeetings( aMeetings );
163         }
164 }
165
166 void UIManager::showMeetingProgressBar( Meeting *aMeeting )
167 {
168         if ( iProgressBar != 0 )
169         {
170                 iProgressBar->update( tr( "Fetching meeting info..." ), tr( "Please wait" ) );
171                 iProgressBar->toggleCancellable( true );
172                 iWindowManager->showDialog( static_cast<QDialog *>( iProgressBar ), false, false );
173                 iEngine->stopIdleTimeCounter();
174         }
175 }
176
177 void UIManager::meetingDetailsFetched(Meeting &aDetailedMeeting)
178 {
179         qDebug() << "[UIManager::meetingDetailsFetched] <Invoked>";
180         if ( iMeetingInfo != 0 )
181         {
182                 if ( iProgressBar != 0 && iProgressBar->isVisible() )
183                 {
184                         iProgressBar->close(); // Close it in case it's visible
185                 }
186                 MeetingInfoDialog *tmp = new MeetingInfoDialog( &aDetailedMeeting );
187                 iWindowManager->showDialog( static_cast<QDialog *>( tmp ) );
188 // TODO : We should use the member variable and implement correctly the setMeeting() method !!!
189 //              iMeetingInfo->setMeeting( &aDetailedMeeting );
190 //              iWindowManager->showDialog( static_cast<QDialog *>( iMeetingInfo ) );
191         }
192 }
193
194 void UIManager::roomStatusIndicatorRequested()
195 {
196         if ( iRoomStatusIndicator != 0 )
197         {
198                 iWindowManager->showView( static_cast<ViewBase *>( iRoomStatusIndicator ) );
199                 iEngine->stopIdleTimeCounter();
200         }
201 }
202
203 void UIManager::previousViewRestored()
204 {
205         iEngine->startIdleTimeCounter();
206 }
207
208 void UIManager::progressBarCancelled()
209 {
210         if ( iProgressBar != 0 )
211         {
212                 iProgressBar->close();
213                 iEngine->startIdleTimeCounter();
214         }
215 }
216
217 void UIManager::changeModeOrdered( DeviceManager::OperationMode aMode )
218 {
219         qDebug() << "[UIManager::changeModeOrdered] <Invoked>";
220
221         if ( iPasswordDialog != 0 )
222         {
223                 QString text = tr( "You are about to change operation mode to %1." )
224                                                 .arg( iEngine->iDevice->operationModeToString( aMode ) );
225                 iPasswordDialog->update( text );
226                 iWindowManager->showDialog( static_cast<QDialog *>( iPasswordDialog ) );
227         }
228 }
229
230 void UIManager::currentRoomChanged(Room *aRoom)
231 {
232         if ( iWeeklyView != 0 )
233         {
234                 QDateTime from = QDateTime( iWeeklyView->beginnigOfShownWeek() );
235                 QDateTime to = QDateTime( from.addDays( 8 ) );
236                 iEngine->fetchMeetings( from, to, aRoom );
237         }
238 }
239
240 void UIManager::updateTime(QDateTime aDateTime)
241 {
242         if ( iWeeklyView != 0 )
243         {
244                 iWeeklyView->setCurrentDateTime( aDateTime );
245         }
246 }
247
248 void UIManager::passwordEntered( PasswordDialog::PasswordStatus aStatus )
249 {
250         switch( aStatus )
251         {
252                 case PasswordDialog::Correct:
253                         // Show the progress bar..
254                         if ( iProgressBar != 0 )
255                         {
256                                 iProgressBar->update( tr( "" ), tr( "Changing operation mode" ) );
257                                 iProgressBar->toggleCancellable( false );
258                                 iWindowManager->showDialog( static_cast<QDialog *>( iProgressBar ), false );
259                         }
260                         // ... and initiate the mode changing
261                         iEngine->changeDeviceMode( true );
262                         break;
263                 case PasswordDialog::Incorrect:
264                         iWindowManager->error( tr("Incorrect Password") );
265                 case PasswordDialog::Canceled:
266                         iEngine->changeDeviceMode( false );
267                         break;
268         }
269         
270         // Close the dialog after we have handled the status
271         if ( iPasswordDialog != 0 )
272         {
273                 iPasswordDialog->close();
274         }
275 }
276
277 void UIManager::updateProgressBarText(const QString &aText)
278 {
279         if ( iProgressBar != 0 )
280         {
281                 iProgressBar->update( aText );
282         }
283 }
284
285 void UIManager::hideProgressBar()
286 {
287         qDebug() << "[UIManager::hideProgressBar] <Invoked>";
288         if ( iProgressBar != 0 && iProgressBar->isVisible() )
289         {
290                 iProgressBar->close();
291         }
292 }