/*
* 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 <hblabel.h>
#include <hbdialog.h>
#include <hbtransparentwindow.h>
#include <hbmessagebox.h>
#include <hbaction.h>
#include <hbmenu.h>
#include <hbpushbutton.h>
#include <hbtoolbar.h>
#include <hbinstance.h>
#include <hbzoomsliderpopup.h>
#include <hbeffect.h>
#include <qgraphicssceneevent.h>
#include <qtimer.h>
#include <hblineedit.h>
#include <dialpad.h>
#include <HbTapGesture>
#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<HbLabel*>( mRepository.findWidget( lcLabelRecipientId ) );
mDuration =
static_cast<HbLabel*>( mRepository.findWidget( lcLabelDurationId ) );
mContactIcon =
static_cast<HbLabel*>( mRepository.findWidget( lcIconContactId ) );
mBrandIcon =
static_cast<HbLabel*>( mRepository.findWidget( lcIconBrandId ) );
mSharedVideoWidget =
static_cast<LcVideoWidget*>(
mRepository.findWidget( lcWidgetSendVideoId ) );
mReceivedVideoWidget =
static_cast<LcVideoWidget*>(
mRepository.findWidget( lcWidgetRecvVideoId ) );
mChangeCameraAction =
static_cast<HbAction*>( mRepository.findObject( lcActChangeCameraId ) );
mMuteAction =
static_cast<HbAction*>( mRepository.findObject( lcActMuteId ) );
mSpeakerAction =
static_cast<HbAction*>( mRepository.findObject( lcActSpeakerId ) );
mDisableCameraAction =
static_cast<HbAction*>( mRepository.findObject( lcActDisableCameraId ) );
mDisableCameraMenuAction =
static_cast<HbAction*>( mRepository.findObject( lcActMenuDisableCameraId ) );
mEndCallButton =
static_cast<HbPushButton*>( mRepository.findObject( lcButtonEndCall ) );
if ( mEndCallButton ) {
connect( mEndCallButton, SIGNAL(clicked()), SLOT(endVideoSession()));
}
if ( mSharedVideoWidget ) {
mZoomSlider = mRepository.zoomSlider();
mSharedVideoEffectOverlay = static_cast<LcVideoWidget*>(
mRepository.findWidget( lcWidgetSendVideoId2 ) );
if ( mSharedVideoEffectOverlay ) {
mSharedVideoEffectOverlay->show();
}
}
mReceivedVideoEffectOverlay =
static_cast<LcVideoWidget*>( 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<HbTapGesture *>(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<HbAction*>(
mRepository.findObject(lcActSwapViewsId));
menu()->addAction(swapAction);
HbAction* openKeypadAction = static_cast<HbAction*>(
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<Dialpad*> ( 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