7 #include "WindowManager.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"
20 #define QT_DELETE(X) \
27 UIManager::UIManager( Engine *aEngine, WindowManager *aWindowManager ) :
29 iWindowManager( aWindowManager ),
32 iRoomStatusIndicator( 0 ),
37 if ( iEngine == 0 ) return;
38 if ( iWindowManager == 0 ) return;
40 qDebug() << "[UIManager::ctor] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>";
44 createRoomStatusIndicator();
45 createPasswordDialog();
47 createMeetingInfoDialog();
49 qDebug() << "[UIManager::ctor] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>";
52 UIManager::~UIManager()
57 QT_DELETE( iMeetingInfo );
58 QT_DELETE( iProgressBar );
59 QT_DELETE( iPasswordDialog );
60 QT_DELETE( iRoomStatusIndicator );
61 QT_DELETE( iSettingsView );
62 QT_DELETE( iWeeklyView );
65 void UIManager::showMainView()
67 iWindowManager->showView( iWeeklyView );
70 void UIManager::showProgressBar( QString aText )
72 if ( iProgressBar != 0 )
74 iProgressBar->update( aText );
75 iWindowManager->showDialog( iProgressBar );
79 // ===============================================
80 // INITIALIZE THE UIMANAGER
81 void UIManager::createWeeklyView()
83 iWeeklyView = new WeeklyViewWidget( QDateTime::currentDateTime(), iEngine->iConfiguration );
85 // Connect signals to UIManager
86 connect( iWeeklyView, SIGNAL( settingsButtonClicked() ), this, SLOT( settingsViewRequest() ) );
87 connect( iWeeklyView, SIGNAL( currentRoomChanged( Room * ) ), this, SLOT( currentRoomChanged( Room * ) ) );
88 connect( iWeeklyView, SIGNAL( meetingActivated( Meeting * ) ), this, SLOT( showMeetingProgressBar( Meeting * ) ) );
89 // Connect signals to engine
90 connect( iWeeklyView, SIGNAL( meetingActivated( Meeting * ) ), iEngine, SLOT( fetchMeetingDetails( Meeting * ) ) );
91 connect( iWeeklyView, SIGNAL( shownWeekChanged( QDate ) ), iEngine, SLOT( shownWeekChanged( QDate ) ) );
92 connect( iWeeklyView, SIGNAL( currentRoomChanged( Room * ) ), iEngine, SLOT( currentRoomChanged( Room * ) ) );
95 void UIManager::createSettingsView()
97 iSettingsView = new SettingsView;
100 connect( iSettingsView, SIGNAL( okClicked() ), this, SLOT( settingsOkClicked() ) );
101 connect( iSettingsView, SIGNAL( cancelClicked() ), this, SLOT( settingsCancelClicked() ) );
104 void UIManager::createRoomStatusIndicator()
106 iRoomStatusIndicator = new RoomStatusIndicatorWidget( iEngine->defaultRoom(), Room::FreeStatus, QTime::currentTime(), iEngine->iConfiguration->displaySettings()->dateFormat() );
109 void UIManager::createPasswordDialog()
111 iPasswordDialog = new PasswordDialog( iEngine->iConfiguration->adminPassword(), tr("UIManager::createPasswordDialog"), tr("UIManager::createPasswordDialog") );
113 connect( iPasswordDialog, SIGNAL( passwordEntered( PasswordDialog::PasswordStatus ) ), this, SLOT( passwordEntered( PasswordDialog::PasswordStatus ) ) );
116 void UIManager::createProgressBar()
118 iProgressBar = new ProgressBar( tr("CHANGE THIS"), true );
120 // Connect to UIManager
121 connect( iProgressBar, SIGNAL( cancel() ), this, SLOT( progressBarCancelled() ) );
123 connect( iProgressBar, SIGNAL( cancel() ), iEngine, SLOT( cancelFetchMeetingDetails() ) );
126 void UIManager::createMeetingInfoDialog()
128 iMeetingInfo = new MeetingInfoDialog();
131 void UIManager::connectDeviceManager( DeviceManager *aDeviceManager )
133 connect( aDeviceManager, SIGNAL( changeModeOrdered( DeviceManager::OperationMode ) ),
134 this, SLOT( changeModeOrdered( DeviceManager::OperationMode ) ) );
136 connect( aDeviceManager, SIGNAL( changingMode( const QString & ) ), this, SLOT( updateProgressBarText( const QString & ) ) );
137 connect( aDeviceManager, SIGNAL( changeModeFailed() ), this, SLOT( hideProgressBar() ) );
140 void UIManager::connectCommunicationManager( CommunicationManager *aCommunicationManager )
142 connect( aCommunicationManager, SIGNAL( meetingDetailsFetched( Meeting & ) ), this, SLOT( meetingDetailsFetched( Meeting & ) ) );
143 connect( aCommunicationManager, SIGNAL( meetingsFetched( const QList<Meeting *> & ) ), this, SLOT( meetingsFetched( const QList<Meeting *> & ) ) );
146 // ============================================
148 void UIManager::settingsViewRequest()
150 // Show the settings view and stop the idle timer
151 if ( iSettingsView != 0 )
153 iWindowManager->showView( static_cast<ViewBase *>( iSettingsView ) );
154 iEngine->stopIdleTimeCounter();
158 void UIManager::settingsOkClicked()
160 // Show the weekly view and restart the idle timer
161 if ( iWeeklyView != 0 )
163 iWindowManager->showView( static_cast<ViewBase *>( iWeeklyView ) );
164 iEngine->startIdleTimeCounter();
168 void UIManager::meetingsFetched( const QList<Meeting*> &aMeetings )
170 qDebug() << "[UIManager::meetingsFetched] <Change the weekly views method to slot so we don't need this>";
171 if ( iWeeklyView != 0 )
173 iWeeklyView->refreshMeetings( aMeetings );
177 void UIManager::showMeetingProgressBar( Meeting *aMeeting )
179 if ( iProgressBar != 0 )
181 iProgressBar->update( tr("Fetching meeting info...") );
182 iWindowManager->showDialog( static_cast<QDialog *>( iProgressBar ), false, false );
183 iEngine->stopIdleTimeCounter();
187 void UIManager::meetingDetailsFetched(Meeting &aDetailedMeeting)
189 qDebug() << "[UIManager::meetingDetailsFetched] <Invoked>";
190 if ( iMeetingInfo != 0 )
192 if ( iProgressBar != 0 && iProgressBar->isVisible() )
194 iProgressBar->close(); // Close it in case it's visible
196 MeetingInfoDialog *tmp = new MeetingInfoDialog( &aDetailedMeeting );
197 iWindowManager->showDialog( static_cast<QDialog *>( tmp ) );
198 // TODO : We should use the member variable and implement correctly the setMeeting() method !!!
199 // iMeetingInfo->setMeeting( &aDetailedMeeting );
200 // iWindowManager->showDialog( static_cast<QDialog *>( iMeetingInfo ) );
204 void UIManager::roomStatusIndicatorRequested()
206 if ( iRoomStatusIndicator != 0 )
208 iWindowManager->showView( static_cast<ViewBase *>( iRoomStatusIndicator ) );
209 iEngine->stopIdleTimeCounter();
213 void UIManager::previousViewRestored()
215 iEngine->startIdleTimeCounter();
218 void UIManager::progressBarCancelled()
220 if ( iProgressBar != 0 )
222 iProgressBar->close();
223 iEngine->startIdleTimeCounter();
227 void UIManager::changeModeOrdered( DeviceManager::OperationMode aMode )
229 qDebug() << "[UIManager::changeModeOrdered] <Invoked>";
231 QString message = tr( "You are about to change operation mode to %1." )
232 .arg( iEngine->iDevice->operationModeToString( aMode ) );
234 if ( iPasswordDialog != 0 )
236 // TODO : Set the new text for password dialog
237 iWindowManager->showDialog( static_cast<QDialog *>( iPasswordDialog ) );
241 void UIManager::currentRoomChanged(Room *aRoom)
243 if ( iWeeklyView != 0 )
245 QDateTime from = QDateTime( iWeeklyView->beginnigOfShownWeek() );
246 QDateTime to = QDateTime( from.addDays( 8 ) );
247 iEngine->fetchMeetings( from, to, aRoom );
251 void UIManager::updateTime(QDateTime aDateTime)
253 if ( iWeeklyView != 0 )
255 iWeeklyView->setCurrentDateTime( aDateTime );
259 void UIManager::passwordEntered( PasswordDialog::PasswordStatus aStatus )
263 case PasswordDialog::Correct:
264 // Show the progress bar..
265 if ( iProgressBar != 0 )
267 iWindowManager->showDialog( static_cast<QDialog *>( iProgressBar ), false );
269 // ... and initiate the mode changing
270 iEngine->changeDeviceMode( true );
272 case PasswordDialog::Incorrect:
273 iWindowManager->error( tr("Incorrect Password") );
274 case PasswordDialog::Canceled:
275 iEngine->changeDeviceMode( false );
279 // Close the dialog after we have handled the status
280 if ( iPasswordDialog != 0 )
282 iPasswordDialog->close();
286 void UIManager::updateProgressBarText(const QString &aText)
288 if ( iProgressBar != 0 )
290 iProgressBar->update( aText );
294 void UIManager::hideProgressBar()
296 qDebug() << "[UIManager::hideProgressBar] <Invoked>";
297 if ( iProgressBar != 0 && iProgressBar->isVisible() )
299 iProgressBar->close();
303 void UIManager::settingsCancelClicked()
305 // Show the weekly view and restart the idle timer
306 if ( iWeeklyView != 0 )
308 iWindowManager->showView( static_cast<ViewBase *>( iWeeklyView ) );
309 iEngine->startIdleTimeCounter();