diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/src/lceffecthandler.cpp --- /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 +#include + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +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 +