X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2FBusinessLogic%2FEngine.cpp;fp=src%2FBusinessLogic%2FEngine.cpp;h=07563ebcf47d97102902efd97f8c9e6d101fc4d9;hb=0d915d945a75d2d9781e2aff98f43a1b1201f79d;hp=dc62dc3e1b168f6a83220d67a466699741810f2e;hpb=60b7802da53961d1998e276858bbc5e404b98a05;p=qtmeetings diff --git a/src/BusinessLogic/Engine.cpp b/src/BusinessLogic/Engine.cpp index dc62dc3..07563eb 100644 --- a/src/BusinessLogic/Engine.cpp +++ b/src/BusinessLogic/Engine.cpp @@ -5,10 +5,10 @@ #include "Configuration.h" #include "DisplaySettings.h" #include "CommunicationManager.h" -#include "DeviceManager.h" +// #include "DeviceManager.h" #include "Clock.h" #include "ErrorMapper.h" -#include "WeeklyViewWidget.h" +#include "UIManager.h" #include #include @@ -18,61 +18,53 @@ QTime Engine::endOfTheDay = QTime( 23, 59, 0, 0); // end of the day is 11:59pm const int IDLE_TIME_MULTIPLIER = 60000; // Multiplies milliseconds to minutes -Engine::Engine() : - iClock( 0), iConfiguration(Configuration::instance() ), iCommunication( 0) -{ - qDebug() << "Engine::Engine()"; - // if reading of configuration fails, signal that initialization failed - if (iConfiguration == 0) - { - QTimer::singleShot( 0, this, SLOT( closeApplication() )); - return; +// Macro to help deleting objects. This could be global. +#define QT_DELETE(X) \ + if ( X != 0 ) \ + { \ + delete X; \ + X = 0; \ } - //initialize window manager - iWindowManager = new WindowManager( iConfiguration ); - connect(iWindowManager, SIGNAL( roomStatusInfoNeeded( Room * ) ), this, SLOT( roomStatusInfoNeeded( Room * ) )); - connect(iWindowManager, SIGNAL( observedEventDetected() ), this, SLOT( observedEventDetected() )); - connect(iWindowManager, SIGNAL( meetingActivated( Meeting * ) ), this, SLOT( fetchMeetingDetails( Meeting * ) )); - connect(iWindowManager, SIGNAL( currentRoomChanged( Room * ) ), this, SLOT( currentRoomChanged( Room * ) )); - connect(iWindowManager, SIGNAL( shownWeekChanged( QDate ) ), this, SLOT( shownWeekChanged( QDate ) )); - connect(iWindowManager, SIGNAL( passwordEntered( PasswordDialog::PasswordStatus ) ), this, SLOT( passwordEntered( PasswordDialog::PasswordStatus ) )); - - // initialize communication - iCommunication = new CommunicationManager( *(iConfiguration->connectionSettings()) ); - connect(iCommunication, SIGNAL( error( int, CommunicationManager::CommunicationType ) ), this, SLOT( errorHandler( int ) )); - connect(iCommunication, SIGNAL( meetingsFetched( const QList& ) ), this, SLOT( meetingsFetched( const QList& ) )); - connect(iCommunication, SIGNAL( meetingDetailsFetched( Meeting& ) ), this, SLOT( meetingDetailsFetched( Meeting& ) )); +Engine::Engine() : + iClock( 0 ), iConfiguration( 0 ), iCommunication( 0 ), + iWindowManager( 0 ), iUIManager( 0 ) +{ + qDebug() << "Engine::Engine()"; + + initConfiguration(); + initDevice(); + initCommunication(); + initUserInterface(); + //initialize idle time counter iIdleTimeCounter = new QTimer(); - iIdleTimeCounter->setSingleShot( true); - iIdleTimeCounter->setInterval(IDLE_TIME_MULTIPLIER - * iConfiguration->displaySettings()->screensaver() ); + iIdleTimeCounter->setSingleShot( true ); + // iIdleTimeCounter->setInterval( IDLE_TIME_MULTIPLIER * iConfiguration->displaySettings()->screensaver() ); + iIdleTimeCounter->setInterval( 10000 ); iIdleTimeCounter->start(); - connect(iIdleTimeCounter, SIGNAL( timeout() ), iWindowManager, SLOT( showRoomStatus() )); // create application clock iClock = new Clock; - connect(iClock, SIGNAL( tick( QDateTime ) ), this, SLOT( checkStatusOfAllRooms() )); - connect(iClock, SIGNAL( tick( QDateTime ) ), iWindowManager, SLOT( distributeDateTimeInfo( QDateTime ) )); + connect( iClock, SIGNAL( tick( QDateTime ) ), this, SLOT( checkStatusOfAllRooms() ) ); + // connect( iClock, SIGNAL( tick( QDateTime ) ), iWindowManager, SLOT( distributeDateTimeInfo( QDateTime ) ) ); + // Create auto refresh timer iAutoRefresh = new QTimer; iAutoRefresh->setInterval(iConfiguration->connectionSettings()->refreshInterval() * 1000); iAutoRefresh->start(); - connect(iAutoRefresh, SIGNAL( timeout() ), iAutoRefresh, SLOT( start() )); - connect(iAutoRefresh, SIGNAL( timeout() ), this, SLOT( fetchMeetings() )); - - // create device manager - iDevice = new DeviceManager( iConfiguration->startupSettings() ); - connect(iDevice, SIGNAL( error( int, const QString& ) ), this, SLOT( errorHandler( int, const QString& ) )); - connect(iDevice, SIGNAL( changeModeOrdered( DeviceManager::OperationMode ) ), this, SLOT( changeModeOrdered( DeviceManager::OperationMode ) )); - iDevice->initDeviceManager(); - - if (iDevice->currentOperationMode() == DeviceManager::KioskMode) - iWindowManager->fullScreen(); + connect( iAutoRefresh, SIGNAL( timeout() ), iAutoRefresh, SLOT( start() ) ); + connect( iAutoRefresh, SIGNAL( timeout() ), this, SLOT( fetchMeetings() ) ); + + if( iDevice->currentOperationMode() == DeviceManager::KioskMode ) + { + iWindowManager->setFullscreen(); + } - QTimer::singleShot( 0, this, SLOT( fetchMeetings() )); + connectSignals(); + + QTimer::singleShot( 0, this, SLOT( fetchMeetings() ) ); // TODO: continue implementation } @@ -82,15 +74,18 @@ Engine::~Engine() qDebug() << "Engine::~Engine()"; while ( !iMeetings.isEmpty() ) delete iMeetings.takeFirst(); - iIdleTimeCounter->stop(); - delete iIdleTimeCounter; - iIdleTimeCounter = 0; - delete iWindowManager; - iWindowManager = 0; - delete iClock; - iClock = 0; - delete iDevice; - iDevice = 0; + + if ( iIdleTimeCounter != 0 ) + { + iIdleTimeCounter->stop(); + delete iIdleTimeCounter; + iIdleTimeCounter = 0; + } + QT_DELETE( iClock ); + QT_DELETE( iDevice ); + + QT_DELETE( iUIManager ); + QT_DELETE( iWindowManager ); } void Engine::closeApplication() @@ -100,6 +95,8 @@ void Engine::closeApplication() QTimer::singleShot( 1000, QApplication::instance(), SLOT( quit() )); } +<<<<<<< HEAD:src/BusinessLogic/Engine.cpp +======= void Engine::observedEventDetected() { qDebug() << "Engine::observedEventDetected()"; @@ -117,6 +114,7 @@ void Engine::observedEventDetected() iIdleTimeCounter->start(); } +>>>>>>> 60b7802da53961d1998e276858bbc5e404b98a05:src/BusinessLogic/Engine.cpp Room* Engine::defaultRoom() { qDebug() << "Engine::defaultRoom()"; @@ -125,7 +123,7 @@ Room* Engine::defaultRoom() void Engine::checkStatusOfAllRooms() { - qDebug() << "Engine::checkStatusOfAllRooms()"; +// qDebug() << "Engine::checkStatusOfAllRooms()"; // iterate trough on the rooms for (int i = 0; i < iConfiguration->rooms().count(); i++) { @@ -136,8 +134,8 @@ void Engine::checkStatusOfAllRooms() int Engine::indexOfMeetingAt(Room *aRoom, QDateTime aAt) { - qDebug() << "Engine::indexOfMeetingAt( Room *, QDateTime )"; - for (int i = 0; i < iMeetings.count(); i++) +// qDebug() << "Engine::indexOfMeetingAt( Room *, QDateTime )"; + for ( int i = 0; i < iMeetings.count(); i++ ) { // exchange server ensures that there is only one meeting in a room at a specified time if (aRoom->equals(iMeetings.at( i )->room() ) && iMeetings.at( i )->startsAt() <= aAt && iMeetings.at( i )->endsAt() >= aAt) @@ -150,7 +148,7 @@ int Engine::indexOfMeetingAt(Room *aRoom, QDateTime aAt) int Engine::indexOfMeetingAfter(Room *aRoom, QDateTime aAfter) { - qDebug() << "Engine::indexOfMeetingAfter( Room *, QDateTime )"; +// qDebug() << "Engine::indexOfMeetingAfter( Room *, QDateTime )"; // seeks for the next meeting on the SAME DAY int min = -1; for (int i = 0; i < iMeetings.count(); i++) @@ -170,8 +168,8 @@ int Engine::indexOfMeetingAfter(Room *aRoom, QDateTime aAfter) void Engine::roomStatusInfoNeeded(Room *aRoom) { - qDebug() << "Engine::roomStatusInfoNeeded( Room * )"; - if (aRoom == 0) +// qDebug() << "Engine::roomStatusInfoNeeded( Room * )"; + if ( aRoom == 0 ) { return; } @@ -189,8 +187,8 @@ void Engine::roomStatusInfoNeeded(Room *aRoom) ((indexOfNextMeeting != -1 ) ? iMeetings.at( indexOfNextMeeting )->startsAt().time() : Engine::endOfTheDay ); //currently works only for deafult room - if (aRoom->equals( *(defaultRoom() )) ) - iWindowManager->roomStatusChanged(aRoom, status, until); +// if( aRoom->equals( *(defaultRoom() ) ) ) +// iWindowManager->roomStatusChanged( aRoom, status, until ); } void Engine::fetchMeetings() @@ -203,12 +201,14 @@ void Engine::fetchMeetings() void Engine::fetchMeetingDetails(Meeting *aMeeting) { 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 &aMeetings ) @@ -225,105 +225,163 @@ void Engine::meetingsFetched( const QList &aMeetings ) 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::cancelFetchMeetingDetails() +{ + iCommunication->cancelFetchMeetingDetails(); +} + +void Engine::shownWeekChanged( QDate aFrom ) { - qDebug() << "Engine::meetingDetailsFetched( Meeting & )"; - iWindowManager->closeProgressBar(); - iWindowManager->showMeetingInfo( &aDetailedMeeting); + qDebug() << "[Engine::shownWeekChanged] "; + QDateTime from( aFrom ); + QDateTime to( aFrom.addDays( 7 ), QTime( 23, 59 ) ); + qDebug() << "[Engine::shownWeekChanged] "; + 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] "; + + // 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] "; +} + +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& ) ), + this, SLOT( meetingsFetched( const QList& ) ) ); } -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(); + } }