Merged the engine
authorMikko Siren <mikko.siren@ixonos.com>
Wed, 27 May 2009 13:10:04 +0000 (16:10 +0300)
committerMikko Siren <mikko.siren@ixonos.com>
Wed, 27 May 2009 13:10:04 +0000 (16:10 +0300)
1  2 
src/BusinessLogic/Engine.cpp

@@@ -95,6 -100,23 +95,26 @@@ void Engine::closeApplication(
        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()";
@@@ -178,213 -200,130 +198,190 @@@ void Engine::fetchMeetings(
        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();
 +      }
  }