diff -r ccd8e69b5392 -r 496ad160a278 mmsharing/livecommsui/lcui/src/lcview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/src/lcview.cpp Fri Jun 11 13:36:18 2010 +0300 @@ -0,0 +1,1208 @@ +/* +* 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 "lcview.h" +#include "lclogger.h" +#include "lcuiengine.h" +#include "lcuidefs.h" +#include "lcuicomponentrepository.h" +#include "lceffecthandler.h" +#include "lcvideowidget.h" + +//SYSTEM +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + + +#if ( defined __WINSCW__ ) || ( defined __WINS__ ) +const int inActivityTimeout = 5000; //5 secs +#else +const int inActivityTimeout = 2000; //2 secs +#endif + +// ----------------------------------------------------------------------------- +// LcView::LcView +// ----------------------------------------------------------------------------- +// +LcView::LcView(LcUiEngine& engine, LcUiComponentRepository& repository) + : HbView(0), + mEngine(engine), + mRepository(repository), + mRecipient(0), + mDuration(0), + mContactIcon(0), + mBrandIcon(0), + mSharedVideoWidget(0), + mReceivedVideoWidget(0), + mChangeCameraAction(0), + mMuteAction(0), + mSpeakerAction(0), + mDisableCameraAction(0), + mDisableCameraMenuAction(0), + mNotSupportedNote(0), + mZoomSlider(0), + mEndCallButton(0), + mReceivedVideoEffectOverlay(0), + mSharedVideoEffectOverlay(0), + mEffectHandler(0), + mItemContextMenu(0), + mLandscapeTimer(0), + mIsOptionMenuOpen(false), + mSoftKeyBackAction(0), + mDialpad(0) +{ + LC_QDEBUG( "livecomms [UI] -> LcView::LcView()" ) + + createNotSupportedNote(); + + // For LiveComms views Dock Wiget Item is explicitly hidden. + hideItems(Hb::DockWidgetItem); + + //Subscribe to the gesture events. + grabGesture(Qt::TapGesture); + + LC_QDEBUG( "livecomms [UI] <- LcView::LcView()" ) +} + + +// ----------------------------------------------------------------------------- +// LcView::~LcView +// ----------------------------------------------------------------------------- +// +LcView::~LcView() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::~LcView()" ) + + // Un-subscribe to the gesture events. + ungrabGesture(Qt::TapGesture); + + delete mEffectHandler; + delete mLandscapeTimer; + delete mNotSupportedNote; + + LC_QDEBUG( "livecomms [UI] <- LcView::~LcView()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::init +// ----------------------------------------------------------------------------- +// +void LcView::init() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::init()" ) + //find member widgets from repository + //( can be also found by browsing this view itself ) + + //due stubs in unit tests, qobject_cast cannot be used. Using static_cast instead + mRecipient = + static_cast( mRepository.findWidget( lcLabelRecipientId ) ); + mDuration = + static_cast( mRepository.findWidget( lcLabelDurationId ) ); + mContactIcon = + static_cast( mRepository.findWidget( lcIconContactId ) ); + mBrandIcon = + static_cast( mRepository.findWidget( lcIconBrandId ) ); + mSharedVideoWidget = + static_cast( + mRepository.findWidget( lcWidgetSendVideoId ) ); + mReceivedVideoWidget = + static_cast( + mRepository.findWidget( lcWidgetRecvVideoId ) ); + mChangeCameraAction = + static_cast( mRepository.findObject( lcActChangeCameraId ) ); + mMuteAction = + static_cast( mRepository.findObject( lcActMuteId ) ); + mSpeakerAction = + static_cast( mRepository.findObject( lcActSpeakerId ) ); + mDisableCameraAction = + static_cast( mRepository.findObject( lcActDisableCameraId ) ); + + mDisableCameraMenuAction = + static_cast( mRepository.findObject( lcActMenuDisableCameraId ) ); + + mEndCallButton = + static_cast( mRepository.findObject( lcButtonEndCall ) ); + + if ( mEndCallButton ) { + connect( mEndCallButton, SIGNAL(clicked()), SLOT(endVideoSession())); + } + + if ( mSharedVideoWidget ) { + mZoomSlider = mRepository.zoomSlider(); + mSharedVideoEffectOverlay = static_cast( + mRepository.findWidget( lcWidgetSendVideoId2 ) ); + if ( mSharedVideoEffectOverlay ) { + mSharedVideoEffectOverlay->show(); + } + } + + mReceivedVideoEffectOverlay = + static_cast( mRepository.findWidget( lcWidgetRecvVideoId2 ) ); + + if ( mReceivedVideoEffectOverlay ) { + mReceivedVideoEffectOverlay->show(); + } + + mEffectHandler = new LcEffectHandler( mEngine, + mSharedVideoWidget, mSharedVideoEffectOverlay, + mReceivedVideoWidget, mReceivedVideoEffectOverlay); + connect( mEffectHandler, SIGNAL(swapCompleted()), this, SLOT(updateVideoRects()) ); + + connect( mEffectHandler, SIGNAL(loadSwapLayout()), this, SLOT(updateSwapLayout()) ); + + mLandscapeTimer = new QTimer(); + connect( mLandscapeTimer, SIGNAL(timeout()), this, SLOT(landscapeTimerTimeout()) ); + + updateUiElements(); + + if ( menu()) { + connect( menu(), SIGNAL(aboutToShow()), this, SLOT(menuAboutToShow()) ); + connect( menu(), SIGNAL(aboutToHide()), this, SLOT(menuAboutToHide()) ); + } + + mSoftKeyBackAction = new HbAction(Hb::BackNaviAction, this); + connect(mSoftKeyBackAction, SIGNAL(triggered()), SLOT(back())); + + LC_QDEBUG( "livecomms [UI] <- LcView::init()" ) +} + + +// ----------------------------------------------------------------------------- +// LcView::updateVideoRects +// ----------------------------------------------------------------------------- +// +void LcView::updateVideoRects() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::updateVideoRects()" ) + + QRectF sharedContentRect; + QRectF receivedContentRect; + + if ( mSharedVideoWidget ) { + sharedContentRect = mSharedVideoWidget->geometry(); + sharedContentRect.moveTop( + sharedContentRect.y() + mapToParent(scenePos()).y()); + sharedContentRect = translateRectForOrientation(sharedContentRect); + mEffectHandler->setVisibility( + mSharedVideoWidget, mEngine.isLocalPlayerPlaying()); + } + + if ( mReceivedVideoWidget ) { + receivedContentRect = mReceivedVideoWidget->geometry(); + receivedContentRect.moveTop( + receivedContentRect.y() + mapToParent(scenePos()).y()); + receivedContentRect = translateRectForOrientation(receivedContentRect); + mEffectHandler->setVisibility( + mReceivedVideoWidget, mEngine.isRemotePlayerPlaying()); + } + + mEngine.setContentAreas( sharedContentRect, receivedContentRect ); + mEngine.setOrientation( HbInstance::instance()->allMainWindows().at(0)->orientation() ); + mEngine.updateSession(); + + LC_QDEBUG( "livecomms [UI] <- LcView::updateVideoRects()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::swap +// ----------------------------------------------------------------------------- +// +void LcView::swap() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::swap()" ) + if ( mEffectHandler ){ + mEffectHandler->swap(); + } + LC_QDEBUG( "livecomms [UI] <- LcView::swap()" ) +} + + +// ----------------------------------------------------------------------------- +// LcView::updateSwapLayout +// ----------------------------------------------------------------------------- +// + +void LcView::updateSwapLayout() +{ + mRepository.loadLayout( currentLayout() ); + + if ( isLandscapeOrientation() ){ + if ( mEngine.fullScreenMode() ){ + hideControl(); + } else { + showControl(); + } + } +} + +// ----------------------------------------------------------------------------- +// LcView::updateUiElements +// ----------------------------------------------------------------------------- +// +void LcView::updateUiElements() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::updateUiElements()" ) + + if ( isLandscapeOrientation() ) { + setContentFullScreen( true ); + deActivateFullScreen(); + } else { + setContentFullScreen( false ); + activatePortrait(); + } + LC_QDEBUG( "livecomms [UI] <- LcView::updateUiElements()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::activated +// ----------------------------------------------------------------------------- +// +void LcView::activated() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::activated()" ) + + if ( navigationAction() != mSoftKeyBackAction ) { + setNavigationAction(mSoftKeyBackAction); + } + + updateVideoRects(); + + //synchronize with engine + + if ( mEngine.mainCamera() ) { + setCameraActionToSecondary(); + } else { + setCameraActionToMain(); + } + + if ( mEngine.isMuted() ) { + setMuteActionToUnmute(); + } else { + setMuteActionToMute(); + } + + if ( mEngine.isSpeakerOn() ) { + setSpeakerActionToHandset(); + } else { + setSpeakerActionToSpeaker(); + } + + if ( mChangeCameraAction ) { + connect( + &mEngine, SIGNAL(cameraChangedToMain()), + this, SLOT(setCameraActionToSecondary()) ); + connect( + &mEngine, SIGNAL(cameraChangedToSecondary()), + this, SLOT(setCameraActionToMain())); + } + + if ( mMuteAction ) { + connect( + &mEngine, SIGNAL(muted()), + this, SLOT(setMuteActionToUnmute()) ); + connect( + &mEngine, SIGNAL(unmuted()), + this, SLOT(setMuteActionToMute())); + } + + if ( mSpeakerAction ) { + connect( &mEngine, SIGNAL(speakerEnabled()), + this, SLOT(setSpeakerActionToHandset()) ); + connect( &mEngine, SIGNAL(speakerDisabled()), + this, SLOT(setSpeakerActionToSpeaker()) ); + } + + if ( mDisableCameraAction ) { + connect( + &mEngine, SIGNAL(cameraDisabled()), + this, SLOT(setCameraActionToEnable()) ); + connect( + &mEngine, SIGNAL(cameraEnabled()), + this, SLOT(setCameraActionToDisable())); + } + + connect( &mEngine, SIGNAL(blocked()), this, SLOT(disableControls()) ); + connect( &mEngine, SIGNAL(unblocked()), this, SLOT(enableControls()) ); + + if ( mDuration ) { + // TODO: clearing is needed for label in order to + // get text changed. Seems like bug in orbit side. + // This causes that duration is not changed. Workaround + // would be to call clear always when duration changes. + mDuration->clear(); + connect( + &mEngine, SIGNAL(sessionDurationChanged(const QString &)), + mDuration, SLOT(setPlainText(const QString &)) ); + } + + if ( mRecipient ){ + mRecipient->clear(); + mRecipient->setPlainText( mEngine.recipient() ); + connect( + &mEngine, SIGNAL(recipientChanged(const QString &)), + mRecipient, SLOT(setPlainText(const QString &)) ); + } + + if ( mSharedVideoWidget ) { + connect( &mEngine, SIGNAL(localPlayerPlaying()), + mEffectHandler, SLOT(showSendWindow()) ); + connect( &mEngine, SIGNAL(localPlayerPaused()), + mEffectHandler, SLOT(hideSendWindow()) ); + } + + if ( mReceivedVideoWidget ) { + connect( &mEngine, SIGNAL(remotePlayerPlaying()), + mEffectHandler, SLOT(showReceiveWindow()) ); + connect( &mEngine, SIGNAL(remotePlayerPaused()), + mEffectHandler, SLOT(hideReceiveWindow()) ); + } + + mEngine.setCurrentView(this); + + LC_QDEBUG( "livecomms [UI] <- LcView::activated()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::deactivated +// ----------------------------------------------------------------------------- +// +void LcView::deactivated() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::deactivated()" ) + QRectF sharedContentRect;//null area + QRectF receivedContentRect;//null area + + mEngine.setContentAreas( sharedContentRect, receivedContentRect ); + disconnect( &mEngine, 0, this, 0 ); + + LC_QDEBUG( "livecomms [UI] <- LcView::deactivated()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::notSupported +// ----------------------------------------------------------------------------- +// +void LcView::notSupported() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::notSupported()" ) + + mNotSupportedNote->show(); + resetLandscapeTimer(); + + LC_QDEBUG( "livecomms [UI] <- LcView::notSupported()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::shareImage +// ----------------------------------------------------------------------------- +// +void LcView::shareImage() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::shareImage()" ) + const char localImageName[] = "c:\\data\\local.jpg"; + QString fileName = QString::fromAscii(localImageName); + mEngine.shareImage(fileName); + LC_QDEBUG( "livecomms [UI] <- LcView::shareImage()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::changeOrientation_Temporary +// ----------------------------------------------------------------------------- +// +void LcView::changeOrientation_Temporary() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::changeOrientation_Temporary()" ) + + if ( isLandscapeOrientation() ) { + HbInstance::instance()->allMainWindows().at(0)->setOrientation( Qt::Vertical ); + } else { + HbInstance::instance()->allMainWindows().at(0)->setOrientation( Qt::Horizontal ); + } + + LC_QDEBUG( "livecomms [UI] <- LcView::changeOrientation_Temporary()" ) +} + + +// ----------------------------------------------------------------------------- +// LcView::endVideoSession +// ----------------------------------------------------------------------------- +// +void LcView::endVideoSession() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::endVideoSession()" ) + + mEngine.stop(); + + LC_QDEBUG( "livecomms [UI] <- LcView::endVideoSession()" ) + +} + +// ----------------------------------------------------------------------------- +// LcView::disableCamera +// ----------------------------------------------------------------------------- +// +void LcView::disableCamera() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::disableCamera()" ) + + mEffectHandler->setDissappearEffect( LcEffectHandler::NormalDissappear ); + mEngine.toggleDisableCamera(); + resetLandscapeTimer(); + + LC_QDEBUG( "livecomms [UI] <- LcView::disableCamera()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::mute +// ----------------------------------------------------------------------------- +// +void LcView::mute() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::mute()" ) + + mEngine.toggleMute(); + resetLandscapeTimer(); + + LC_QDEBUG( "livecomms [UI] <- LcView::mute()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::changeCamera +// ----------------------------------------------------------------------------- +// +void LcView::changeCamera() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::changeCamera()" ) + + mEffectHandler->setDissappearEffect( LcEffectHandler::DissappearToFlip ); + mEngine.toggleCamera(); + resetLandscapeTimer(); + + LC_QDEBUG( "livecomms [UI] <- LcView::changeCamera()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::switchToVoiceCall +// ----------------------------------------------------------------------------- +// +void LcView::switchToVoiceCall() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::switchToVoiceCall()" ) + + mEngine.stop(); + + LC_QDEBUG( "livecomms [UI] <- LcView::switchToVoiceCall()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::speaker +// ----------------------------------------------------------------------------- +// +void LcView::speaker() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::speaker()" ) + + mEngine.toggleSpeaker(); + resetLandscapeTimer(); + + LC_QDEBUG( "livecomms [UI] <- LcView::speaker()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::showZoom +// ----------------------------------------------------------------------------- +// +void LcView::showZoom() +{ + LC_QDEBUG("livecomms [UI] -> LcView::showZoom()") + + if ( !mZoomSlider ) { + return; + } + + LcControlValues values; + mEngine.zoomValues(values); + LC_QDEBUG_2("livecomms [UI] MinValue: ", values.mMinValue) + LC_QDEBUG_2("livecomms [UI] MaxValue: ", values.mMaxValue) + LC_QDEBUG_2("livecomms [UI] CurrentValue: ", values.mValue) + + mZoomSlider->setRange(values.mMinValue, values.mMaxValue); + mZoomSlider->setValue(values.mValue); + mZoomSlider->setSingleStep(1); + mZoomSlider->setVisible(true); + + LC_QDEBUG("livecomms [UI] <- LcView::showZoom()") +} + +// ----------------------------------------------------------------------------- +// LcView::setCameraActionToMain +// ----------------------------------------------------------------------------- +// +void LcView::setCameraActionToMain() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::setCameraActionToMain()" ) + + if ( mChangeCameraAction ){ + mChangeCameraAction->setIcon (HbIcon( lcIconNameMainCamera )); + } + LC_QDEBUG( "livecomms [UI] <- LcView::setCameraActionToMain()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::setCameraActionToSecondary +// ----------------------------------------------------------------------------- +// +void LcView::setCameraActionToSecondary() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::setCameraActionToSecondary()" ) + + if ( mChangeCameraAction ){ + mChangeCameraAction->setIcon (HbIcon( lcIconNameSecondaryCamera )); + } + LC_QDEBUG( "livecomms [UI] <- LcView::setCameraActionToSecondary()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::setMuteActionToUnmute +// ----------------------------------------------------------------------------- +// +void LcView::setMuteActionToUnmute() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::setMuteActionToUnmute()" ) + + if ( mMuteAction ){ + mMuteAction->setIcon (HbIcon( lcIconNameUnmuteMic )); + } + LC_QDEBUG( "livecomms [UI] <- LcView::setMuteActionToUnmute()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::setMuteActionToMute +// ----------------------------------------------------------------------------- +// +void LcView::setMuteActionToMute() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::setMuteActionToMute()" ) + if ( mMuteAction ){ + mMuteAction->setIcon (HbIcon( lcIconNameMuteMic )); + } + LC_QDEBUG( "livecomms [UI] <- LcView::setMuteActionToMute()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::setSpeakerActionToHandset +// ----------------------------------------------------------------------------- +// +void LcView::setSpeakerActionToHandset() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::setSpeakerActionToHandset()" ) + if ( mSpeakerAction ){ + mSpeakerAction->setIcon (HbIcon( lcIconNameHandset )); + } + LC_QDEBUG( "livecomms [UI] <- LcView::setSpeakerActionToHandset()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::setSpeakerActionToSpeaker +// ----------------------------------------------------------------------------- +// +void LcView::setSpeakerActionToSpeaker() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::setSpeakerActionToSpeaker()" ) + if ( mSpeakerAction ){ + mSpeakerAction->setIcon( HbIcon( lcIconNameLoudspeaker )); + } + LC_QDEBUG( "livecomms [UI] <- LcView::setSpeakerActionToSpeaker()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::setCameraActionToEnable +// ----------------------------------------------------------------------------- +// +void LcView::setCameraActionToEnable() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::setCameraActionToEnable()" ) + + if ( mDisableCameraAction ){ + mDisableCameraAction->setIcon( HbIcon( lcIconNameEnableCamera )); + } + if ( mDisableCameraMenuAction ){ + // TODO: get text from repository as loc id is not the same for mus + mDisableCameraMenuAction->setText( hbTrId( "txt_vt_menu_enable_camera" )); + } + + LC_QDEBUG( "livecomms [UI] <- LcView::setCameraActionToEnable()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::setCameraActionToDisable +// ----------------------------------------------------------------------------- +// +void LcView::setCameraActionToDisable() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::setCameraActionToDisable()" ) + + if ( mDisableCameraAction ){ + mDisableCameraAction->setIcon (HbIcon( lcIconNameDisableCamera )); + } + if ( mDisableCameraMenuAction ){ + // TODO: get text from repository as loc id is not the same for mus + mDisableCameraMenuAction->setText( hbTrId( "txt_vt_menu_disable_camera" )); + } + + LC_QDEBUG( "livecomms [UI] <- LcView::setCameraActionToDisable()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::disableControls +// ----------------------------------------------------------------------------- +// +void LcView::disableControls() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::disableControls()" ) + menu()->setEnabled( false ); + toolBar()->setEnabled( false ); + LC_QDEBUG( "livecomms [UI] <- LcView::disableControls()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::enableControls +// ----------------------------------------------------------------------------- +// +void LcView::enableControls() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::enableControls()" ) + menu()->setEnabled( true ); + toolBar()->setEnabled( true ); + LC_QDEBUG( "livecomms [UI] <- LcView::enableControls()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::gestureEvent +// ----------------------------------------------------------------------------- +// +void LcView::gestureEvent(QGestureEvent *event) +{ + LC_QDEBUG( "livecomms [UI] -> LcView::gestureEvent()" ) + if(HbTapGesture *tap = static_cast(event->gesture(Qt::TapGesture))) { + + if ((tap->state() == Qt::GestureUpdated) && + (tap->tapStyleHint() == HbTapGesture::TapAndHold)) { + + gestureLongPress(translatePointForOrientation(tap->position())); + } + + else if ( (tap->state() == Qt::GestureFinished ) && + ( tap->tapStyleHint() == HbTapGesture::Tap)) { + + gestureShortPress(); + } + } + LC_QDEBUG( "livecomms [UI] <- LcView::gestureEvent()" ) +} + + +// ----------------------------------------------------------------------------- +// LcView::gestureLongPress +// ----------------------------------------------------------------------------- +// +void LcView::gestureLongPress(QPointF coords) +{ + LC_QDEBUG_2( "livecomms [UI] -> LcView::gestureLongPress(), coords:", coords ) + + bool sharedHit = false; + + if ( mSharedVideoWidget && mSharedVideoWidget->windowFrameGeometry().contains(coords) ) { + LC_QDEBUG( "livecomms [UI] LcView mapped to mSharedVideoWidget" ) + sharedHit = true; + } + + if ( sharedHit ) { + LC_QDEBUG( "livecomms [UI] LcView mapped to mSharedVideoWidget" ) + + createContextMenu(); + mRepository.sharedVideoContextMenuActions( mItemContextMenu, *this ); + + if ( mItemContextMenu->actions().count() > 0 ) { + mItemContextMenu->open(this); + } + } + + LC_QDEBUG( "livecomms [UI] <- LcView::gestureLongPress()" ) +} + + + +// ----------------------------------------------------------------------------- +// LcView::gestureShortPress +// ----------------------------------------------------------------------------- +// +void LcView::gestureShortPress() +{ + if ( isLandscapeOrientation() ) { + if ( mEngine.fullScreenMode() ) { + deActivateFullScreen(); + } else { + activateFullScreen(); + } + } +} + + +// ----------------------------------------------------------------------------- +// LcView::landscapeTimerTimeout +// ----------------------------------------------------------------------------- +// +void LcView::landscapeTimerTimeout() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::landscapeTimerTimeout()" ) + if (!mIsOptionMenuOpen && isLandscapeOrientation() ) + activateFullScreen(); + LC_QDEBUG( "livecomms [UI] <- LcView::landscapeTimerTimeout()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::createNotSupportedNote +// ----------------------------------------------------------------------------- +// +void LcView::createNotSupportedNote() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::createNotSupportedNote()" ) + + if ( !mNotSupportedNote ){ + mNotSupportedNote = new HbMessageBox(QString("Not supported")); + mNotSupportedNote->setTimeout(HbDialog::StandardTimeout); + mNotSupportedNote->setZValue(LC_NOTE_ON_TOP); + mNotSupportedNote->hide(); + } + + LC_QDEBUG( "livecomms [UI] <- LcView::createNotSupportedNote()" ) +} + + + +// ----------------------------------------------------------------------------- +// LcView::createContextMenu +// ----------------------------------------------------------------------------- +// +void LcView::createContextMenu() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::createContextMenu()" ) + + // mItemContextMenu is destroyed upon close + mItemContextMenu = new HbMenu(); + mItemContextMenu->setDismissPolicy(HbDialog::TapOutside); + mItemContextMenu->setTimeout(HbDialog::ContextMenuTimeout); + mItemContextMenu->setAttribute(Qt::WA_DeleteOnClose); + + LC_QDEBUG( "livecomms [UI] <- LcView::createContextMenu()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::activateFullScreen +// ----------------------------------------------------------------------------- +// +void LcView::activateFullScreen() + { + LC_QDEBUG( "livecomms [UI] -> LcView::activateFullScreen()" ) + + if ( mLandscapeTimer ) { + mLandscapeTimer->stop(); + mEngine.setFullScreenMode(true); + hideControl(); + } + + LC_QDEBUG( "livecomms [UI] <- LcView::activateFullScreen()" ) +} + + +// ----------------------------------------------------------------------------- +// LcView::deActivateFullScreen +// ----------------------------------------------------------------------------- +// +void LcView::deActivateFullScreen() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::deActivateFullScreen()" ) + + if ( mLandscapeTimer ) { + mLandscapeTimer->stop(); + + mEngine.setFullScreenMode(false); + + showControl(); + mLandscapeTimer->start( inActivityTimeout ); + } + LC_QDEBUG( "livecomms [UI] <- LcView::deActivateFullScreen()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::activateFullScreen +// ----------------------------------------------------------------------------- +// +void LcView::activatePortrait() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::activatePortrait()" ) + + if ( mLandscapeTimer ) { + mLandscapeTimer->stop(); + mEngine.setFullScreenMode(false); + showControl(); + } + + LC_QDEBUG( "livecomms [UI] <- LcView::activatePortrait()" ) +} + + +// ----------------------------------------------------------------------------- +// LcView::hideControl +// ----------------------------------------------------------------------------- +// +void LcView::hideControl() +{ + if( mDialpad && mDialpad->isOpen()) { + return; + } + toolBar()->hide(); + setTitleBarVisible(false); + setVisibility(mEndCallButton, false); + setVisibility(mBrandIcon, false); + setVisibility(mDuration, false); + setVisibility(mRecipient, false); +} + + +// ----------------------------------------------------------------------------- +// LcView::showControl +// ----------------------------------------------------------------------------- +// +void LcView::showControl() +{ + if( mDialpad && mDialpad->isOpen()) { + return; + } + setTitleBarVisible(true); + toolBar()->show(); + setVisibility(mEndCallButton, true); + setVisibility(mBrandIcon, true); + setVisibility(mDuration, true); + setVisibility(mRecipient, true); +} + + +// ----------------------------------------------------------------------------- +// LcView::currentLayout +// ----------------------------------------------------------------------------- +// +QString LcView::currentLayout() +{ + QString layout( lcLayoutPortraitDefaultId ); + + if ( !isLandscapeOrientation() ) { + if ( mEffectHandler->isSwapInProgress() && + mSharedVideoWidget && + mReceivedVideoWidget && + mSharedVideoWidget->geometry().top() > mReceivedVideoWidget->geometry().top() ) { + + layout = lcLayoutPortraitSwappedId; + } else { + layout = lcLayoutPortraitDefaultId; + } + } else { + if ( mEffectHandler->isSwapInProgress() && + mSharedVideoWidget && + mReceivedVideoWidget && + mSharedVideoWidget->geometry().left() > mReceivedVideoWidget->geometry().left() ) { + + layout = lcLayoutLandscapeSwappedId; + } else { + layout = lcLayoutLandscapeDefaultId; + } + } + LC_QDEBUG_2( "livecomms [UI] -> LcView::currentLayout()", layout ) + return layout; +} + + +// ----------------------------------------------------------------------------- +// LcView::menuAboutToShow +// ----------------------------------------------------------------------------- +// +void LcView::menuAboutToShow() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::menuAboutToShow()" ) + mIsOptionMenuOpen = true; + if( mLandscapeTimer ){ + mLandscapeTimer->stop(); + } + LC_QDEBUG( "livecomms [UI] <- LcView::menuAboutToShow()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::menuAboutToHide +// ----------------------------------------------------------------------------- +// +void LcView::menuAboutToHide() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::menuAboutToHide()" ) + mIsOptionMenuOpen = false; + if( mLandscapeTimer ){ + mLandscapeTimer->start( inActivityTimeout ); + } + LC_QDEBUG( "livecomms [UI] <- LcView::menuAboutToHide()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::isLandscapeOrientation +// ----------------------------------------------------------------------------- +// +bool LcView::isLandscapeOrientation() +{ + return ( !HbInstance::instance()->allMainWindows().isEmpty() && + HbInstance::instance()->allMainWindows().at(0)->orientation() == Qt::Horizontal ); +} + +// ----------------------------------------------------------------------------- +// LcView::translateRectForOrientation +// Video windows at engine side do not change their coordinate system +// when orientation at orbit UI changes. Therefore we need to convert video +// rects from landscape coordinate system to portait coordinate system. +// NOTE: Landscape orientation has different rotation in emulator than in HW. +// ----------------------------------------------------------------------------- +// +QRectF LcView::translateRectForOrientation(const QRectF& origRect) +{ + if ( !isLandscapeOrientation() ){ + return origRect; + } + QRectF newRect = origRect; + QMatrix m; +#if ( defined __WINSCW__ ) || ( defined __WINS__ ) + m.rotate(270); + newRect = m.mapRect(newRect); + newRect.translate(0,HbInstance::instance()->allMainWindows().at(0)->rect().height()); +#else + m.rotate(90); + newRect = m.mapRect(newRect); + newRect.translate(HbInstance::instance()->allMainWindows().at(0)->rect().width(),0); +#endif + return newRect; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +QPointF LcView::translatePointForOrientation(const QPointF& origPoint) +{ + if ( !isLandscapeOrientation() ) { + return origPoint; + } + QPointF newPoint = origPoint; + QMatrix m; +#if ( defined __WINSCW__ ) || ( defined __WINS__ ) + m.translate(HbInstance::instance()->allMainWindows().at(0)->rect().height(),0); + m.rotate(90); + newPoint = m.map(newPoint); +#else + m.translate(0,HbInstance::instance()->allMainWindows().at(0)->rect().width()); + m.rotate(270); + newPoint = m.map(newPoint); +#endif + return newPoint; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcView::setVisibility( QGraphicsItem* item, bool visible ) +{ + if ( item ) { + item->setVisible(visible); + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcView::resetLandscapeTimer() +{ + if ( mLandscapeTimer && mLandscapeTimer->isActive() ) { + mLandscapeTimer->stop(); + mLandscapeTimer->start( inActivityTimeout ); + } +} + +void LcView::addOptionsMenuActions() +{ + HbAction* swapAction = static_cast( + mRepository.findObject(lcActSwapViewsId)); + menu()->addAction(swapAction); + + HbAction* openKeypadAction = static_cast( + mRepository.findObject(lcActOpenKeypadId)); + menu()->addAction(openKeypadAction); +} + +// ----------------------------------------------------------------------------- +// LcView::openDialpad() +// ----------------------------------------------------------------------------- +// +void LcView::openDialpad() +{ + LC_QDEBUG("livecomms [UI] -> LcView::openDialpad()") + // stop the auto full screen timer. + if( mLandscapeTimer ){ + mLandscapeTimer->stop(); + } + mEngine.setFullScreenMode( false ); + + // load dialpad layout + mRepository.loadLayout( lcLayoutLandscapeDialpadId ); + updateVideoRects(); + + // construct dialpad and connect signals. + mDialpad = static_cast ( mRepository.findWidget("lc_label_dialpad") ); + connect( mDialpad, SIGNAL(aboutToClose()), SLOT(dialpadClosed()) ); + connect( mDialpad, SIGNAL(aboutToOpen()), SLOT(dialpadOpened()) ); + connect( &mDialpad->editor(), SIGNAL( contentsChanged() ), this, + SLOT( dialpadEditorTextChanged() ) ); + // open dialpad + mDialpad->openDialpad(); + + menu()->clearActions(); + + if ( mEffectHandler ){ + mEffectHandler->startEffects(); + } + LC_QDEBUG("livecomms [UI] <- LcView::openDialpad()") +} + +// ----------------------------------------------------------------------------- +// LcView::dialpadOpened() +// ----------------------------------------------------------------------------- +// +void LcView::dialpadOpened() +{ + LC_QDEBUG("livecomms [UI] <-> LcView::dialpadOpened()") +} + +// ----------------------------------------------------------------------------- +// LcView::dialpadClosed() +// ----------------------------------------------------------------------------- +// +void LcView::dialpadClosed() +{ + LC_QDEBUG("livecomms [UI] -> LcView::dialpadClosed()") + disconnect( &mDialpad->editor(), SIGNAL( contentsChanged() ), this, + SLOT( dialpadEditorTextChanged() ) ); + disconnect( mDialpad, SIGNAL(aboutToClose()), this, SLOT(dialpadClosed()) ); + disconnect( mDialpad, SIGNAL(aboutToOpen()), this, SLOT(dialpadOpened()) ); + + mDialpad = 0; // do not delete it since it is not owned. + + addOptionsMenuActions(); + + // switch back to the previous layout + QString pLayout = mRepository.previousLayout(); + QString layout; + bool isSwapped = ( pLayout == lcLayoutPortraitDefaultId || + pLayout == lcLayoutLandscapeDefaultId ) + ? false : true; + // take care orientation changes + bool isLandscape = isLandscapeOrientation(); + if ( isLandscape ){ + layout = ( isSwapped ) ? lcLayoutLandscapeSwappedId + : lcLayoutLandscapeDefaultId; + + } + else { + layout = ( isSwapped ) ? lcLayoutPortraitSwappedId + : lcLayoutPortraitDefaultId; + } + // load the layout + mRepository.loadLayout( layout ); + // update the videoplayer hole + updateVideoRects(); + // now do some effects + if ( mEffectHandler ){ + mEffectHandler->startEffects(); + } + // deactivate full screen untill inactivity timeout happens. + if ( isLandscape ){ + deActivateFullScreen(); + } + + LC_QDEBUG("livecomms [UI] <- LcView::dialpadClosed()") +} + +// ----------------------------------------------------------------------------- +// LcView::dialpadEditorTextChanged() +// ----------------------------------------------------------------------------- +// +void LcView::dialpadEditorTextChanged() +{ + LC_QDEBUG_2("livecomms [UI] -> Dial Pad Field ", mDialpad->editor().text()); + LC_QDEBUG_2("livecomms [UI] -> Last Dialled Charcter ", mDialpad->editor().text().right(1)); + bool dialPadStatus = mEngine.SendDialTone(mDialpad->editor().text().right(1).at(0)); + LC_QDEBUG_2("livecomms [UI] -> Dialpad Send Tone Status ",dialPadStatus) +} + +// ----------------------------------------------------------------------------- +// LcView::enableDialpadCallButton() +// ----------------------------------------------------------------------------- +// +void LcView::enableDialpadCallButton( bool enable ) +{ + LC_QDEBUG_2("livecomms [UI] -> Enable callbutton, emergency call ",enable) + mDialpad->setCallButtonEnabled( enable ); +} + +// ----------------------------------------------------------------------------- +// LcView::back +// ----------------------------------------------------------------------------- +// +void LcView::back() +{ + LC_QDEBUG("livecomms [UI] -> LcView::back()") + if ( mDialpad && mDialpad->isOpen()) { + LC_QDEBUG("livecomms [UI] - Closing dialpad") + mDialpad->closeDialpad(); + } else { + mEngine.minimize(); + } + + LC_QDEBUG("livecomms [UI] <- LcView::back()") +} + +// End of file