diff -r 4526337fb576 -r 3eca7e70b1b8 mulwidgets/common/src/mulimagevisualattributesetter.cpp --- a/mulwidgets/common/src/mulimagevisualattributesetter.cpp Tue Feb 02 00:28:09 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,360 +0,0 @@ -/* -* Copyright (c) 2007 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: Attribute setter implementation for mulimage visual. - * -*/ - - -// Class header -#include "../inc/mulimagevisualattributesetter.h" - -// Alf headers -#include "alf/alfattribute.h" -#include -#include -#include "alf/alfattributecontainer.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include //for resource pooling -#include //for resource pooling -// Osn headers -#include -#include -//#include -// Std headers -#include -#include -// DUI headers -#include "alf/attrproperty.h" - -//for logs -#include "mullog.h" -#include "mulutility.h" - -using namespace osncore; - -using namespace duiuimodel::imagevisualattributes; -using namespace duiuimodel::commonvisualattributes; -using namespace duiuimodel::layoutattributes; - -namespace Alf - { - -class MulImageVisualAttributeSetterImpl - { -public: - MulImageVisualAttributeSetterImpl(); - ~MulImageVisualAttributeSetterImpl(); -public: - //Keep track of loaded texture for imagevisuals. - //Texture manager doesn't unload the texture from memory untill Env is deleted. - //Hence need to unload them once attribute setter is deleted. - AlfPtrVector mLoadedTextures; - //Env needed to access TextureManager while unloading textures. - CAlfEnv* mEnv; - }; - - -// --------------------------------------------------------------------------- -// Constructor -// --------------------------------------------------------------------------- -// -MulImageVisualAttributeSetterImpl::MulImageVisualAttributeSetterImpl() - { - MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetterImpl::MulImageVisualAttributeSetterImpl"); - //Do not delete textures here as they may be in use by the visuals that have not been deleted. - mLoadedTextures.setAutoDelete (false); - } - -// --------------------------------------------------------------------------- -// Destructor -// --------------------------------------------------------------------------- -// -MulImageVisualAttributeSetterImpl::~MulImageVisualAttributeSetterImpl() - { - MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetterImpl::~MulImageVisualAttributeSetterImpl"); - //Unload all loaded textures created by this attributesetter to free up the memory. - for (int i =0; iTextureManager().UnloadTexture (texture->Id ()); - } - mLoadedTextures.clear (); - } - -// --------------------------------------------------------------------------- -// Constructor -// --------------------------------------------------------------------------- -// - OSN_EXPORT MulImageVisualAttributeSetter::MulImageVisualAttributeSetter() - { - MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetter::MulImageVisualAttributeSetter"); - mImpl.reset(new (EMM) MulImageVisualAttributeSetterImpl()); - mImageAttrSetter.reset(new (EMM) AlfImageVisualAttributeSetter()); - } - -// --------------------------------------------------------------------------- -// Destructor -// --------------------------------------------------------------------------- -// -OSN_EXPORT MulImageVisualAttributeSetter::~MulImageVisualAttributeSetter() - { - MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetter::~MulImageVisualAttributeSetter"); - } - -// --------------------------------------------------------------------------- -// Sets Attribute Value. Delegates based on attribute Category. -// --------------------------------------------------------------------------- -// -OSN_EXPORT void MulImageVisualAttributeSetter::setAttributeValue ( - CAlfVisual &aVisual, - AlfAttributeContainer* aContainer, - IAlfMap* aData ) - { - MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetter::setAttributeValue"); - mData = aData; - CAlfImageVisual* imageVisual = dynamic_cast(&aVisual); - if (!imageVisual) - { - ALF_THROW ( AlfVisualException, EInvalidVisual, "AlfImageVisualAttributeSetter") - } - AlfCommonVisualAttributeSetter::setAttributeValue(aVisual,aContainer, aData); - } -// --------------------------------------------------------------------------- -// HandleStaticDataAttribute -// --------------------------------------------------------------------------- -// -void MulImageVisualAttributeSetter::handleStaticDataAttribute( - CAlfVisual &aVisual, AlfAttribute& aAttr, - AlfAttributeContainer& aContainer, IAlfMap* aData) - { - MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetter::handleStaticDataAttribute"); - CAlfImageVisual* imageVisual = dynamic_cast(&aVisual); - if ( !imageVisual) - { - ALF_THROW ( AlfVisualException, EInvalidVisual, "CAlfImageVisualAttributeSetter") - } - - if ( !aData) ALF_THROW ( AlfDataException, EInvalidVariantDataType, "CAlfTextVisualAttributeSetter" ) - - const char* dataField = aAttr.getDataField (); - if ( !dataField) ALF_THROW ( AlfDataException, EInvalidAttribute, "CAlfTextVisualAttributeSetter" ) - - IAlfVariantType* data = aData->item (UString( dataField )); - const char* attrName = aAttr.name (); - if ( data) - { - if( !strcmp(attrName, KImagePath)) - { - if ( data->type ()== IAlfVariantType::EString) - { - if ( IsSVGImage (data->string ())) - { - LoadImageFromSvg(data->string (),*imageVisual); - } - else if (MulUtility::IsPoolResource(data->string ())) - { - //using resource pooling mechanism for image visual - ResourcePool& pool = AlfWidgetEnvExtension::resourcePool(imageVisual->Env()); - imageVisual->SetImage(pool.getImageResource((data->string ().getUtf8()))); - } - else - { - //AlfImageVisualAttributeSetter::handleStaticDataAttribute(aVisual,aAttr,aContainer,aData); - mImageAttrSetter->setAttributeValue(aVisual,&aContainer,aData); - } - } - else if ( data->type ()== IAlfVariantType::EInt) - { - LoadImageFromTexture(data->integer(),*imageVisual); - } - } - else if( !strcmp(attrName, KSecondaryImagePath)) - { - if ( data->type ()== IAlfVariantType::EString) - { - if ( IsSVGImage (data->string ())) - { - LoadImageFromSvg(data->string (),*imageVisual); - } - else if (MulUtility::IsPoolResource(data->string ())) - { - //using resource pooling mechanism for image visual - ResourcePool& pool1 = AlfWidgetEnvExtension::resourcePool(imageVisual->Env()); - imageVisual->SetImage(pool1.getImageResource((data->string ().getUtf8()))); - } - else - { - mImageAttrSetter->setAttributeValue(aVisual,&aContainer,aData); - } - } - else if ( data->type ()== IAlfVariantType::EInt) - { - LoadImageFromTexture(data->integer(),*imageVisual); - } - } - else - { - mImageAttrSetter->setAttributeValue(aVisual,&aContainer,aData); - } - } - } - -// --------------------------------------------------------------------------- -// handleStaticAttribute -// --------------------------------------------------------------------------- -// -void MulImageVisualAttributeSetter::handleStaticAttribute( CAlfVisual& aVisual, - AlfAttribute& aAttr, - AlfAttributeContainer& aContainer ) - { - MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetter::handleStaticAttribute"); - CAlfImageVisual* imageVisual = dynamic_cast(&aVisual); - if ( !imageVisual) - { - ALF_THROW ( AlfVisualException, EInvalidVisual, "AlfImageVisualAttributeSetter") - } - - const char* attrName = aAttr.name (); - if( !strcmp(attrName, KImagePath)) - { - if ( IsSVGImage ( aAttr.stringValue())) - { - LoadImageFromSvg( aAttr.stringValue(),*imageVisual); - } - - else - { - mImageAttrSetter->setAttributeValue(aVisual,&aContainer,mData); - } - } - else if( !strcmp(attrName, KSecondaryImagePath)) - { - if ( IsSVGImage (aAttr.stringValue())) - { - LoadImageFromSvg(aAttr.stringValue(),*imageVisual); - } - - else - { - mImageAttrSetter->setAttributeValue(aVisual,&aContainer,mData); - } - } - else - { - mImageAttrSetter->setAttributeValue(aVisual,&aContainer,mData); - } - } - -// --------------------------------------------------------------------------- -// handleDynamicDataAttribute -// --------------------------------------------------------------------------- -// -void MulImageVisualAttributeSetter::handleDynamicDataAttribute(CAlfVisual &aVisual, - AlfAttribute& /*aAttr*/, - AlfAttributeContainer& aContainer, - IAlfMap* aData) - { - MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetter::handleDynamicDataAttribute"); - mImageAttrSetter->setAttributeValue(aVisual,&aContainer,aData); - } - -// --------------------------------------------------------------------------- -// handleDynamicDataAttribute -// --------------------------------------------------------------------------- -// -void MulImageVisualAttributeSetter::handleDynamicAttribute(CAlfVisual &aVisual, - AlfAttribute& /*aAttr*/, - AlfAttributeContainer& aContainer) - { - MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetter::handleDynamicAttribute"); - mImageAttrSetter->setAttributeValue(aVisual,&aContainer,mData); - } - -// --------------------------------------------------------------------------- -// IsSVGImage -// --------------------------------------------------------------------------- -// -OSN_EXPORT bool MulImageVisualAttributeSetter::IsSVGImage(const UString& aImagePath) - { - MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetter::IsSVGImage"); - TPtrC8 src((TUint8*)aImagePath.getUtf8()); - HBufC* srcBuf = HBufC::NewLC(src.Length()); - - srcBuf->Des().Copy(src); - srcBuf->Des().LowerCase(); - - _LIT(KSvgFile,".svg"); - - bool retval = ( KErrNotFound != srcBuf->FindC(KSvgFile)); - - CleanupStack::PopAndDestroy( srcBuf ); - - return retval; - } - -// --------------------------------------------------------------------------- -// LoadImageFromSvg -// --------------------------------------------------------------------------- -// -OSN_EXPORT void MulImageVisualAttributeSetter::LoadImageFromSvg(const UString& aSvgFilePath, - CAlfImageVisual& aImageVisual ) - { - MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetter::LoadImageFromSvg"); - TPtrC8 src((TUint8*)aSvgFilePath.getUtf8()); - HBufC* imagePath = CnvUtfConverter::ConvertToUnicodeFromUtf8L (src); - CleanupStack::PushL( imagePath ); - - CAlfImageLoaderUtil imgLoaderUtil; - imgLoaderUtil.SetSize (TSize (50, 50)); - - MAlfBitmapProvider* iSvgBitMapProv= imgLoaderUtil.CreateSVGImageLoaderL (*imagePath); - CAlfTexture &texture = aImageVisual.Env().TextureManager().CreateTextureL ( - KAlfAutoGeneratedTextureId, - iSvgBitMapProv, - EAlfTextureFlagDefault); - - aImageVisual.SetScaleMode (CAlfImageVisual::EScaleFit); - aImageVisual.SetImage (TAlfImage (texture)); - - CleanupStack::PopAndDestroy(imagePath); - } - -// --------------------------------------------------------------------------- -// LoadImageFromTexture -// --------------------------------------------------------------------------- -// -OSN_EXPORT void MulImageVisualAttributeSetter::LoadImageFromTexture( int aTextureId, - CAlfImageVisual& aImageVisual ) - { - MUL_LOG_INFO("aakash::CMulImageVisualAttributeSetter::LoadImageFromTexture"); - //Seems like the Env's Texture Manager is not returning a copy. And When Env gets deleted the texture is destroyed - //So ownership is not with the client - const CAlfTexture* texture = aImageVisual.Env().TextureManager().Texture (aTextureId); - if(!texture) - { - ALF_THROW ( AlfDataException, EInvalidAttribute, "AlfImageVisualAttributeSetter" ) - } - aImageVisual.SetImage (TAlfImage (*texture)); - } - - -}// Alf