diff -r 000000000000 -r 1bce908db942 multimediacommsengine/tsrc/MCETestUI/src/CMCETestUIStreamViewModel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/tsrc/MCETestUI/src/CMCETestUIStreamViewModel.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,850 @@ +/* +* 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: +* +*/ + +// INCLUDE FILES + +#include "CMCETestUIStreamViewModel.h" +#include "CMCETestUIEngine.h" +#include "CMCETestUIEngineSession.h" +#include "MMCETestUIEngineCmdProvider.h" +#include "CMCETestUIEngineSource.h" +#include "CMCETestUIEngineSink.h" +#include "CMCETestUIEngineCodec.h" +#include +#include +#include "CMCETestUIEngineVideoSource.h" +#include "CMCETestUIEngineVideoSink.h" +#include "CMCETestUIEngineVideoCodec.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mcetestuiengineconstants.h" +#include "cmcetestuiengineaudiostream.h" +#include "cmcetestuienginevideostream.h" + +// CONSTANTS + + +// ================= MEMBER FUNCTIONS ========================================== + +// ----------------------------------------------------------------------------- +// CMCETestUIStreamViewModel::NewL +// ----------------------------------------------------------------------------- +// +CMCETestUIStreamViewModel* CMCETestUIStreamViewModel::NewL( + CMCETestUIEngine& aEngine, + CMCETestUIEngineAudioStream& aStream ) + { + CMCETestUIStreamViewModel* self = + new(ELeave) CMCETestUIStreamViewModel( aEngine, aStream ); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CMCETestUIStreamViewModel::CMCETestUISessionViewModel +// ----------------------------------------------------------------------------- +// +CMCETestUIStreamViewModel::CMCETestUIStreamViewModel( + CMCETestUIEngine& aEngine , + CMCETestUIEngineAudioStream& aStream ) + :iEngine( aEngine ), + iStream( aStream), + audioSourceSuppressed( EFalse ), + audioSinksSuppressed( EFalse ) + { + } + +// ----------------------------------------------------------------------------- +// CMCETestUIStreamViewModel::ConstructL() +// ----------------------------------------------------------------------------- +// +void CMCETestUIStreamViewModel::ConstructL() + { + iArray = new (ELeave) CDesCArrayFlat( 1 ); + + PopulateSourcesL(); + PopulateSinksL(); + PopulateCodecsL(); + } + +// ----------------------------------------------------------------------------- +// CMCETestUIStreamViewModel::~CMCETestUIStreamViewModel() +// Destructor +// Frees reserved resources +// ----------------------------------------------------------------------------- +// +CMCETestUIStreamViewModel::~CMCETestUIStreamViewModel() + { + delete iArray; + } + +// ----------------------------------------------------------------------------- +// CMCETestUIStreamViewModel::MdcaCount() const +// +// ----------------------------------------------------------------------------- +// +TInt CMCETestUIStreamViewModel::MdcaCount() const + { + return iArray->MdcaCount(); + } + +// ----------------------------------------------------------------------------- +// CMCETestUISessionViewModel::MdcaPoint() const +// +// ----------------------------------------------------------------------------- +// +TPtrC CMCETestUIStreamViewModel::MdcaPoint( TInt aIndex ) const + { + return iArray->MdcaPoint( aIndex ); + } + +// ----------------------------------------------------------------------------- +// CMCETestUIStreamViewModel::IsAudioSourceSelected() const +// +// ----------------------------------------------------------------------------- +// +TBool CMCETestUIStreamViewModel::IsAudioSourceSelected( TInt aIndex ) const + { + if ( aIndex == 0 && !audioSourceSuppressed ) + { + return ETrue; + } + + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CMCETestUIMainViewModel::SelectedAudioSinkIndex() const +// +// ----------------------------------------------------------------------------- +// +TInt CMCETestUIStreamViewModel::SelectedAudioSinkIndex( TInt aIndex ) const + { + + if ( audioSourceSuppressed ) + { + ++aIndex; + } + + if ( aIndex == 0 ) + { + return KErrNotFound; + } + + aIndex -= 1; // Selected is not the source + + const RPointerArray& sinks = + iStream.SinksL(); + + if ( audioSinksSuppressed ) + { + aIndex += sinks.Count(); + } + + if ( aIndex < sinks.Count() ) + { + return aIndex; + } + + return KErrNotFound; + } + +// ----------------------------------------------------------------------------- +// CMCETestUIStreamViewModel::SelectedAudioCodecIndex() const +// +// ----------------------------------------------------------------------------- +// +TInt CMCETestUIStreamViewModel::SelectedAudioCodecIndex( TInt aIndex ) const + { + + const RPointerArray& sinks = + iStream.SinksL(); + + const RPointerArray& codecs = + iStream.CodecsL(); + + + // Next does not work correctly + + if ( audioSourceSuppressed ) + { + ++aIndex; + } + + if ( aIndex == 0) + { + return KErrNotFound; + } + + aIndex -= 1; // Selected is not the audio source + + if ( audioSinksSuppressed ) + { + aIndex += sinks.Count(); + } + + if ( aIndex < sinks.Count() ) + { + return KErrNotFound; + } + + aIndex -= sinks.Count(); // Selected is not a audio sink + + if ( aIndex < codecs.Count() ) + { + return aIndex; + } + + return KErrNotFound; // default + } + + + +// ----------------------------------------------------------------------------- +// CMCETestUIStreamViewModel::CmdProvider() +// +// ----------------------------------------------------------------------------- +// +MMCETestUIEngineCmdProvider& CMCETestUIStreamViewModel::CmdProvider( + TInt aIndex ) + { + const RPointerArray& sources = + iStream.SourcesL(); + + const RPointerArray& sinks = + iStream.SinksL(); + + const RPointerArray& codecs = + iStream.CodecsL(); + + // Next does not work correctly + + if ( audioSourceSuppressed ) + { + ++aIndex; + } + + if ( aIndex == 0) + { + return *(sources[aIndex]); + } + + aIndex -= 1; // Selected is not the source + + if ( audioSinksSuppressed ) + { + aIndex += sinks.Count(); + } + + if ( aIndex < sinks.Count() ) + { + return *(sinks[aIndex]); + } + + aIndex -= sinks.Count(); // Selected is not a sink + if ( aIndex < codecs.Count() ) + { + return *(codecs[aIndex]); + } + + return iEngine; // default + } + + +// ----------------------------------------------------------------------------- +// CMCETestUIStreamViewModel::PopulateStreamsL +// Populate streams of a session +// ----------------------------------------------------------------------------- +// +void CMCETestUIStreamViewModel::PopulateSourcesL() + { + const RPointerArray& sources = + iStream.SourcesL(); + + for ( TInt i = 0; i < sources.Count(); ++i ) + { + + TInt itemLength = KSource().Length() + + KLeftParenthesis().Length() + + // sources[i]->TextualDirection().Length() + + KRightParenthesis().Length() + + sources[i]->State().Length() + + KTab().Length() * 3; + + if(sources[i]->Type() == KMceRTPSource ) + { + itemLength += KLabelRTPSource().Length(); + } + + + else if(sources[i]->Type() == KMceMicSource ) + { + itemLength += KLabelMicSource().Length(); + } + + else if(sources[i]->Type() == KMceFileSource ) + { + itemLength += KLabelFileSource().Length(); + } + HBufC16* item = HBufC16::NewLC( itemLength ); + TPtr16 itemPtr = item->Des(); + itemPtr.Append( KTab ); + itemPtr.Append( KSource ); + itemPtr.Append( KLeftParenthesis() ); + if(sources[i]->Type() == KMceRTPSource ) + { + itemPtr.Append(KLabelRTPSource); + } + + else if(sources[i]->Type() == KMceMicSource ) + { + itemPtr.Append(KLabelMicSource); + } + else if(sources[i]->Type() == KMceFileSource ) + { + itemPtr.Append(KLabelFileSource); + } + + // itemPtr.Append( sources[i]->TextualDirection() ); + itemPtr.Append( KRightParenthesis() ); + itemPtr.Append( KTab ); + itemPtr.Append( sources[i]->State() ); + itemPtr.Append( KTab ); + + iArray->AppendL( *item ); + + CleanupStack::PopAndDestroy( item ); + item = NULL; + } + } + +// ----------------------------------------------------------------------------- +// CMCETestUIStreamViewModel::PopulateSinksL +// Populate streams of a session +// ----------------------------------------------------------------------------- +// + +void CMCETestUIStreamViewModel::PopulateSinksL() + { + const RPointerArray& sinks = + iStream.SinksL(); + + for ( TInt i = 0; i < sinks.Count(); ++i ) + { + + TInt itemLength = KSink().Length() + + KLeftParenthesis().Length() + + // sinks[i]->TextualDirection().Length() + + KRightParenthesis().Length() + + sinks[i]->State().Length() + + KTab().Length() * 3; + + if(sinks[i]->Type() == KMceRTPSink ) + { + itemLength += KLabelRTPSink().Length(); + } + + else if(sinks[i]->Type() == KMceSpeakerSink) + { + itemLength += KLabelSpeakerSink().Length(); + } + + HBufC16* item = HBufC16::NewLC( itemLength ); + TPtr16 itemPtr = item->Des(); + itemPtr.Append( KTab ); + itemPtr.Append( KSink ); + itemPtr.Append( KLeftParenthesis() ); + + if(sinks[i]->Type() == KMceRTPSink ) + { + itemPtr.Append(KLabelRTPSink); + } + else if(sinks[i]->Type() == KMceSpeakerSink ) + { + itemPtr.Append(KLabelSpeakerSink); + } + + // itemPtr.Append( sinks[i]->TextualDirection() ); + itemPtr.Append( KRightParenthesis() ); + itemPtr.Append( KTab ); + itemPtr.Append( sinks[i]->State() ); + itemPtr.Append( KTab ); + + iArray->AppendL( *item ); + + CleanupStack::PopAndDestroy( item ); + item = NULL; + } + } + +// ----------------------------------------------------------------------------- +// CMCETestUIStreamViewModel::PopulateStreamsL +// Populate streams of a session +// ----------------------------------------------------------------------------- +// + +void CMCETestUIStreamViewModel::PopulateCodecsL() + { + const RPointerArray& codecs = + iStream.CodecsL(); + + for ( TInt i = 0; i < codecs.Count(); ++i ) + { + TBuf8 name = codecs[i]->Codec().SdpName(); + + TInt itemLength = KCodec().Length() + + KLeftParenthesis().Length() + + name.Length()+ + KRightParenthesis().Length() + + codecs[i]->State().Length() + + KTab().Length() * 3; + + TBuf16 name16; + name16.Copy(name); + + + HBufC16* item = HBufC16::NewLC( itemLength ); + TPtr16 itemPtr = item->Des(); + itemPtr.Append( KTab ); + itemPtr.Append( KCodec ); + itemPtr.Append( KLeftParenthesis() ); + itemPtr.Append( name16 ) ; + itemPtr.Append( KRightParenthesis() ); + itemPtr.Append( KTab ); + itemPtr.Append( codecs[i]->State() ); + itemPtr.Append( KTab ); + iArray->AppendL( *item ); + CleanupStack::PopAndDestroy( item ); + item = NULL; + } + } + +// ================= MEMBER FUNCTIONS ========================================== + +// ----------------------------------------------------------------------------- +// CMCETestUIStreamViewModel::NewL +// ----------------------------------------------------------------------------- +// +CMCETestUIVideoStreamViewModel* CMCETestUIVideoStreamViewModel::NewL( + CMCETestUIEngine& aEngine, + CMCETestUIEngineVideoStream& aStream ) + { + CMCETestUIVideoStreamViewModel* self = + new(ELeave) CMCETestUIVideoStreamViewModel( aEngine, aStream ); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CMCETestUIVideoStreamViewModel::CMCETestUIVideoStreamViewModel +// ----------------------------------------------------------------------------- +// +CMCETestUIVideoStreamViewModel::CMCETestUIVideoStreamViewModel( + CMCETestUIEngine& aEngine , + CMCETestUIEngineVideoStream& aStream ) + :iEngine( aEngine ), + iStream( aStream), + videoSourceSuppressed( EFalse ), + videoSinksSuppressed( EFalse ) + { + } + +// ----------------------------------------------------------------------------- +// CMCETestUIVideoStreamViewModel::ConstructL() +// ----------------------------------------------------------------------------- +// +void CMCETestUIVideoStreamViewModel::ConstructL() + { + iArray = new (ELeave) CDesCArrayFlat( 1 ); + + PopulateVideoSourcesL(); + PopulateVideoSinksL(); + PopulateVideoCodecsL(); + } + +// ----------------------------------------------------------------------------- +// CMCETestUIVideoStreamViewModel::~CMCETestUIVideoStreamViewModel() +// Destructor +// Frees reserved resources +// ----------------------------------------------------------------------------- +// +CMCETestUIVideoStreamViewModel::~CMCETestUIVideoStreamViewModel() + { + delete iArray; + } + +// ----------------------------------------------------------------------------- +// CMCETestUIVideoStreamViewModel::MdcaCount() const +// +// ----------------------------------------------------------------------------- +// +TInt CMCETestUIVideoStreamViewModel::MdcaCount() const + { + return iArray->MdcaCount(); + } + +// ----------------------------------------------------------------------------- +// CMCETestUIVideoStreamViewModel::MdcaPoint() const +// +// ----------------------------------------------------------------------------- +// +TPtrC CMCETestUIVideoStreamViewModel::MdcaPoint( TInt aIndex ) const + { + return iArray->MdcaPoint( aIndex ); + } + +// ----------------------------------------------------------------------------- +// CMCETestUIVideoStreamViewModel::IsVideoSourceSelected() const +// +// ----------------------------------------------------------------------------- +// +TBool CMCETestUIVideoStreamViewModel::IsVideoSourceSelected( TInt aIndex ) const + { + if ( aIndex == 0 && !videoSourceSuppressed ) + { + return ETrue; + } + + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CMCETestUIVideoStreamViewModel::SelectedVideoSinkIndex() const +// +// ----------------------------------------------------------------------------- +// +TInt CMCETestUIVideoStreamViewModel::SelectedVideoSinkIndex( TInt aIndex ) const + { + + if ( videoSourceSuppressed ) + { + ++aIndex; + } + + if ( aIndex == 0 ) + { + return KErrNotFound; + } + + aIndex -= 1; // Selected is not the source + + const RPointerArray& sinks = + iStream.SinksL(); + + if ( videoSinksSuppressed ) + { + aIndex += sinks.Count(); + } + + if ( aIndex < sinks.Count() ) + { + return aIndex; + } + + return KErrNotFound; + } + +// ----------------------------------------------------------------------------- +// CMCETestUIVideoStreamViewModel::SelectedVideoCodecIndex() const +// +// ----------------------------------------------------------------------------- +// +TInt CMCETestUIVideoStreamViewModel::SelectedVideoCodecIndex( TInt aIndex ) const + { + + const RPointerArray& sinks = + iStream.SinksL(); + + const RPointerArray& codecs = + iStream.CodecsL(); + + + // Next does not work correctly + + if ( videoSourceSuppressed ) + { + ++aIndex; + } + + if ( aIndex == 0) + { + return KErrNotFound; + } + + aIndex -= 1; // Selected is not the audio source + + if ( videoSinksSuppressed ) + { + aIndex += sinks.Count(); + } + + if ( aIndex < sinks.Count() ) + { + return KErrNotFound; + } + + aIndex -= sinks.Count(); // Selected is not a audio sink + + if ( aIndex < codecs.Count() ) + { + return aIndex; + } + + return KErrNotFound; // default + } + + + +// ----------------------------------------------------------------------------- +// CMCETestUIVideoStreamViewModel::CmdProvider() +// +// ----------------------------------------------------------------------------- +// +MMCETestUIEngineCmdProvider& CMCETestUIVideoStreamViewModel::CmdProvider( + TInt aIndex ) + { + const RPointerArray& sources = + iStream.SourcesL(); + + const RPointerArray& sinks = + iStream.SinksL(); + + const RPointerArray& codecs = + iStream.CodecsL(); + + // Next does not work correctly + + if ( videoSourceSuppressed ) + { + ++aIndex; + } + + if ( aIndex == 0) + { + return *(sources[aIndex]); + } + + aIndex -= 1; // Selected is not the source + + if ( videoSinksSuppressed ) + { + aIndex += sinks.Count(); + } + + if ( aIndex < sinks.Count() ) + { + return *(sinks[aIndex]); + } + + aIndex -= sinks.Count(); // Selected is not a sink + if ( aIndex < codecs.Count() ) + { + return *(codecs[aIndex]); + } + + return iEngine; // default + } + +// ----------------------------------------------------------------------------- +// CMCETestUIStreamViewModel::PopulateVideoStreamsL +// Populate streams of a session +// ----------------------------------------------------------------------------- +// +void CMCETestUIVideoStreamViewModel::PopulateVideoSourcesL() + { + const RPointerArray& sources = + iStream.SourcesL(); + + for ( TInt i = 0; i < sources.Count(); ++i ) + { + + TInt itemLength = KSource().Length() + + KLeftParenthesis().Length() + + // sources[i]->TextualDirection().Length() + + KRightParenthesis().Length() + + sources[i]->State().Length() + + KTab().Length() * 3; + + if(sources[i]->Type() == KMceRTPSource ) + { + itemLength += KLabelRTPSource().Length(); + } + + + else if(sources[i]->Type() == KMceCameraSource ) + { + itemLength += KLabelCamSource().Length(); + } + + else if(sources[i]->Type() == KMceFileSource ) + { + itemLength += KLabelFileSource().Length(); + } + + HBufC16* item = HBufC16::NewLC( itemLength ); + TPtr16 itemPtr = item->Des(); + itemPtr.Append( KTab ); + itemPtr.Append( KSource ); + itemPtr.Append( KLeftParenthesis() ); + if(sources[i]->Type() == KMceRTPSource ) + { + itemPtr.Append(KLabelRTPSource); + } + + else if(sources[i]->Type() == KMceCameraSource ) + { + itemPtr.Append(KLabelCamSource); + } + + else if(sources[i]->Type() == KMceFileSource ) + { + itemPtr.Append(KLabelFileSource); + } + // itemPtr.Append( sources[i]->TextualDirection() ); + itemPtr.Append( KRightParenthesis() ); + itemPtr.Append( KTab ); + itemPtr.Append( sources[i]->State() ); + itemPtr.Append( KTab ); + + iArray->AppendL( *item ); + + CleanupStack::PopAndDestroy( item ); + item = NULL; + } + } + +// ----------------------------------------------------------------------------- +// CMCETestUIStreamViewModel::PopulateVideoSinksL +// Populate streams of a session +// ----------------------------------------------------------------------------- +// +void CMCETestUIVideoStreamViewModel::PopulateVideoSinksL() + { + const RPointerArray& sinks = + iStream.SinksL(); + + for ( TInt i = 0; i < sinks.Count(); ++i ) + { + + TInt itemLength = KSink().Length() + + KLeftParenthesis().Length() + + // sinks[i]->TextualDirection().Length() + + KRightParenthesis().Length() + + sinks[i]->State().Length() + + KTab().Length() * 3; + + if(sinks[i]->Type() == KMceRTPSink ) + { + itemLength += KLabelRTPSink().Length(); + } + + else if(sinks[i]->Type() == KMceDisplaySink) + { + itemLength += KLabelDisplaySink().Length(); + } + else if(sinks[i]->Type() == KMceFileSink) + { + itemLength += KLabelFileSink().Length(); + } + HBufC16* item = HBufC16::NewLC( itemLength ); + TPtr16 itemPtr = item->Des(); + itemPtr.Append( KTab ); + itemPtr.Append( KSink ); + itemPtr.Append( KLeftParenthesis() ); + + if(sinks[i]->Type() == KMceRTPSink ) + { + itemPtr.Append(KLabelRTPSink); + } + else if(sinks[i]->Type() == KMceDisplaySink ) + { + itemPtr.Append(KLabelDisplaySink); + } + else if(sinks[i]->Type() == KMceFileSink ) + { + itemPtr.Append(KLabelFileSink); + } + // itemPtr.Append( sinks[i]->TextualDirection() ); + itemPtr.Append( KRightParenthesis() ); + itemPtr.Append( KTab ); + itemPtr.Append( sinks[i]->State() ); + itemPtr.Append( KTab ); + + iArray->AppendL( *item ); + + CleanupStack::PopAndDestroy( item ); + item = NULL; + } + } + +// ----------------------------------------------------------------------------- +// CMCETestUIVideoStreamViewModel::PopulateVideoStreamsL +// Populate streams of a session +// ----------------------------------------------------------------------------- +// +void CMCETestUIVideoStreamViewModel::PopulateVideoCodecsL() + { + const RPointerArray& codecs = + iStream.CodecsL(); + + for ( TInt i = 0; i < codecs.Count(); ++i ) + { + TBuf8 name = codecs[i]->Codec().SdpName(); + + TInt itemLength = KCodec().Length() + + KLeftParenthesis().Length() + + name.Length()+ + KRightParenthesis().Length() + + codecs[i]->State().Length() + + KTab().Length() * 3; + + TBuf16 name16; + name16.Copy(name); + + + HBufC16* item = HBufC16::NewLC( itemLength ); + TPtr16 itemPtr = item->Des(); + itemPtr.Append( KTab ); + itemPtr.Append( KCodec ); + itemPtr.Append( KLeftParenthesis() ); + itemPtr.Append( name16 ) ; + itemPtr.Append( KRightParenthesis() ); + itemPtr.Append( KTab ); + itemPtr.Append( codecs[i]->State() ); + itemPtr.Append( KTab ); + iArray->AppendL( *item ); + CleanupStack::PopAndDestroy( item ); + item = NULL; + } + } + +// End of File