mmsharing/livecommsui/lcui/src/lceffecthandler.cpp
branchRCL_3
changeset 22 73a1feb507fb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsharing/livecommsui/lcui/src/lceffecthandler.cpp	Tue Aug 31 15:12:07 2010 +0300
@@ -0,0 +1,379 @@
+/*
+* 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
+#include "lceffecthandler.h"
+#include "lclogger.h"
+#include "lcuidefs.h"
+#include "lcuiengine.h"
+
+//SYSTEM
+#include <hbinstance.h>
+#include <hbwidget.h>
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+LcEffectHandler::LcEffectHandler(LcUiEngine& engine,
+                                 HbWidget* sharedVideo, 
+                                 HbWidget* sharedVideoOverlay,
+                                 HbWidget* receivedVideo,
+                                 HbWidget* receivedVideoOverlay) :
+    mEngine(engine),
+    mSharedVideo(sharedVideo),
+    mSharedVideoOverlay(sharedVideoOverlay),
+    mReceivedVideo(receivedVideo),
+    mReceivedVideoOverlay(receivedVideoOverlay),
+    mSwapSharedCompleted(false),
+    mSwapReceivedCompleted(false),
+    mSwapInProgress(false)
+{
+    HbEffect::add(lcEffectWinId, lcEffectWinDisappear, lcEffectWinDisappearId );
+    HbEffect::add(lcEffectWinId, lcEffectWinAppear, lcEffectWinAppearId );
+    HbEffect::add(lcEffectWinId, lcEffectWinFlip, lcEffectWinFlipId );
+    HbEffect::add(lcEffectWinId, lcEffectWinSwapDown, lcEffectWinSwapDownId );
+    HbEffect::add(lcEffectWinId, lcEffectWinSwapUp, lcEffectWinSwapUpId );
+    
+    mEffectCallBack = lcEffectWinDefaultCallback;
+}
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+LcEffectHandler::~LcEffectHandler()
+{
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LcEffectHandler::setVisibility(HbWidget* widget, bool visible)
+{
+    if ( !HbEffect::effectRunning( widget )) {
+        widget->setVisible( visible );
+    }
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LcEffectHandler::setDissappearEffect( 
+        LcEffectHandler::DissapperEffect aEffectType )
+{
+    if ( aEffectType == LcEffectHandler::DissappearToFlip ) {
+        mEffectCallBack = "windowDisappearToFlipComplete";
+    } else if ( aEffectType == LcEffectHandler::NormalDissappear ) {
+        mEffectCallBack = "windowDisappearComplete"; 
+    } else {
+        mEffectCallBack = lcEffectWinDefaultCallback;
+    }
+}
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LcEffectHandler::showSendWindow()
+{
+    LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::showSendWindow()" )
+    if ( mSharedVideo ) {
+        if ( mSwapSharedCompleted || !HbEffect::effectRunning( mSharedVideoOverlay )) {
+            startEffect( mSharedVideoOverlay, 
+                         lcEffectWinAppearId, "windowAppearComplete" );
+                         
+            mSharedVideo->show();
+        } else {
+            LC_QDEBUG( "livecomms [UI] LcEffectHandler: postponed due ongoing animation" )        
+        }
+    }
+    LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::showSendWindow()" )
+}
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LcEffectHandler::showReceiveWindow()
+{
+    LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::showReceiveWindow()" )
+    if ( mReceivedVideo ) {
+        if ( mSwapReceivedCompleted || !HbEffect::effectRunning( mReceivedVideoOverlay )) {
+            startEffect( mReceivedVideoOverlay, 
+                         lcEffectWinAppearId, "windowAppearComplete" );
+            mReceivedVideo->show();
+        } else {
+            LC_QDEBUG( "livecomms [UI] LcEffectHandler: postponed due ongoing animation" )        
+        }
+    }
+   LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::showReceiveWindow()" )
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LcEffectHandler::hideSendWindow()
+{
+    LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::hideSendWindow()" )
+    if ( mSharedVideo && mSharedVideo->isVisible() ) {
+        startEffect( mSharedVideoOverlay, 
+                     lcEffectWinDisappearId, mEffectCallBack.toAscii().data() );
+        mSharedVideo->hide();
+    }
+
+    mEffectCallBack = lcEffectWinDefaultCallback;
+    LC_QDEBUG( "livecomms [UI] <- LcEffectHandlerLcEffectHandler::hideSendWindow()" )
+}
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LcEffectHandler::hideReceiveWindow()
+{
+    LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::hideReceiveWindow()" )
+    if ( mReceivedVideo && mReceivedVideo->isVisible() ) {
+        startEffect( mReceivedVideoOverlay, 
+                     lcEffectWinDisappearId, "windowDisappearComplete" );
+        mReceivedVideo->hide();
+    }
+
+   LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::hideReceiveWindow()" )
+}
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LcEffectHandler::swap()
+{
+    LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::swap()" )
+
+    // Emit the signal which triggers to loading of new swapped section
+    mSwapInProgress = true;
+    emit loadSwapLayout();
+
+    startEffects();
+    
+    LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::swap()" )
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LcEffectHandler::startEffects()
+{
+    if( mSharedVideo && mReceivedVideo ) {
+     
+         mSwapSharedCompleted = false;
+         mSwapReceivedCompleted = false;
+     
+         startEffect( mSharedVideoOverlay, lcEffectWinDisappearId, "windowSwapSharedComplete" );
+         startEffect( mReceivedVideoOverlay, lcEffectWinDisappearId, "windowSwapReceivedComplete" );
+             
+         mSharedVideo->hide();
+         mReceivedVideo->hide();
+     }
+    
+}    
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LcEffectHandler::startEffect( 
+    HbWidget* widget, const char *effectId, const char *callBack )
+{
+    LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::startEffect()" )
+    if( widget ) {
+        widget->setOpacity(1.0); // Previous effect might have set opacity to zero
+        widget->show();
+        LC_QDEBUG_2( "livecomms [UI] window: ",  widget->geometry() )
+        LC_QDEBUG_2( "livecomms [UI] effect name: ",  QString(effectId) )
+        HbEffect::start( widget, lcEffectWinId, effectId, this, callBack );
+    }
+    LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::startEffect()" )
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LcEffectHandler::windowAppearComplete(HbEffect::EffectStatus status)
+{
+    Q_UNUSED(status);
+    LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::windowAppearComplete()" )
+    
+    if ( status.item && status.item == mSharedVideoOverlay  && 
+         !HbEffect::effectRunning( mSharedVideoOverlay ) ) {
+        mSharedVideoOverlay->hide();
+                
+    }
+    if ( status.item && status.item == mReceivedVideoOverlay  && 
+         !HbEffect::effectRunning( mReceivedVideoOverlay ) ) {
+        mReceivedVideoOverlay->hide();
+                
+    }
+
+    LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::windowAppearComplete()" )
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LcEffectHandler::windowDisappearComplete(HbEffect::EffectStatus status)
+{
+    Q_UNUSED(status);
+    LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::windowDisappearComplete()" )
+    LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::windowDisappearComplete()" )
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LcEffectHandler::windowDisappearToFlipComplete(HbEffect::EffectStatus status)
+{
+    Q_UNUSED(status);
+    LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::windowDisappearToFlipComplete()" )
+    if( mSharedVideo ) {
+        mSharedVideo->hide();       
+        startEffect( mSharedVideoOverlay, lcEffectWinFlipId, "windowFlipComplete" );
+    }
+    LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::windowDisappearToFlipComplete()" )
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LcEffectHandler::windowFlipComplete(HbEffect::EffectStatus status)
+{
+    Q_UNUSED(status);
+    LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::flipHideComplete()" )
+    if( mEngine.isLocalPlayerPlaying() ) {
+        showSendWindow();
+    }
+    LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::flipHideComplete()" )
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LcEffectHandler::windowSwapSharedComplete(HbEffect::EffectStatus status)
+{
+    Q_UNUSED(status);
+    LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::windowSwapSharedComplete()" )
+    if( mSharedVideo ) {    
+        LC_QDEBUG_2( "livecomms [UI] window: ",  mSharedVideo->geometry() )
+        LC_QDEBUG_2( "livecomms [UI] effect window: ",  mSharedVideoOverlay->geometry() )
+        
+        mSwapSharedCompleted = true;
+        
+        handleSwapCompletion();
+    }
+    LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::windowSwapSharedComplete()" )
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LcEffectHandler::windowSwapReceivedComplete(HbEffect::EffectStatus status)
+{
+    Q_UNUSED(status);
+    LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::windowSwapReceivedComplete()" )
+    if( mReceivedVideo ) {    
+        LC_QDEBUG_2( "livecomms [UI] window: ",  mReceivedVideo->geometry() )
+        LC_QDEBUG_2( "livecomms [UI] effect window: ",  mReceivedVideoOverlay->geometry() )
+        
+        mSwapReceivedCompleted = true;
+        
+        handleSwapCompletion();
+    }
+    LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::windowSwapReceivedComplete()" )
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+bool LcEffectHandler::isSharedVideoAtTop() const
+{
+    return ( mSharedVideo && mReceivedVideo &&
+             mSharedVideo->geometry().top() < mReceivedVideo->geometry().top());
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+bool LcEffectHandler::videosSideBySide() const
+{
+     return ( mSharedVideo && mReceivedVideo &&
+              mSharedVideo->geometry().top() == mReceivedVideo->geometry().top() );
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LcEffectHandler::handleSwapCompletion()
+{
+    LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::handleSwapCompletion()" )
+    if ( mSwapSharedCompleted && mSwapReceivedCompleted ){
+        LC_QDEBUG( "livecomms [UI]  Both swaps done, complete" )
+        
+        emit swapCompleted();
+        
+        if( mEngine.isLocalPlayerPlaying() ) {
+            showSendWindow();
+        }
+        if( mEngine.isRemotePlayerPlaying() ) {
+            showReceiveWindow();
+        }
+
+    mSwapInProgress = false;
+    }
+    LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::handleSwapCompletion()" )
+}
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+bool LcEffectHandler::isSwapInProgress()
+{
+    return mSwapInProgress;
+}
+
+
+// End of file
+