QTimer::singleShot( 1000, QApplication::instance(), SLOT( quit() ));
}
++<<<<<<< HEAD:src/BusinessLogic/Engine.cpp
++=======
+ void Engine::observedEventDetected()
+ {
+ qDebug() << "Engine::observedEventDetected()";
+ if ( !iIdleTimeCounter->isActive() )
+ {
+ iWindowManager->weeklyView()->showCurrentWeek();
+ }
+ iWindowManager->showWeeklyView();
+ // prepare to restart idle counter
+ if (iIdleTimeCounter->isActive() )
+ {
+ iIdleTimeCounter->stop();
+ }
+ // (re)start idle counter
+ iIdleTimeCounter->start();
+ }
+
++>>>>>>> 60b7802da53961d1998e276858bbc5e404b98a05:src/BusinessLogic/Engine.cpp
Room* Engine::defaultRoom()
{
qDebug() << "Engine::defaultRoom()";
fetchMeetings(iClock->datetime(), iClock->datetime().addDays( 7), room);
}
- bool Engine::isMeetingInList(const QList<Meeting*> &aList, const Meeting *aMeeting)
+ void Engine::fetchMeetingDetails(Meeting *aMeeting)
{
- qDebug()
- << "Engine::isMeetingInList( const QList<Meeting*> &, const Meeting * )";
- for (int i = 0; i < aList.count(); i++)
- {
- if (aMeeting->equals( *(aList.at(i))) )
- {
- return true;
- }
- }
- return false;
+ qDebug() << "Engine::fetchMeetingDetails( Meeting* )";
- iWindowManager->showProgressBar(tr("Please Wait"), true);
++/* iWindowManager->showProgressBar(tr("Please Wait"), true);
+ iWindowManager->updateProgressBar(tr("Fetching Meeting Details...") );
+ connect(iWindowManager,
+ SIGNAL( progressBarCancelled() ), this,
+ SLOT( fetchMeetingDetailsCancelled() ));
- iCommunication->fetchMeetingDetails( *aMeeting);
++ iCommunication->fetchMeetingDetails( *aMeeting); */
++
++ iCommunication->fetchMeetingDetails( *aMeeting );
}
- void Engine::meetingsFetched(const QList<Meeting*> &aMeetings)
+ void Engine::meetingsFetched( const QList<Meeting*> &aMeetings )
{
qDebug() << "Engine::meetingsFetched( const QList<Meeting*> & )";
- // check if there is any new meeting in the list came from the server -> added
- for (int i = 0; i < aMeetings.count(); i++)
- {
- // if the (i)th meeting is not in the local meeting list
- if ( !isMeetingInList(iMeetings, aMeetings.at(i) ) )
- {
- // add to the local database =)
- Meeting* m = new Meeting( *(aMeetings.at( i )) );
- iMeetings.append(m);
- }
+ for ( int i = 0; i < iMeetings.count(); ++i ) {
+ Meeting* m = iMeetings.takeAt( i );
+ delete m;
}
-
- // check if there is any meeting NOT in the list came from the server -> deleted
- for (int i = 0; i < iMeetings.count(); i++)
- {
- // if the (i)th meeting is in the local but NOT in the server's meeting list
- if ( !isMeetingInList(aMeetings, iMeetings.at(i) ) )
- {
- Meeting* m = iMeetings.takeAt(i);
- // delete the meeting from the local list
- delete m;
- }
+ iMeetings.clear();
+ for ( int i = 0; i < aMeetings.count(); ++i ) {
+ Meeting* m = new Meeting( *(aMeetings.at( i )) );
+ iMeetings.append( m );
}
- iWindowManager->refreshMeetings( iMeetings );
// refresh room status info
roomStatusInfoNeeded(defaultRoom() );
}
-void Engine::meetingDetailsFetched(Meeting &aDetailedMeeting)
+void Engine::errorHandler( int aCode, const QString &aAddInfo )
+{
+ if ( iWindowManager != 0 )
+ {
+ iWindowManager->error( ErrorMapper::codeToString( aCode, aAddInfo ) );
+ }
+}
+
+void Engine::fetchMeetings( const QDateTime &aFrom, const QDateTime &aUntil, const Room *aIn )
+{
+ qDebug()
+ << "Engine::fetchMeetings( const QDateTime &, const QDateTime &, const Room * )";
+ iCommunication->fetchMeetings(aFrom, aUntil, *aIn);
+}
+
- void Engine::fetchMeetingDetails(Meeting *aMeeting)
- {
- qDebug() << "[Engine::fetchMeetingDetails] <TODO : METHOD NOT IMPLEMENTED>";
- Meeting tempMeeting(aMeeting->primaryId(), aMeeting->room(), aMeeting->startsAt(), aMeeting->endsAt() );
- iCommunication->fetchMeetingDetails( tempMeeting );
- // Meeting tempMeeting = aMeeting;
- // iCommunication->fetchMeetingDetails( tempMeeting );
- }
-
+void Engine::cancelFetchMeetingDetails()
+{
+ iCommunication->cancelFetchMeetingDetails();
+}
+
+void Engine::shownWeekChanged( QDate aFrom )
{
- qDebug() << "Engine::meetingDetailsFetched( Meeting & )";
- iWindowManager->closeProgressBar();
- iWindowManager->showMeetingInfo( &aDetailedMeeting);
+ qDebug() << "[Engine::shownWeekChanged] <Invoked>";
+ QDateTime from( aFrom );
+ QDateTime to( aFrom.addDays( 7 ), QTime( 23, 59 ) );
+ qDebug() << "[Engine::shownWeekChanged] <From " << aFrom.toString( "d.m. h:mm" ) << " to " << to.toString( "d.m. h:mm" ) << ">";
+ iCommunication->fetchMeetings( from, to, *defaultRoom() );
+// fetchMeetings( from, to, iWindowManager->weeklyView()->currentRoom() );
}
-void Engine::errorHandler(int aCode, const QString &aAddInfo)
+void Engine::changeDeviceMode( bool aChange )
{
- qDebug() << "Engine::ErrorHandler, aCode: " << aCode;
- // inform UI about the problem
- if( aCode >= 100 && aCode <= 150 ) { //communication errors
- //we don't want these to close operation changing
- qDebug() << "CommunicationManager signaled an error:" << aCode;
- iWindowManager->closeProgressBar();
+ if ( aChange )
+ {
+ connect( iDevice, SIGNAL( changingModeFailed() ), this, SLOT( changeModeFailed() ) );
+ iAutoRefresh->stop(); // Stop the meeting update
}
- iWindowManager->error(ErrorMapper::codeToString(aCode, aAddInfo) );
+ iDevice->changeMode( aChange );
}
-void Engine::currentRoomChanged(Room *aCurrentRoom)
+void Engine::changeModeFailed()
{
- qDebug() << "Engine::currentRoomChanged to " << aCurrentRoom->name();
- QDateTime from(iWindowManager->weeklyView()->beginnigOfShownWeek() );
- QDateTime to(from.addDays( 8) );
- fetchMeetings(from, to, aCurrentRoom);
+ qDebug() << "Engine::progressBarCancelled()";
+ iDevice->changeMode( false );
+ iAutoRefresh->start(); //we start the metting updating
}
-void Engine::fetchMeetings(const QDateTime &aFrom, const QDateTime &aUntil, const Room *aIn)
+void Engine::initUserInterface()
{
- qDebug()
- << "Engine::fetchMeetings( const QDateTime &, const QDateTime &, const Room * )";
- iCommunication->fetchMeetings(aFrom, aUntil, *aIn);
+ qDebug() << "[Engine::initUserInterface] <Invoked>";
+
+ // Initialize the window manager and connect what ever signals can be connected
+ iWindowManager = new WindowManager;
+ // Create the UIManager which internally handles most of the UI actions
+ iUIManager = new UIManager( this, iWindowManager );
+
+ connect( iWindowManager, SIGNAL( eventDetected() ), this, SLOT( handleViewEvent() ) );
+ connect( iWindowManager, SIGNAL( previousViewRestored() ), iUIManager, SLOT( previousViewRestored() ) );
+ connect( iWindowManager, SIGNAL( dialogActivated() ), this, SLOT( dialogActivated() ) );
+ connect( iWindowManager, SIGNAL( dialogDeactivated() ), this, SLOT( dialogDeactivated() ) );
+
+ // Show the UI
+ iWindowManager->setWindowState( Qt::WindowMaximized );
+ iWindowManager->show();
+ iUIManager->showMainView();
+
+ qDebug() << "[Engine::initUserInterface] <Finished>";
+}
+
+void Engine::handleViewEvent()
+{
+ if ( iIdleTimeCounter != 0 )
+ {
+ // Restart the idle time counter when view event is received
+ iIdleTimeCounter->stop();
+ iIdleTimeCounter->start();
+ }
}
-void Engine::shownWeekChanged(QDate aFrom)
+void Engine::initConfiguration()
{
- qDebug() << "Engine::shownWeekChanged( QDate )";
- QDateTime from(aFrom);
- QDateTime to(aFrom.addDays( 7), QTime( 23, 59) );
- qDebug() << "Engine::shownWeekChanged " << aFrom.toString("d.m. h:mm")
- << " to " << to.toString("d.m. h:mm");
- fetchMeetings(from, to, iWindowManager->weeklyView()->currentRoom() );
+ iConfiguration = Configuration::instance();
+ if ( iConfiguration == 0 )
+ {
+ QTimer::singleShot( 0, this, SLOT( closeApplication() ) );
+ }
}
-void Engine::changeModeOrdered(DeviceManager::OperationMode aMode)
+void Engine::connectSignals()
{
- qDebug() << "Engine::changeModeOrdered( DeviceManager::OperationMode )";
- QString message = tr( "You are about to change operation mode to %1." )
- .arg(iDevice->operationModeToString(aMode) );
+ // Connect engine objects signals to UIManager
+ connect( iClock, SIGNAL( tick( QDateTime ) ), iUIManager, SLOT( updateTime( QDateTime ) ) );
+ connect( iIdleTimeCounter, SIGNAL( timeout() ) , iUIManager, SLOT( roomStatusIndicatorRequested() ) );
+
+ iUIManager->connectDeviceManager( iDevice );
+ iUIManager->connectCommunicationManager( iCommunication );
+}
- iWindowManager->showPasswordDialog(iConfiguration->adminPassword(), message);
+void Engine::initCommunication()
+{
+ // initialize communication
+ iCommunication = new CommunicationManager( *(iConfiguration->connectionSettings()) );
+ connect( iCommunication, SIGNAL( error( int, CommunicationManager::CommunicationType ) ),
+ this, SLOT( errorHandler( int ) ) );
+ connect( iCommunication, SIGNAL( meetingsFetched( const QList<Meeting*>& ) ),
+ this, SLOT( meetingsFetched( const QList<Meeting*>& ) ) );
}
-void Engine::passwordEntered(PasswordDialog::PasswordStatus aPasswordStatus)
+void Engine::initDevice()
{
- qDebug() << "Engine::passwordEntered( PasswordDialog::PasswordStatus )";
- iWindowManager->closePasswordDialog();
+ // create device manager
+ iDevice = new DeviceManager( iConfiguration->startupSettings() );
+ connect( iDevice, SIGNAL( error( int, const QString& ) ), this, SLOT( errorHandler( int, const QString& ) ) );
+ iDevice->initDeviceManager();
+}
- switch (aPasswordStatus)
+void Engine::dialogActivated()
+{
+ if ( iIdleTimeCounter != 0 )
{
- case PasswordDialog::Correct:
- {
- iAutoRefresh->stop(); //we stop the metting updating
- iWindowManager->showProgressBar( "Changing current operation mode." );
- connect(iDevice, SIGNAL( changingMode( const QString & ) ), iWindowManager, SLOT( updateProgressBar( const QString & ) ));
- connect( iDevice, SIGNAL( changingMode( const QString & ) ),
- iWindowManager, SLOT( updateProgressBar( const QString & ) ) );
- connect( iDevice, SIGNAL( changeModeFailed() ), this, SLOT( changeModeFailed() ) );
- iDevice->changeMode( true);
- break;
- }
- case PasswordDialog::Incorrect:
- {
- iWindowManager->error(tr("Incorrect password.") );
- iDevice->changeMode( false);
- break;
- }
- default: //case PasswordDialog::Canceled
- {
- iDevice->changeMode( false);
- }
+ iIdleTimeCounter->stop();
}
}
-void Engine::changeModeFailed()
+void Engine::dialogDeactivated()
{
- qDebug() << "Engine::changeModeFailed()";
- iWindowManager->closeProgressBar();
- iAutoRefresh->start(); //we start the metting updating
+ if ( iIdleTimeCounter != 0 )
+ {
+ iIdleTimeCounter->start();
+ }
}
-void Engine::fetchMeetingDetailsCancelled()
+void Engine::previousViewRestored()
{
- iCommunication->cancelFetchMeetingDetails();
- iWindowManager->closeProgressBar();
+ if ( iIdleTimeCounter != 0 )
+ {
+ iIdleTimeCounter->start();
+ }
+}
+
+void Engine::stopIdleTimeCounter()
+{
+ if ( iIdleTimeCounter != 0 )
+ {
+ iIdleTimeCounter->stop();
+ }
+}
+
+void Engine::startIdleTimeCounter()
+{
+ if ( iIdleTimeCounter != 0 )
+ {
+ iIdleTimeCounter->start();
+ }
}
+