mmsharing/livecommsui/lcui/src/lcviewmanager_p.cpp
branchRCL_3
changeset 22 73a1feb507fb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsharing/livecommsui/lcui/src/lcviewmanager_p.cpp	Tue Aug 31 15:12:07 2010 +0300
@@ -0,0 +1,282 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+// USER INCLUDES
+#include "lcviewmanager_p.h"
+#include "lcuicomponentrepository.h"
+#include "lcuidefs.h"
+#include "lcuiengine.h"
+#include "lcview.h"
+#include "lclogger.h"
+
+// SYSTEM INCLUDES
+#include <hbmainwindow.h>
+#include <hbdialog.h>
+#include <hbaction.h>
+#include <qcoreapplication.h>
+#include <hbactivitymanager.h>
+#include <hbapplication.h>
+#include <hbapplication.h>
+
+// CONSTANTS
+#define LC_VIEWMANAGER_SLOT_ACTIVATE_CURRENT_VIEW "activateCurrentView" 
+
+
+
+// -----------------------------------------------------------------------------
+// LcMainWindow::LcMainWindow
+// -----------------------------------------------------------------------------
+//
+LcMainWindow::LcMainWindow() : 
+    HbMainWindow(0, Hb::WindowFlagFixedHorizontal | Hb::WindowFlagTransparent)
+{
+    // TODO: remove flag WindowFlagFixedHorizontal if portait layout
+    // is going to be supported.
+    qApp->installEventFilter(this);
+}
+
+// -----------------------------------------------------------------------------
+// LcMainWindow::~LcMainWindow
+// -----------------------------------------------------------------------------
+//
+LcMainWindow::~LcMainWindow()
+{
+}
+
+// -----------------------------------------------------------------------------
+// LcMainWindow::eventFilter
+// -----------------------------------------------------------------------------
+//
+bool LcMainWindow::eventFilter ( QObject * watched, QEvent * event )
+{    
+    if ( event->type() == QEvent::ApplicationActivate ){
+        LC_QDEBUG( "livecomms [UI] -> LcMainWindow::eventFilter(), ApplicationActivate" )
+        emit appFocusGained();
+    } else if (( event->type() == QEvent::ApplicationDeactivate ) && 
+            ( !this->windowSurface()) ){
+        LC_QDEBUG( "livecomms [UI] -> LcMainWindow::eventFilter(), ApplicationDeactivate" )
+        emit appFocusLost();
+    }
+    return QObject::eventFilter(watched, event);
+}
+
+
+// -----------------------------------------------------------------------------
+// LcViewManagerPrivate::LcViewManagerPrivate
+// -----------------------------------------------------------------------------
+//
+LcViewManagerPrivate::LcViewManagerPrivate(
+    const QString& engineName,
+    const QString& applicationDisplayName) :
+    mEngine( 0 ),
+    mRepository( 0 )
+{
+    LC_QDEBUG( "livecomms [UI] -> LcViewManagerPrivate::LcViewManagerPrivate()" )
+    
+    mEngine = new LcUiEngine( engineName, applicationDisplayName );
+    mRepository = new LcUiComponentRepository( *mEngine );
+    setCurrentView( true );
+        
+    connect(&mMainWindow, SIGNAL(appFocusGained()), mEngine, SLOT(maximize()));
+    connect(&mMainWindow, SIGNAL(appFocusLost()), mEngine, SLOT(minimize()));
+    
+    LC_QDEBUG( "livecomms [UI] <- LcViewManagerPrivate::LcViewManagerPrivate()" )
+}
+
+// -----------------------------------------------------------------------------
+// LcViewManagerPrivate::~LcViewManagerPrivate
+// -----------------------------------------------------------------------------
+//
+LcViewManagerPrivate::~LcViewManagerPrivate()
+{
+    LC_QDEBUG( "livecomms [UI] -> LcViewManagerPrivate::~LcViewManagerPrivate()" )
+
+    delete mEngine;
+    QList<HbView *> views = mMainWindow.views();
+    foreach( HbView* view, views ){
+        mMainWindow.removeView(view);
+    }
+    delete mRepository;    
+
+    LC_QDEBUG( "livecomms [UI] <- LcViewManagerPrivate::~LcViewManagerPrivate()" ) 
+}
+
+// -----------------------------------------------------------------------------
+// LcViewManagerPrivate::terminateSession
+// -----------------------------------------------------------------------------
+//
+void LcViewManagerPrivate::terminateSession()
+{
+    LC_QDEBUG( "livecomms [UI] -> LcViewManagerPrivate::terminateSession" )
+    mEngine->stop(); 
+    LC_QDEBUG( "livecomms [UI] <- LcViewManagerPrivate::terminateSession" )
+}
+
+
+// -----------------------------------------------------------------------------
+// LcViewManagerPrivate::prepareOrientationChange
+// -----------------------------------------------------------------------------
+//
+void LcViewManagerPrivate::prepareOrientationChange()
+{
+    LC_QDEBUG( "livecomms [UI] -> LcViewManagerPrivate::prepareOrientationChange()" )
+    LC_QDEBUG( "livecomms [UI] <- LcViewManagerPrivate::prepareOrientationChange()" )
+}
+
+// -----------------------------------------------------------------------------
+// LcViewManagerPrivate::activateCurrentView
+// -----------------------------------------------------------------------------
+//
+void LcViewManagerPrivate::activateCurrentView(bool startup)
+{
+    LC_QDEBUG( "livecomms [UI] -> LcViewManagerPrivate::activateCurrentView()" )
+    if ( mMainWindow.currentView() ) {
+        static_cast<LcView*>( mMainWindow.currentView() )->activated();
+    }
+    
+    if ( startup ){
+        LC_QDEBUG( "livecomms [UI]  Start engine" )
+        startEngine();
+    }
+    LC_QDEBUG( "livecomms [UI] <- LcViewManagerPrivate::activateCurrentView()" )
+}
+
+// -----------------------------------------------------------------------------
+// LcViewManagerPrivate::startEngine
+// -----------------------------------------------------------------------------
+//
+void LcViewManagerPrivate::startEngine()
+{
+    connect(mEngine, SIGNAL(layoutChanged()), this, SLOT(changeView()), 
+        Qt::QueuedConnection );
+    connect(mEngine, SIGNAL(stopped()), this, SLOT(closeApp()), 
+        Qt::QueuedConnection );
+    
+    mEngine->setUiComponents( mRepository->invitingNote(), 
+                              mRepository->waitingNote(), 
+                              mRepository->acceptQuery(), 
+                              mRepository->recipientQuery(),
+                              mRepository->shareOwnVideoQuery() );    
+    mEngine->start();
+}
+
+// -----------------------------------------------------------------------------
+// LcViewManagerPrivate::setCurrentView
+// -----------------------------------------------------------------------------
+//
+void LcViewManagerPrivate::setCurrentView(bool startup)
+{
+    LC_QDEBUG( "livecomms [UI] -> LcViewManagerPrivate::setCurrentView()" )
+
+    LcView* currView = currentView();
+    
+    bool found(false);
+    foreach ( HbView* view, mMainWindow.views() ){
+        found |= ( view == currView );
+    }
+    if ( !found ){
+        mMainWindow.addView( currView );
+    }
+    mMainWindow.setCurrentView( currView );
+    
+    LcUtil::asyncSlotCall( 
+        this, LC_VIEWMANAGER_SLOT_ACTIVATE_CURRENT_VIEW, Q_ARG( bool, startup ) );
+    
+    LC_QDEBUG( "livecomms [UI] <- LcViewManagerPrivate::setCurrentView()" )
+}
+
+// -----------------------------------------------------------------------------
+// LcViewManagerPrivate::currentView
+// -----------------------------------------------------------------------------
+//
+LcView* LcViewManagerPrivate::currentView()
+{
+    LC_QDEBUG( "livecomms [UI] -> LcViewManagerPrivate::currentView()" )
+
+    LcViewLayoutHint hint = mEngine->viewLayout();
+    LcView* nextView = 0;
+    
+    switch ( hint ) {
+        case Lc_ReceivedViewLayout:
+            LC_QDEBUG( "livecomms [UI] - switching to receive view -" )
+            nextView = mRepository->receiveView();
+            break;
+        case Lc_ReceivedOnlyViewLayout:
+            LC_QDEBUG( "livecomms [UI] - switching to receive only view -" )
+            nextView = mRepository->receiveOnlyView();
+            break;
+        case Lc_AllInOneViewLayout:
+            LC_QDEBUG( "livecomms [UI] - switching to allinone view -" )
+            nextView = mRepository->allInOneView();
+            break;
+        case Lc_TwowayViewLayout:
+            LC_QDEBUG( "livecomms [UI] - switching to twoway view -" )
+            nextView = mRepository->twowayView();
+            break;
+        case Lc_SharedViewLayout:
+            LC_QDEBUG( "livecomms [UI] - switching to send view -" )
+            nextView = mRepository->sendView();
+            break;
+        default:
+            LC_QDEBUG( "livecomms [UI] - switching to idle view -" )
+            nextView = mRepository->idleView();
+            break;
+    }
+    if ( !nextView && hint > Lc_IdleViewLayout ) {
+        LC_QDEBUG( "livecomms [UI] ! could not get view !" )
+        LC_QDEBUG( "livecomms [UI] - switching to idle view -" )
+        nextView = mRepository->idleView();
+    }
+    
+    if ( !nextView ) {
+        LC_QCRITICAL( "livecomms [UI] ! still could not get view !. ABORT" )
+        LC_PANIC();
+    }
+    
+    LC_QDEBUG( "livecomms [UI] <- LcViewManagerPrivate::currentView()" )
+    return nextView;
+}
+
+// -----------------------------------------------------------------------------
+// LcViewManagerPrivate::changeView
+// -----------------------------------------------------------------------------
+//
+void LcViewManagerPrivate::changeView()
+{
+    LC_QDEBUG( "livecomms [UI] -> LcViewManagerPrivate::changeView()" )
+
+    LcView* currentView = static_cast<LcView*>( mMainWindow.currentView() );
+    currentView->deactivated();
+    setCurrentView();
+    
+    LC_QDEBUG( "livecomms [UI] <- LcViewManagerPrivate::changeView()" )
+}
+
+// -----------------------------------------------------------------------------
+// LcViewManagerPrivate::closeApp
+// -----------------------------------------------------------------------------
+//
+void LcViewManagerPrivate::closeApp()
+{
+    LC_QDEBUG( "livecomms [UI] -> LcViewManagerPrivate::closeApp()" )
+    
+    qApp->exit(0);
+    
+    LC_QDEBUG( "livecomms [UI] <- LcViewManagerPrivate::closeApp()" )
+}
+
+// End of file