widgetmodel/alfwidgetmodel/src/alfmeshvisualattributesetter.cpp
branchRCL_3
changeset 19 4ea6f81c838a
parent 17 514d98f21c43
child 20 0e9bb658ef58
--- a/widgetmodel/alfwidgetmodel/src/alfmeshvisualattributesetter.cpp	Mon Jun 21 16:15:51 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,537 +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:   Implements attributesetters for MeshVisual.
-*
-*/
-
-
-
-#include "alf/alfattribute.h"
-#include "alf/alfmeshvisualattributesetter.h"
-#include "alf/alfattributevaluetype.h"
-#include <alf/alfvisual.h>
-#include <alf/alfattributeexception.h>
-#include <alf/alfvisualexception.h>
-#include "alf/alfattributecontainer.h"
-#include <libc/string.h>
-#include <osn/ustring.h>
-#include "alf/attrproperty.h"
-#include <uiacceltk/HuiRealPoint.h>
-
-#include <alf/alfmeshvisual.h>
-#include <alf/alftexture.h>
-#include <utf.h>
-#include <alf/alfenv.h>
-#include <alf/alfdataexception.h>
-#include <alf/alfdisplay.h>
-
-#include <alf/alfbrusharray.h>
-#include <alf/alfframebrush.h>
-
-
-#include <alf/alfeventhandler.h>
-#include <alf/alfevent.h>
-#include <osn/alfptrvector.h>
-
-
-using namespace osncore;
-
-using namespace duiuimodel::meshvisualattributes;
-using namespace duiuimodel::commonvisualattributes;
-
-namespace Alf
-    {
-
-class AlfMeshVisualAttributeSetterImpl
-    {
-public:
-    AlfMeshVisualAttributeSetterImpl();
-    ~AlfMeshVisualAttributeSetterImpl();
-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<CAlfTexture> mLoadedTextures;
-    //Env needed to access TextureManager while unloading textures.
-    CAlfEnv* mEnv;
-    };
-
-AlfMeshVisualAttributeSetterImpl::AlfMeshVisualAttributeSetterImpl()
-    {
-    //Do not delete textures here as they may be in use by the visuals that have not been deleted.
-    mEnv = CAlfEnv::Static();
-    mLoadedTextures.setAutoDelete(false);
-    }
-
-AlfMeshVisualAttributeSetterImpl::~AlfMeshVisualAttributeSetterImpl()
-    {
-    //Unload all loaded textures created by this attributesetter to free up the memory.
-    for (int i =0;i<mLoadedTextures.count();i++)
-        {
-        CAlfTexture* Texture = mLoadedTextures[i];
-        mEnv->TextureManager().UnloadTexture(Texture->Id());
-        }
-    mLoadedTextures.clear();
-    }
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// Constructor.
-// ---------------------------------------------------------------------------
-//
-OSN_EXPORT AlfMeshVisualAttributeSetter::AlfMeshVisualAttributeSetter()
-    {
-    mImpl.reset(new (EMM) AlfMeshVisualAttributeSetterImpl());
-    }
-
-// ---------------------------------------------------------------------------
-// Destructor.
-// ---------------------------------------------------------------------------
-//
-OSN_EXPORT AlfMeshVisualAttributeSetter::~AlfMeshVisualAttributeSetter()
-    {
-    }
-
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-IAlfVariantType* AlfMeshVisualAttributeSetter::getData(AlfAttribute& aAttr, IAlfMap* aData)
-    {
-    IAlfVariantType* data = 0;
-    const char* dataField = aAttr.getDataField();
-    if (dataField)
-        {
-        data = aData->item(UString(dataField));
-        }
-    return data;
-    }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-int AlfMeshVisualAttributeSetter::getTime(const AlfAttribute& aAttr, bool aImmediate)
-    {
-    int time = 0;
-    if (!aImmediate)
-        {
-        time = aAttr.getTime();
-        }
-
-    return time;
-    }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-
-void AlfMeshVisualAttributeSetter::handleDynamicDataAttribute(CAlfVisual & aVisual,
-        AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData)
-    {
-    if (!doHandleDynamicDataAttribute(aVisual, aAttr, aContainer, aData))
-        {
-        AlfCommonVisualAttributeSetter::handleDynamicDataAttribute(
-            aVisual, aAttr, aContainer, aData);
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void AlfMeshVisualAttributeSetter::handleStaticDataAttribute(
-    CAlfVisual &aVisual, AlfAttribute& aAttr,
-    AlfAttributeContainer& aContainer, IAlfMap* aData)
-    {
-    CAlfMeshVisual* meshVisual = dynamic_cast<CAlfMeshVisual*>(&aVisual);
-    if (!meshVisual)
-        {
-        ALF_THROW ( AlfDataException, ECommonError, "AlfMeshVisualAttributeSetter" )
-        }
-    if (!aData)  ALF_THROW ( AlfDataException, EInvalidVariantDataType, "AlfMeshVisualAttributeSetter" )
-
-        const char* dataField = aAttr.getDataField();
-    if ( !dataField )  ALF_THROW ( AlfDataException, EInvalidAttribute, "AlfMeshVisualAttributeSetter" )
-
-        IAlfVariantType* data = aData->item ( UString(dataField));
-
-    const char* attrName = aAttr.name();
-
-    if (data)
-        {
-        if (!strcmp(attrName,KMeshType))
-            {
-            if (data->type() == IAlfVariantType::EInt)
-                {
-                int val = data->integer();
-                TRAPD(err,meshVisual->CreateMeshL(val));
-                if (err!=KErrNone)
-                    {
-                    ALF_THROW ( AlfDataException, err, "AlfMeshVisualAttributeSetter")
-                    }
-                }
-            }
-        else if (!strcmp(attrName, KImagePath))
-            {
-            if (data->type() == IAlfVariantType::EString)
-                {
-                TPtrC8 src;
-                src.Set((TUint8*)data->string().getUtf8());
-
-                HandleImagePathAttribute( src, meshVisual, primary );
-                }
-            }
-        else if (!strcmp(attrName,KSecondaryImagePath))
-            {
-            if (data->type() == IAlfVariantType::EString)
-                {
-                TPtrC8 src;
-                src.Set((TUint8*)data->string().getUtf8());
-
-                HandleImagePathAttribute( src, meshVisual, secondary );
-                }
-            }
-        else if (!strcmp(attrName,KSpecularImagePath))
-            {
-            if (data->type() == IAlfVariantType::EString)
-                {
-                TPtrC8 src;
-                src.Set((TUint8*)data->string().getUtf8());
-
-                HandleImagePathAttribute( src, meshVisual, specular );
-                }
-            }
-        else
-            {
-            //check, if dynamic attribute(but set by user as static), if so, set attributes immediately.
-            //If not, the function will call baseclass SetAttributeValue.
-            if (!doHandleDynamicDataAttribute(aVisual, aAttr, aContainer, aData, true))
-                {
-                AlfCommonVisualAttributeSetter::handleStaticDataAttribute(
-                    aVisual, aAttr, aContainer, aData);
-                }
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void AlfMeshVisualAttributeSetter::handleDynamicAttribute(CAlfVisual &aVisual,
-        AlfAttribute& aAttr, AlfAttributeContainer& aContainer)
-    {
-    if (!doHandleDynamicAttribute(aVisual, aAttr, aContainer))
-        {
-        AlfCommonVisualAttributeSetter::handleDynamicAttribute(
-            aVisual, aAttr, aContainer);
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void AlfMeshVisualAttributeSetter::handleStaticAttribute(
-    CAlfVisual& aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer)
-    {
-    CAlfMeshVisual* meshVisual = dynamic_cast<CAlfMeshVisual*>(&aVisual);
-    if(!meshVisual)
-        {
-        return;
-        }
-    const char* attrName = aAttr.name();
-
-    // meshVisual attributes
-    if (!strcmp(attrName,KMeshType))
-        {
-        int val = aAttr.intValue();
-        TRAPD(err,meshVisual->CreateMeshL(val));
-        if (err!=KErrNone)
-            {
-            ALF_THROW(AlfDataException, err, "AlfMeshVisualAttributeSetter");
-            }
-        }
-    else if (!strcmp(attrName,KImagePath))
-        {
-        TPtrC8 src((TUint8*)aAttr.stringValue().getUtf8());        
-        HandleImagePathAttribute( src, meshVisual, primary );
-        }
-    else if (!strcmp(attrName,KSecondaryImagePath))
-        {
-        TPtrC8 src((TUint8*)aAttr.stringValue().getUtf8());        
-        HandleImagePathAttribute( src, meshVisual, secondary );
-        }
-    else if (!strcmp(attrName,KSpecularImagePath))
-        {
-        TPtrC8 src((TUint8*)aAttr.stringValue().getUtf8());        
-        HandleImagePathAttribute( src, meshVisual, specular );
-        }
-    else
-        {
-        if (!doHandleDynamicAttribute(aVisual, aAttr, aContainer, true))
-            {
-            AlfCommonVisualAttributeSetter::handleStaticAttribute(aVisual, aAttr, aContainer);
-            }
-        }
-    }
-
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-OSN_EXPORT void AlfMeshVisualAttributeSetter::setAttributeValue(
-    CAlfVisual &aVisual,
-    AlfAttributeContainer* aContainer,
-    IAlfMap* aData)
-    {
-    CAlfMeshVisual* meshVisual = dynamic_cast<CAlfMeshVisual*>(&aVisual);
-    if (!meshVisual)
-        {
-        ALF_THROW ( AlfVisualException, EInvalidVisual, "AlfMeshVisualAttributeSetter")
-        }
-
-    AlfCommonVisualAttributeSetter::setAttributeValue(
-        aVisual, aContainer, aData);
-    }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-OSN_EXPORT TAlfCommand* AlfMeshVisualAttributeSetter::createCommand(
-    CAlfVisual& /*aVisual*/, AlfAttributeContainer* /*aContainer*/,
-    IAlfMap* /*aData*/, int /*aTransitionTime*/, CAlfVisual* /*aRefVisual*/)
-    {
-    TAlfCommand* cmd = 0;
-    return cmd;
-    }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-OSN_EXPORT void AlfMeshVisualAttributeSetter::createAndSendCommands(
-    CAlfVisual& aVisual,
-    AlfAttributeContainer* aContainer,
-    CAlfVisual* aRefVisual )
-    {
-
-    // Call the base class implementation.It goes through its loop and checks if there are attributes
-    // that it handles.
-    AlfCommonVisualAttributeSetter::createAndSendCommands(
-        aVisual,
-        aContainer,
-        aRefVisual );
-    }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-
-bool AlfMeshVisualAttributeSetter::doHandleDynamicDataAttribute(CAlfVisual & aVisual,
-        AlfAttribute& aAttr, AlfAttributeContainer& /*aContainer*/, IAlfMap* aData, bool aImmediate)
-    {
-    bool handled = true;
-
-    if (!aData)
-        {
-        ALF_THROW ( AlfDataException, EInvalidVariantDataType, "AlfMeshVisualAttributeSetter" )
-        }
-    else
-        {
-        CAlfMeshVisual* meshVisual = dynamic_cast<CAlfMeshVisual*>(&aVisual);
-        if(!meshVisual)
-            {
-            return false;
-            }
-        const char* attrName = aAttr.name();
-
-        if ( !strcmp( attrName, KSecondaryAlpha ) )
-            {
-            const IAlfVariantType* data = getData(aAttr, aData);
-            if (data && data->type() == IAlfVariantType::EReal)
-                {
-                TAlfTimedValue tVal(data->real(), getTime(aAttr, aImmediate));
-                tVal.SetStyle(aAttr.getInterpolationStyle());
-                tVal.SetMappingFunctionIdentifier( aAttr.getMappingFunctionId() );
-                meshVisual->SetSecondaryAlpha( tVal );
-                }
-            }
-        else if ( !strcmp( attrName, KYawAngle ) )
-            {
-            const IAlfVariantType* data = getData(aAttr, aData);
-            if (data && data->type() == IAlfVariantType::EReal)
-                {
-                TAlfTimedValue tVal(data->real(), getTime(aAttr, aImmediate));
-                tVal.SetStyle(aAttr.getInterpolationStyle());
-                tVal.SetMappingFunctionIdentifier( aAttr.getMappingFunctionId() );
-                meshVisual->SetYawAngle( tVal );
-                }
-            }
-        else if ( !strcmp( attrName, KPitchAngle ) )
-            {
-            const IAlfVariantType* data = getData(aAttr, aData);
-            if (data && data->type() == IAlfVariantType::EReal)
-                {
-                TAlfTimedValue tVal(data->real(), getTime(aAttr, aImmediate));
-                tVal.SetStyle(aAttr.getInterpolationStyle());
-                tVal.SetMappingFunctionIdentifier( aAttr.getMappingFunctionId() );
-                meshVisual->SetPitchAngle( tVal );
-                }
-            }
-        else if ( !strcmp( attrName, KScale ) )
-            {
-            const IAlfVariantType* data = getData(aAttr, aData);
-            if (data && data->type() == IAlfVariantType::EReal)
-                {
-                TAlfTimedValue tVal(data->real(), getTime(aAttr, aImmediate));
-                tVal.SetStyle(aAttr.getInterpolationStyle());
-                tVal.SetMappingFunctionIdentifier( aAttr.getMappingFunctionId() );
-                meshVisual->SetScale( tVal );
-                }
-            }
-        else
-            {
-            handled = false;
-            }
-        }
-
-    return handled;
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-bool AlfMeshVisualAttributeSetter::doHandleDynamicAttribute(
-    CAlfVisual &aVisual, AlfAttribute& aAttr,
-    AlfAttributeContainer& /*aContainer*/, bool aImmediate)
-    {
-    CAlfMeshVisual* meshVisual = dynamic_cast<CAlfMeshVisual*>(&aVisual);
-    if(!meshVisual)
-        {
-        return false;
-        }
-
-    const char* attrName = aAttr.name();
-    bool handled = true;
-
-    // KSecondaryAlpha
-    if (!strcmp(attrName, KSecondaryAlpha))
-        {
-        TAlfTimedValue tVal(aAttr.getSourceValue()->realValue());
-        tVal.SetTarget(aAttr.getTargetValue()->realValue(),getTime(aAttr, aImmediate));
-        tVal.SetStyle( aAttr.getInterpolationStyle() );
-        tVal.SetMappingFunctionIdentifier( aAttr.getMappingFunctionId() );
-        meshVisual->SetSecondaryAlpha( tVal );
-        }
-    //KYawAngle
-    else if (!strcmp(attrName, KYawAngle))
-        {
-        TAlfTimedValue tVal((TReal32)aAttr.getSourceValue()->realValue());
-        tVal.SetTarget((TReal32)aAttr.getTargetValue()->realValue(),getTime(aAttr, aImmediate));
-        tVal.SetStyle( aAttr.getInterpolationStyle() );
-        tVal.SetMappingFunctionIdentifier( aAttr.getMappingFunctionId() );
-        meshVisual->SetYawAngle( tVal );
-        }
-    //KPitchAngle
-    else if (!strcmp(attrName, KPitchAngle))
-        {
-        TAlfTimedValue tVal((TReal32)aAttr.getSourceValue()->realValue());
-        tVal.SetTarget((TReal32)aAttr.getTargetValue()->realValue(),getTime(aAttr, aImmediate));
-        tVal.SetStyle( aAttr.getInterpolationStyle() );
-        tVal.SetMappingFunctionIdentifier( aAttr.getMappingFunctionId() );
-        meshVisual->SetPitchAngle( tVal );
-        }
-    //KScale
-    else if (!strcmp(attrName,KScale))
-        {
-        TAlfTimedValue tVal((TReal32)aAttr.getSourceValue()->realValue());
-        tVal.SetTarget((TReal32)aAttr.getTargetValue()->realValue(),getTime(aAttr, aImmediate));
-        tVal.SetStyle( aAttr.getInterpolationStyle() );
-        tVal.SetMappingFunctionIdentifier( aAttr.getMappingFunctionId());
-        meshVisual->SetScale( tVal );
-        }
-    else // Call the base class implementation also.
-        //It goes through the same loop again and checks if there are attributes that it handles.
-        {
-        handled = false;
-        }
-
-    return handled;
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void AlfMeshVisualAttributeSetter::HandleImagePathAttribute(
-    const TPtrC8& aStringValue,
-    CAlfMeshVisual* aVisual,
-    imageCategory aImageCategory )
-    {
-    auto_ptr<HBufC> DesC;
-    TRAPD( err, DesC.reset(CnvUtfConverter::ConvertToUnicodeFromUtf8L(aStringValue)));
-    if ( err != KErrNone )
-        {
-        ALF_THROW( AlfDataException, err, "AlfMeshVisualAttributeSetter" );
-        }
-
-    // check if the texture is already loaded
-    const TInt existingTextureId = aVisual->Env().TextureManager().TextureId(*(DesC.get()));
-    if ( existingTextureId != KErrNotFound )
-        {
-        const CAlfTexture* texture = aVisual->Env().TextureManager().Texture( existingTextureId );
-
-        if ( aImageCategory == primary )
-            {
-            aVisual->SetImage(TAlfImage(*texture));
-            }
-        else if ( aImageCategory == secondary )
-            {
-            aVisual->SetSecondaryImage(TAlfImage(*texture));
-            }
-        else // specular image
-            {
-            aVisual->SetSpecularImage(TAlfImage(*texture));
-            }
-        }
-    else
-        {
-        mImpl->mLoadedTextures.resize(mImpl->mLoadedTextures.count()+1);
-
-        CAlfTexture* texture = NULL;
-        TRAP( err, texture = &(aVisual->Env().TextureManager().LoadTextureL(
-            *(DesC.get()), EAlfTextureFlagDefault, KAlfAutoGeneratedTextureId)));
-
-        if ( err != KErrNone )
-            {
-            ALF_THROW( AlfDataException, err, "AlfMeshVisualAttributeSetter" );
-            }
-
-        // This cannot fail because the array has already been resized
-        mImpl->mLoadedTextures.insert(mImpl->mLoadedTextures.count(),texture);
-
-        if ( aImageCategory == primary )
-            {
-            aVisual->SetImage(TAlfImage(*texture));
-            }
-        else if ( aImageCategory == secondary )
-            {
-            aVisual->SetSecondaryImage(TAlfImage(*texture));
-            }
-        else // specular image
-            {
-            aVisual->SetSpecularImage(TAlfImage(*texture));
-            }
-        }
-    }
-
-
-    }// Alf