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;
42 createRoomStatusIndicator();
43 createPasswordDialog();
45 createMeetingInfoDialog();
48 UIManager::~UIManager()
53 QT_DELETE( iMeetingInfo );
54 QT_DELETE( iProgressBar );
55 QT_DELETE( iPasswordDialog );
56 QT_DELETE( iRoomStatusIndicator );
57 QT_DELETE( iSettingsView );
58 QT_DELETE( iWeeklyView );
61 void UIManager::showMainView()
63 iWindowManager->showView( iWeeklyView );
66 // ===============================================
67 // INITIALIZE THE UIMANAGER
68 void UIManager::createWeeklyView()
70 iWeeklyView = new WeeklyViewWidget( QDateTime::currentDateTime(), iEngine->iConfiguration );
72 // Connect signals to UIManager
73 connect( iWeeklyView, SIGNAL( settingsButtonClicked() ), this, SLOT( settingsViewRequest() ) );
74 connect( iWeeklyView, SIGNAL( currentRoomChanged( Room * ) ), this, SLOT( currentRoomChanged( Room * ) ) );
75 connect( iWeeklyView, SIGNAL( meetingActivated( Meeting * ) ), this, SLOT( showMeetingProgressBar( Meeting * ) ) );
76 // Connect signals to engine
77 connect( iWeeklyView, SIGNAL( meetingActivated( Meeting * ) ), iEngine, SLOT( fetchMeetingDetails( Meeting * ) ) );
78 connect( iWeeklyView, SIGNAL( shownWeekChanged( QDate ) ), iEngine, SLOT( shownWeekChanged( QDate ) ) );
79 connect( iWeeklyView, SIGNAL( currentRoomChanged( Room * ) ), iEngine, SLOT( currentRoomChanged( Room * ) ) );
82 void UIManager::createSettingsView()
84 iSettingsView = new SettingsView;
87 connect( iSettingsView, SIGNAL( okClicked() ), this, SLOT( settingsOkClicked() ) );
88 connect( iSettingsView, SIGNAL( cancelClicked() ), this, SLOT( settingsCancelClicked() ) );
91 void UIManager::createRoomStatusIndicator()
93 iRoomStatusIndicator = new RoomStatusIndicatorWidget( iEngine->defaultRoom(), Room::FreeStatus, QTime::currentTime(), iEngine->iConfiguration->displaySettings()->timeFormat() );
94 connect( iEngine, SIGNAL( roomStatusChanged( Room::Status, QTime ) ), iRoomStatusIndicator, SLOT( statusChanged( Room::Status, QTime ) ) );
95 connect( iWeeklyView, SIGNAL( currentRoomChanged( Room * ) ), iRoomStatusIndicator, SLOT( currentRoomChanged( Room * ) ) );
98 void UIManager::createPasswordDialog()
100 iPasswordDialog = new PasswordDialog( iEngine->iConfiguration->adminPassword(), "", tr("Enter password") );
101 connect( iPasswordDialog, SIGNAL( passwordEntered( PasswordDialog::PasswordStatus ) ), this, SLOT( passwordEntered( PasswordDialog::PasswordStatus ) ) );
104 void UIManager::createProgressBar()
106 iProgressBar = new ProgressBar( tr("CHANGE THIS"), true );
107 // Connect to UIManager
108 connect( iProgressBar, SIGNAL( cancel() ), this, SLOT( progressBarCancelled() ) );
110 connect( iProgressBar, SIGNAL( cancel() ), iEngine, SLOT( cancelFetchMeetingDetails() ) );
113 void UIManager::createMeetingInfoDialog()
115 iMeetingInfo = new MeetingInfoDialog();
118 void UIManager::connectDeviceManager( DeviceManager *aDeviceManager )
120 connect( aDeviceManager, SIGNAL( changeModeOrdered( DeviceManager::OperationMode ) ),
121 this, SLOT( changeModeOrdered( DeviceManager::OperationMode ) ) );
123 connect( aDeviceManager, SIGNAL( changingMode( const QString & ) ), this, SLOT( updateProgressBarText( const QString & ) ) );
124 connect( aDeviceManager, SIGNAL( changeModeFailed() ), this, SLOT( hideProgressBar() ) );
127 void UIManager::connectCommunicationManager( CommunicationManager *aCommunicationManager )
129 connect( aCommunicationManager, SIGNAL( meetingDetailsFetched( Meeting & ) ), this, SLOT( meetingDetailsFetched( Meeting & ) ) );
130 connect( aCommunicationManager, SIGNAL( meetingsFetched( const QList<Meeting *> & ) ), this, SLOT( meetingsFetched( const QList<Meeting *> & ) ) );
133 // ============================================
135 void UIManager::settingsViewRequest()
137 // Show the settings view and stop the idle timer
138 if ( iSettingsView != 0 )
140 iWindowManager->showView( static_cast<ViewBase *>( iSettingsView ) );
141 iEngine->stopIdleTimeCounter();
145 void UIManager::settingsOkClicked()
147 // Show the weekly view and restart the idle timer
148 if ( iWeeklyView != 0 )
150 iWindowManager->showView( static_cast<ViewBase *>( iWeeklyView ) );
151 iEngine->startIdleTimeCounter();
155 void UIManager::meetingsFetched( const QList<Meeting*> &aMeetings )
157 qDebug() << "[UIManager::meetingsFetched] <Change the weekly views method to slot so we don't need this>";
158 if ( iWeeklyView != 0 )
160 iWeeklyView->refreshMeetings( aMeetings );
164 void UIManager::showMeetingProgressBar( Meeting *aMeeting )
166 if ( iProgressBar != 0 )
168 iProgressBar->update( tr( "Fetching meeting info..." ), tr( "Please wait" ) );
169 iProgressBar->toggleCancellable( true );
170 iWindowManager->showDialog( static_cast<QDialog *>( iProgressBar ), false, false );
174 void UIManager::meetingDetailsFetched(Meeting &aDetailedMeeting)
176 qDebug() << "[UIManager::meetingDetailsFetched] <Invoked>";
177 if ( iMeetingInfo != 0 )
179 if ( iProgressBar != 0 && iProgressBar->isVisible() )
181 iProgressBar->close(); // Close it in case it's visible
183 MeetingInfoDialog *tmp = new MeetingInfoDialog( &aDetailedMeeting );
184 iWindowManager->showDialog( static_cast<QDialog *>( tmp ) );
185 // TODO : We should use the member variable and implement correctly the setMeeting() method !!!
186 // iMeetingInfo->setMeeting( &aDetailedMeeting );
187 // iWindowManager->showDialog( static_cast<QDialog *>( iMeetingInfo ) );
191 void UIManager::roomStatusIndicatorRequested()
193 if ( iRoomStatusIndicator != 0 )
195 iWindowManager->showView( static_cast<ViewBase *>( iRoomStatusIndicator ) );
196 iEngine->stopIdleTimeCounter();
200 void UIManager::previousViewRestored()
202 iEngine->startIdleTimeCounter();
205 void UIManager::progressBarCancelled()
207 if ( iProgressBar != 0 )
209 iProgressBar->close();
213 void UIManager::changeModeOrdered( DeviceManager::OperationMode aMode )
215 qDebug() << "[UIManager::changeModeOrdered] <Invoked>";
217 if ( iPasswordDialog != 0 )
219 QString text = tr( "You are about to change operation mode to %1." )
220 .arg( iEngine->iDevice->operationModeToString( aMode ) );
221 iPasswordDialog->update( text );
222 iWindowManager->showDialog( static_cast<QDialog *>( iPasswordDialog ) );
226 void UIManager::connectionLost()
228 qDebug() << "UIManager::connectionLost()";
229 iWeeklyView->connectionLost();
230 iSettingsView->connectionLost();
231 iRoomStatusIndicator->connectionLost();
234 void UIManager::connectionEstablished()
236 qDebug() << "UIManager::connectionEstablished()";
237 iWeeklyView->connectionEstablished();
238 iSettingsView->connectionEstablished();
239 iRoomStatusIndicator->connectionEstablished();
242 void UIManager::currentRoomChanged(Room *aRoom)
244 qDebug() << "[UIManager::currentRoomChanged] <Invoked>";
245 if ( iWeeklyView != 0 )
247 QDateTime shown = QDateTime( iWeeklyView->beginnigOfShownWeek() );
248 iEngine->fetchMeetings( shown.date().weekNumber(), shown.date().year(), aRoom );
252 void UIManager::updateTime(QDateTime aDateTime)
254 if ( iWeeklyView != 0 )
256 iWeeklyView->setCurrentDateTime( aDateTime );
258 if ( iRoomStatusIndicator != 0 )
260 iRoomStatusIndicator->setCurrentTime( aDateTime.time() );
264 void UIManager::passwordEntered( PasswordDialog::PasswordStatus aStatus )
268 case PasswordDialog::Correct:
269 // Show the progress bar..
270 if ( iProgressBar != 0 )
272 iProgressBar->update( tr( "" ), tr( "Changing operation mode" ) );
273 iProgressBar->toggleCancellable( false );
274 iWindowManager->showDialog( static_cast<QDialog *>( iProgressBar ), false, false );
276 // ... and initiate the mode changing
277 iEngine->changeDeviceMode();
279 case PasswordDialog::Incorrect:
280 iWindowManager->error( tr("Incorrect Password") );
282 case PasswordDialog::Canceled:
286 // Close the dialog after we have handled the status
287 if ( iPasswordDialog != 0 )
289 iPasswordDialog->close();
293 void UIManager::updateProgressBarText(const QString &aText)
295 if ( iProgressBar != 0 )
297 iProgressBar->update( aText );
301 void UIManager::hideProgressBar()
303 qDebug() << "[UIManager::hideProgressBar] <Invoked>";
304 if ( iProgressBar != 0 && iProgressBar->isVisible() )
306 iProgressBar->close();
310 void UIManager::settingsCancelClicked()
312 // Show the weekly view and restart the idle timer
313 if ( iWeeklyView != 0 )
315 iWindowManager->showView( static_cast<ViewBase *>( iWeeklyView ) );
316 iEngine->startIdleTimeCounter();