diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/src/lcuicomponentrepository.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/src/lcuicomponentrepository.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,589 @@ +/* +* 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 "lcuicomponentrepository.h" +#include "lcview.h" +#include "lcuidefs.h" +#include "lclogger.h" +#include "lcuiengine.h" +#include "lcvideowidget.h" + +//SYSTEM +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::LcUiComponentRepository +// ----------------------------------------------------------------------------- +// +LcUiComponentRepository::LcUiComponentRepository(LcUiEngine& engine) + : HbDocumentLoader(), + mEngine(engine), + mSlots(0), + mIdleView(0), + mReceiveView(0), + mSendView(0), + mTwowayView(0), + mAllInOneView(0), + mReceiveOnlyView(0), + mAcceptQuery(0), + mInvitingNote(0), + mWaitingNote(0), + mRecipientQuery(0), + mShareOwnVideoQuery(0) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::LcUiComponentRepository()" ) + + mSlots = new QHash; + mSlots->insert( lcActFullscreenId, SLOT( notSupported() ) ); + mSlots->insert( lcActVideopreferenceId, SLOT( notSupported() ) ); + mSlots->insert( lcActDialerId, SLOT( notSupported() ) ); + mSlots->insert( lcActEndactivecallId, SLOT( notSupported() ) ); + mSlots->insert( lcActStopSharingId, SLOT( endVideoSession() ) ); + mSlots->insert( lcActEnableCameraId, SLOT( disableCamera() ) ); + mSlots->insert( lcActMuteId, SLOT( mute() ) ); + mSlots->insert( lcActGalleryId, SLOT( notSupported() ) ); + mSlots->insert( lcActChangeCameraId, SLOT( changeCamera() ) ); + mSlots->insert( lcActAdjustVideoId, SLOT( notSupported() ) ); + mSlots->insert( lcActShareImageId, SLOT( notSupported() ) ); + mSlots->insert( lcActSwapViewsId, SLOT( swap() ) ); + mSlots->insert( lcActSwitchToVoiceCallId, SLOT( switchToVoiceCall() ) ); + mSlots->insert( lcActOpenKeypadId, SLOT( openDialpad() ) ); + mSlots->insert( lcActDisableCameraId, SLOT( disableCamera() ) ); + mSlots->insert( lcActSpeakerId, SLOT( speaker() ) ); + + mSlots->insert( lcActMenuDisableCameraId, SLOT( disableCamera() ) ); + mSlots->insert( lcActMenuChangeCameraId, SLOT( changeCamera() ) ); + + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::LcUiComponentRepository()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::~LcUiComponentRepository +// ----------------------------------------------------------------------------- +// +LcUiComponentRepository::~LcUiComponentRepository() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::~LcUiComponentRepository()" ) + + delete mSlots; + + mIdleViewComponents.clear(); + mReceiveViewComponents.clear(); + mSendViewComponents.clear(); + mTwowayViewComponents.clear(); + mAllInOneViewComponents.clear(); + mReceiveOnlyViewComponents.clear(); + + delete mAcceptQuery; + delete mInvitingNote; + delete mWaitingNote; + delete mRecipientQuery; + delete mShareOwnVideoQuery; + + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::~LcUiComponentRepository()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::createObject +// ----------------------------------------------------------------------------- +// +QObject* LcUiComponentRepository::createObject( + const QString& type, const QString &name) +{ + QObject* object = 0; + + if ( type == lcLcViewTypeName || + name == lcViewIdleId || + name == lcViewReceiveId || + name == lcViewReceiveOnlyId || + name == lcViewAllInOneId || + name == lcViewSendId || + name == lcViewTwowayId ) { + LC_QDEBUG_2( "-> LcUiComponentRepository::createObject() ", + "- creating LcView -" ) + object = new LcView( mEngine, *this ); + } + else if ( name == lcWidgetSendVideoId ) { + LC_QDEBUG_2( "-> LcUiComponentRepository::createObject() ", + "- creating shared video widget -" ) + object = new LcVideoWidget(); + static_cast(object)->setLocalPlayer(true); + } + else if ( name == lcWidgetSendVideoId2 ) { + LC_QDEBUG_2( "-> LcUiComponentRepository::createObject() ", + "- creating shared video widget effect overlay -" ) + object = new LcVideoWidget(0, false); + static_cast(object)->setLocalPlayer(true); + } + else if ( name == lcWidgetRecvVideoId ) { + LC_QDEBUG_2( "-> LcUiComponentRepository::createObject() ", + "- creating received video widget -" ) + object = new LcVideoWidget(); + static_cast(object)->setLocalPlayer(false); + + } + else if ( name == lcWidgetRecvVideoId2 ) { + LC_QDEBUG_2( "-> LcUiComponentRepository::createObject() ", + "- creating received video widget effect overlay -" ) + object = new LcVideoWidget(0, false); + static_cast(object)->setLocalPlayer(false); + } + else if ( name == lcButtonEndCall ){ + object = HbDocumentLoader::createObject( type, name ); + HbFrameDrawer*frameDrawer = new HbFrameDrawer("qtg_fr_btn_red_normal",HbFrameDrawer::NinePieces); + static_cast(object)->setFrameBackground(frameDrawer); + HbStyleLoader::registerFilePath(":/hbpushbutton_color.css"); + } + else if ( name == lcWidgetDialpad ){ + HbMainWindow* pWindow = HbInstance::instance()->allMainWindows().at(0); + if( pWindow ){ + object = new Dialpad( *pWindow ); + } + } + else { + object = HbDocumentLoader::createObject( type, name ); + } + if (object) { + object->setObjectName(name); + } + + LC_QDEBUG_2( "livecomms [UI] <- LcUiComponentRepository::createObject(), name=", name ) + + return object; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::idleView +// ----------------------------------------------------------------------------- +// +LcView* LcUiComponentRepository::idleView() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::idleView()" ); + + reset(); + setObjectTree( mIdleViewComponents ); + + if ( !mIdleView ) { + mIdleView = loadView( + mIdleViewComponents, lcViewIdleId, lcIdleViewFile ); + } + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::idleView()" ); + return mIdleView; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::receiveView +// ----------------------------------------------------------------------------- +// +LcView* LcUiComponentRepository::receiveView() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::receiveView()" ); + + reset(); + setObjectTree( mReceiveViewComponents ); + if ( !mReceiveView ) { + mReceiveView = loadView( + mReceiveViewComponents, lcViewReceiveId, lcReceiveViewFile ); + } + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::receiveView()" ); + return mReceiveView; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::receiveOnlyView +// ----------------------------------------------------------------------------- +// +LcView* LcUiComponentRepository::receiveOnlyView() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::receiveOnlyView()" ); + + reset(); + setObjectTree( mReceiveOnlyViewComponents ); + if ( !mReceiveOnlyView ) { + mReceiveOnlyView = loadView( + mReceiveOnlyViewComponents, lcViewReceiveOnlyId, lcReceiveOnlyViewFile ); + } + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::receiveOnlyView()" ); + return mReceiveOnlyView; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::twowayView +// ----------------------------------------------------------------------------- +// +LcView* LcUiComponentRepository::twowayView() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::twowayView()" ); + + reset(); + setObjectTree( mTwowayViewComponents ); + if ( !mTwowayView ) { + mTwowayView = loadView( + mTwowayViewComponents, lcViewTwowayId, lcTwowayViewFile ); + } + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::twowayView()" ); + return mTwowayView; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::sendView +// ----------------------------------------------------------------------------- +// +LcView* LcUiComponentRepository::sendView() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::sendView()" ); + + reset(); + setObjectTree( mSendViewComponents ); + if ( !mSendView ) { + mSendView = + loadView( mSendViewComponents, lcViewSendId, lcSendViewFile ); + } + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::sendView()" ); + return mSendView; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::allInOneView +// ----------------------------------------------------------------------------- +// +LcView* LcUiComponentRepository::allInOneView() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::allInOneView()" ); + + reset(); + setObjectTree( mAllInOneViewComponents ); + if ( !mAllInOneView ) { + mAllInOneView = loadView( + mAllInOneViewComponents, lcViewAllInOneId, lcAllInOneViewFile ); + } + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::allInOneView()" ); + return mAllInOneView; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::acceptQuery +// ----------------------------------------------------------------------------- +// +HbDialog* LcUiComponentRepository::acceptQuery() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::acceptQuery()" ); + + if ( !mAcceptQuery ) { + mAcceptQuery = new HbDialog(); + HbAction* acceptAction = new HbAction( LC_OK ); + HbAction* rejectAction = new HbAction( LC_CANCEL ); + mAcceptQuery->addAction(acceptAction); + mAcceptQuery->addAction(rejectAction); + mAcceptQuery->setVisible(false); + HbLabel* label = new HbLabel( LC_ACCEPT_SESSION ); + mAcceptQuery->setHeadingWidget(label); + HbLabel* label2 = new HbLabel(); + mAcceptQuery->setContentWidget(label2); + mAcceptQuery->setTimeout(0); + mAcceptQuery->setDismissPolicy(HbDialog::NoDismiss); + } + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::acceptQuery()" ); + return mAcceptQuery; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::invitingNote +// ----------------------------------------------------------------------------- +// +HbProgressDialog* LcUiComponentRepository::invitingNote() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::invitingNote()" ); + + if ( !mInvitingNote ) { + mInvitingNote = new HbProgressDialog(); + mInvitingNote->setVisible(false); + mInvitingNote->setText( LC_INVITING ); + HbAction* rejectAction = new HbAction( LC_CANCEL ); + mInvitingNote->addAction(rejectAction); + } + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::invitingNote()" ); + return mInvitingNote; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::waitingNote +// ----------------------------------------------------------------------------- +// +HbProgressDialog* LcUiComponentRepository::waitingNote() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::waitingNote()" ); + + if ( !mWaitingNote ) { + mWaitingNote = new HbProgressDialog(); + mWaitingNote->setVisible(false); + HbAction* rejectAction = new HbAction( LC_CANCEL ); + mWaitingNote->addAction(rejectAction); + mWaitingNote->setText( LC_WAITING_VIDEO ); + } + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::waitingNote()" ); + return mWaitingNote; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::recipientQuery +// ----------------------------------------------------------------------------- +// +HbDialog* LcUiComponentRepository::recipientQuery() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::recipientQuery()" ); + + if ( !mRecipientQuery ) { + mRecipientQuery = new HbDialog(); + HbLabel* label = new HbLabel( LC_RECIPIENT_QUERY ); + mRecipientQuery->setHeadingWidget(label); + mRecipientQuery->setTimeout(HbDialog::NoTimeout); + mRecipientQuery->setDismissPolicy(HbDialog::TapOutside); + HbAction* acceptAction = new HbAction( LC_OK ); + HbAction* rejectAction = new HbAction( LC_CANCEL ); + mRecipientQuery->addAction(acceptAction); + mRecipientQuery->addAction(rejectAction); + mRecipientQuery->setVisible(false); + } + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::recipientQuery()" ); + return mRecipientQuery; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::shareOwnVideoQuery +// ----------------------------------------------------------------------------- +// +HbDialog* LcUiComponentRepository::shareOwnVideoQuery() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::shareOwnVideoQuery()" ); + + if ( !mShareOwnVideoQuery ) { + mShareOwnVideoQuery = new HbMessageBox( HbMessageBox::MessageTypeQuestion ); + mShareOwnVideoQuery->setStandardButtons( HbMessageBox::Yes | HbMessageBox::No ); + mShareOwnVideoQuery->setText( hbTrId( "txt_vt_info_allow_own_image_to_be_sent" )); + mShareOwnVideoQuery->setZValue(LC_NOTE_ON_TOP); + mShareOwnVideoQuery->setTimeout( HbDialog::NoTimeout ); + mShareOwnVideoQuery->setDismissPolicy( HbDialog::NoDismiss ); + mShareOwnVideoQuery->setVisible(false); + } + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::shareOwnVideoQuery()" ); + return mShareOwnVideoQuery; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::sharedVideoContextMenuActions +// ----------------------------------------------------------------------------- +// +void LcUiComponentRepository::sharedVideoContextMenuActions( HbMenu* menu, LcView& view ) +{ + Q_UNUSED(view) + LC_QDEBUG( + "livecomms [UI] -> LcUiComponentRepository::sharedVideoContextMenuActions()" ); + + menu->actions().clear(); + //due stubs in unit tests, qobject_cast cannot be used. + //Using static_cast instead + HbAction* swap = static_cast( findObject( lcActSwapViewsId ) ); + HbAction* changeCamera = + static_cast( findObject( lcActMenuChangeCameraId ) ); + + HbAction* disableCamera = + static_cast( findObject( lcActMenuDisableCameraId ) ); + HbAction* enableCamera = + static_cast( findObject( lcActEnableCameraId ) ); + + if ( swap ) { + LC_QDEBUG_2( "Adding ", swap->text() ); + menu->addAction( swap ); + } + if ( changeCamera ) { + LC_QDEBUG_2( "Adding ", changeCamera->text() ); + menu->addAction( changeCamera ); + } + if ( mEngine.isLocalPlayerPlaying() ) { + if ( disableCamera ) { + LC_QDEBUG_2( "Adding ", disableCamera->text() ); + menu->addAction( disableCamera ); + } + } else { + if ( enableCamera ) { + LC_QDEBUG_2( "Adding ", enableCamera->text() ); + menu->addAction( enableCamera ); + } + } + + + LC_QDEBUG( + "livecomms [UI] <- LcUiComponentRepository::sharedVideoContextMenuActions()" ); +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::loadView +// ----------------------------------------------------------------------------- +// +LcView* LcUiComponentRepository::loadView( QObjectList& components, + const QString& viewId, + const QString& xmlFile ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::loadView()" ); + + LcView* view = 0; + bool ok( false ); + // Load the XML file + components = load( xmlFile, &ok ); + + if ( !ok ) { + LC_QCRITICAL_3( "! loading of XML file ", xmlFile , " failed !" ) + return 0; + } + + mLastLoadedView = xmlFile; + + ok = loadLayout( lcLayoutLandscapeDefaultId ); + if ( !ok ) { + LC_QCRITICAL( "! loading of layout failed !" ) + return 0; + } + + view = qobject_cast( findWidget( viewId ) ); + if ( view ) { + connectActions( *view ); + view->init(); + } + + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::loadView()" ); + return view; +} + + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::connectActions +// ----------------------------------------------------------------------------- +// +void LcUiComponentRepository::connectActions( LcView& view ) const +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::connectActions()" ); + foreach( QAction* hbAction, view.menu()->actions() ) { + connect( *hbAction, view ); + } + foreach( QAction* hbAction, view.toolBar()->actions() ) { + connect( *hbAction, view ); + } + + HbAction* changeCamera = + static_cast( findObject( lcActMenuChangeCameraId ) ); + HbAction* disableCamera = + static_cast( findObject( lcActMenuDisableCameraId ) ); + HbAction* enableCamera = + static_cast( findObject( lcActEnableCameraId ) ); + + QObject::connect( changeCamera, SIGNAL(triggered()), + &view, SLOT(changeCamera()) ); + + QObject::connect( disableCamera, SIGNAL(triggered()), + &view, SLOT(disableCamera()) ); + + QObject::connect( enableCamera, SIGNAL(triggered()), + &view, SLOT(disableCamera()) ); + + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::connectActions()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::connect +// ----------------------------------------------------------------------------- +// +bool LcUiComponentRepository::connect( QAction& hbAction, LcView& view ) const +{ + LC_QDEBUG_2( "livecomms [UI] -> LcUiComponentRepository::connect() action=", + hbAction.objectName() ) + + const char* method = mSlots->value( hbAction.objectName() ); + bool slotFound = ( QString( method ).length() > 0 ); + + if ( slotFound ) { + QObject::connect( &hbAction, SIGNAL(triggered()), &view, method ); + } + + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::connect()" ) + + return slotFound; +} + + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::loadLayout +// ----------------------------------------------------------------------------- +// +bool LcUiComponentRepository::loadLayout( const QString& layoutName ) + { + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::loadLayout()" ) + bool ok( false ); + + if ( mLastLoadedView.length() > 0) { + LC_QDEBUG_4( "layout = ", layoutName, ", view =", mLastLoadedView ) + + load( mLastLoadedView, layoutName, &ok ); + if (!ok) { + LC_QCRITICAL( "! loading of XML failed !" ) + } + else{ + mPreviousLayout = mLayout; + mLayout = layoutName; + } + } else { + LC_QCRITICAL( "! not loading layout, since view is not loaded!" ) + } + + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::loadLayout()" ) + return ok; + } + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::layout()const +// ----------------------------------------------------------------------------- +// +QString LcUiComponentRepository::layout()const + { + LC_QDEBUG_2( "livecomms [UI] -> LcUiComponentRepository::layout()",mLayout ) + return mLayout; + } + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::previousLayout()const +// ----------------------------------------------------------------------------- +// +QString LcUiComponentRepository::previousLayout()const + { + LC_QDEBUG_2( "livecomms [UI] -> LcUiComponentRepository::previousLayout()", + mPreviousLayout ) + return mPreviousLayout; + } +// End of file