diff -r 238255e8b033 -r 84d9eb65b26f messagingapp/msgutils/unidatamodel/unimmsdataplugin/src/UniSmilSlide.cpp --- a/messagingapp/msgutils/unidatamodel/unimmsdataplugin/src/UniSmilSlide.cpp Fri Apr 16 14:56:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,319 +0,0 @@ -/* -* Copyright (c) 2005 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: -* Provides MMS SMIL Slide methods. -* -* -*/ - - -// ========== INCLUDE FILES ================================ - -#include -#include -#include -#include - -#include -#include - -#include "UniModelConst.h" -#include "UniObject.h" -#include "UniSmilSlide.h" - -// ========== LOCAL CONSTANTS AND MACROS =================== - -const TUint KMaxObjectPerSlide( 3 ); - -// ========== MEMBER FUNCTIONS ============================= - -CUniSmilSlide* CUniSmilSlide::NewLC( TUniLayout aLayout ) - { - CUniSmilSlide* self = new ( ELeave ) CUniSmilSlide( aLayout ); - - CleanupStack::PushL( self ); - self->ConstructL(); - - return self; - } - -// --------------------------------------------------------- -// CUniSmilSlide::NewL -// -// Factory method. -// --------------------------------------------------------- -// -CUniSmilSlide* CUniSmilSlide::NewL( TUniLayout aLayout ) - { - CUniSmilSlide* self = NewLC( aLayout ); - CleanupStack::Pop( self ); - return self; - } - - -// --------------------------------------------------------- -// CUniSmilSlide::CUniSmilSlide -// -// Constructor. -// --------------------------------------------------------- -// -CUniSmilSlide::CUniSmilSlide( TUniLayout aLayout ) : - iLayout( aLayout ) - { - } - -// --------------------------------------------------------- -// CUniSmilSlide::CUniSmilSlide -// -// Destructor. -// --------------------------------------------------------- -// - CUniSmilSlide::~CUniSmilSlide() - { - //Objects not owned by slide!! - //->ResetAndDestroy() not called. - delete iObjectArray; - } - - -// --------------------------------------------------------- -// CUniSmilSlide::AddObjectL -// -// Object should be valid for addition at this point ie -// should be checked that it can be added to slide. -// Takes ownership of the aObject. -// --------------------------------------------------------- -// -void CUniSmilSlide::AddObjectL( CUniObject* aObject ) - { - TUniRegion region = EUniRegionUnresolved; - switch ( aObject->MediaType() ) - { - case EMsgMediaText: - case EMsgMediaXhtml: - { - region = EUniRegionText; - } - break; - case EMsgMediaAudio: - { - region = EUniRegionAudio; - } - break; -#ifdef RD_SVGT_IN_MESSAGING - case EMsgMediaSvg: -#endif - case EMsgMediaImage: - case EMsgMediaVideo: - { - region = EUniRegionImage; - } - break; - default: - { - User::Leave( KErrNotSupported ); - } - } - AddObjectL( aObject, region ); - } - - -// --------------------------------------------------------- -// CUniSmilSlide::AddObjectL -// -// Object should be valid for addition at this point ie -// should be checked that it can be added to slide. -// Takes ownership of the aObject. -// --------------------------------------------------------- -// -void CUniSmilSlide::AddObjectL( CUniObject* aObject, TUniRegion aRegion ) - { - for ( TInt i = 0; i < iObjectArray->Count(); i++) - { - if ( iObjectArray->At( i )->Region() == aRegion ) - { - User::Leave( KErrAlreadyExists ); - } - } - aObject->SetReferenceCount( aObject->ReferenceCount() + 1 ); - aObject->SetRegion( aRegion ); - if ( aRegion == EUniRegionAudio ) - { - //always put audio region last... - iObjectArray->AppendL( aObject ); - } - else - { - //...and other regions first... - iObjectArray->InsertL( 0, aObject ); - //...and update layout when needed - UpdateLayoutL(); // does not leave, really. - } - } - - -// --------------------------------------------------------- -// CUniSmilSlide::RemoveObject -// -// -// --------------------------------------------------------- -// -void CUniSmilSlide::RemoveObject( CUniObject* aObject ) - { - TInt index( -1 ); // Initialize to impossible index. - - for ( TInt i = 0; i < iObjectArray->Count(); i++ ) - { - if ( iObjectArray->At( i ) == aObject ) - { - index = i; - } - } - if ( index != -1 ) - { - // Found - iObjectArray->Delete( index ); - aObject->SetReferenceCount( aObject->ReferenceCount() - 1 ); - } - } - -// --------------------------------------------------------- -// CUniSmilSlide::GetObject -// -// Accessor. -// --------------------------------------------------------- -// -CUniObject* CUniSmilSlide::GetObject( TUniRegion aRegion ) const - { - TInt cnt = iObjectArray->Count(); - - for ( TInt i = 0; i < cnt; i++ ) - { - if ( iObjectArray->At( i )->Region() == aRegion ) - { - return iObjectArray->At( i ); - } - } - return NULL; - } - -// --------------------------------------------------------- -// CUniSmilSlide::GetObject -// -// Accessor. -// --------------------------------------------------------- -// -CUniObject* CUniSmilSlide::GetObjectByIndex( TInt aObjNum ) const - { - if ( aObjNum >= 0 && - aObjNum < iObjectArray->Count() ) - { - return iObjectArray->At( aObjNum ); - } - return NULL; - } - -// --------------------------------------------------------- -// CUniSmilSlide::IsObject -// -// -// --------------------------------------------------------- -// -TBool CUniSmilSlide::IsObject( CUniObject* aObject ) const - { - TInt cnt = iObjectArray->Count(); - - for ( TInt i = 0; i < cnt; i++ ) - { - if ( iObjectArray->At( i ) == aObject ) - { - return ETrue; - } - } - return EFalse; - } - -// --------------------------------------------------------- -// CUniSmilSlide::ObjectCount -// -// Accessor -// --------------------------------------------------------- -// -TInt CUniSmilSlide::ObjectCount() const - { - return iObjectArray->Count(); - } - - -// --------------------------------------------------------- -// CUniSmilSlide::UpdateLayoutL -// -// -// --------------------------------------------------------- -// -void CUniSmilSlide::UpdateLayoutL( TUniLayout aNewLayout ) - { - // Only need to do something if slide has text & image. - // If only other or neither -> do nothing. - iLayout = aNewLayout; - UpdateLayoutL(); - } - -// --------------------------------------------------------- -// CUniSmilSlide::UpdateLayoutL -// -// -// --------------------------------------------------------- -// -void CUniSmilSlide::UpdateLayoutL() - { - if ( iLayout == EUniImageFirst || - iLayout == EUniTextFirst ) - { - CUniObject* image = GetObject( EUniRegionImage ); - CUniObject* text = GetObject( EUniRegionText ); - if ( image && text ) - { - TInt imageRef = image->ReferenceCount(); - TInt textRef = text->ReferenceCount(); - RemoveObject( image ); - RemoveObject( text ); - if ( iLayout == EUniImageFirst ) - { - iObjectArray->InsertL( 0, text ); - iObjectArray->InsertL( 0, image ); - } - else - { - iObjectArray->InsertL( 0, image ); - iObjectArray->InsertL( 0, text ); - } - image->SetReferenceCount( imageRef ); - text->SetReferenceCount( textRef ); - } - } - } - -// --------------------------------------------------------- -// CUniSmilSlide::ConstructL -// -// 2nd phase Constructor. -// --------------------------------------------------------- -// -void CUniSmilSlide::ConstructL() - { - iObjectArray = new ( ELeave ) CSmilObjectArray( KMaxObjectPerSlide ); - } - -// End of file