widgetmodel/alfwidgetmodel/src/alfattribute.cpp
changeset 0 e83bab7cf002
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetmodel/alfwidgetmodel/src/alfattribute.cpp	Thu Dec 17 08:56:02 2009 +0200
@@ -0,0 +1,564 @@
+/*
+* 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:   Implementation for creating different types of attributes.
+*
+*/
+
+
+#include <osn/osnnew.h>
+#include <osn/ustring.h>
+#include <osn/alfptrvector.h>
+#include "alf/alfattribute.h"
+#include <alf/alfdataexception.h>
+#include <stdexcept>
+#include <alf/alftimedvalue.h>
+#include <alf/alfattributeexception.h>
+
+using namespace osncore;
+
+namespace Alf
+    {
+
+
+class AlfAttributeImpl
+    {
+public:
+    AlfAttributeImpl():mCategory(AlfAttribute::EStatic),
+            mInterpolationStyle(EAlfTimedValueStyleUseSystemDefault),
+            mTime(0),
+            mDelay(0),
+            mMappingFunctionId(0),
+            mDirtyFlag(true)
+        {
+        }
+
+    ~AlfAttributeImpl()
+        {
+        }
+
+    UString mName;
+    AlfAttribute::attributecategory mCategory;
+    TAlfInterpolationStyle mInterpolationStyle;
+    int mTime;
+    int mDelay;
+    int mMappingFunctionId;
+    UString mDataField;
+    AlfPtrVector<AlfAttributeValueType> mTargetValueContainer;
+    AlfPtrVector<AlfAttributeValueType> mSourceValueContainer;
+    bool mDirtyFlag;
+    };
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttribute::AlfAttribute()
+    {
+    reset("", 0, attributecategory(0));
+    }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttribute::AlfAttribute(const char* aName,
+                                      attributecategory aCategory)
+    {
+    reset(aName, 0, aCategory);
+    }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttribute::AlfAttribute(const char* aName, int aValue,
+                                      TAlfUnit aUnit, attributecategory aCategory)
+    {
+    auto_ptr<AlfAttributeValueType> value(new (EMM)
+                                          AlfAttributeValueType(aValue, aUnit));
+    reset(aName, value.get(), aCategory);
+    value.release();
+    }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttribute::AlfAttribute(const char* aName, float aValue,
+                                      TAlfUnit aUnit, attributecategory aCategory)
+    {
+    auto_ptr<AlfAttributeValueType> value(
+        new( EMM ) AlfAttributeValueType( aValue, aUnit ) );
+    reset(aName, value.get(), aCategory);
+    value.release();
+    }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttribute::AlfAttribute(const char* aName,
+                                      const UString& aValue, attributecategory aCategory)
+    {
+    if (aCategory == EStaticData)
+        {
+        reset(aName, 0, aCategory);
+        setDataField(aValue.getUtf8());
+        }
+    else
+        {
+        auto_ptr<AlfAttributeValueType> value(
+            new( EMM ) AlfAttributeValueType( aValue ) );
+        reset(aName, value.get(), aCategory);
+        value.release();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttribute::~AlfAttribute()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Assigment operation.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttribute& AlfAttribute::operator=(const AlfAttribute& aAttribute)
+    {
+    if ( this == &aAttribute )
+        {
+        return *this;
+        }
+
+    mData.reset( new( EMM ) AlfAttributeImpl() );
+
+    mData->mCategory = aAttribute.mData->mCategory;
+    mData->mName = UString(aAttribute.name());
+    mData->mInterpolationStyle = aAttribute.mData->mInterpolationStyle;
+
+    mData->mTime = aAttribute.mData->mTime;
+    mData->mDelay = aAttribute.mData->mDelay;
+    mData->mMappingFunctionId = aAttribute.mData->mMappingFunctionId;
+    mData->mDataField = UString(aAttribute.getDataField());
+
+    int count = aAttribute.mData->mTargetValueContainer.count();
+    mData->mTargetValueContainer.resize( count );
+    for ( int i = 0 ; i < count ; i++ )
+        {
+        mData->mTargetValueContainer.insert(
+            i, cloneValueType( aAttribute.mData->mTargetValueContainer[i] ) );
+        }
+
+    count = aAttribute.mData->mSourceValueContainer.count();
+    mData->mSourceValueContainer.resize( count );
+    for ( int i = 0 ; i < count ; i++ )
+        {
+        mData->mSourceValueContainer.insert(
+            i, cloneValueType( aAttribute.mData->mSourceValueContainer[i] ) );
+        }
+
+    return *this;
+    }
+
+// ---------------------------------------------------------------------------
+// Clones the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttribute* AlfAttribute::clone()
+    {
+    auto_ptr<AlfAttribute> clone( new( EMM ) AlfAttribute() );
+    *clone.get() = *this;
+    return clone.release();
+    }
+
+// ---------------------------------------------------------------------------
+// Gets the name of the Attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const char* AlfAttribute::name() const
+    {
+    return mData->mName.getUtf8();
+    }
+
+// ---------------------------------------------------------------------------
+// Gets the category of the atrribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttribute::attributecategory AlfAttribute::category() const
+    {
+    return mData->mCategory;
+    }
+
+// ---------------------------------------------------------------------------
+// Gets the type of the target atrribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttributeValueType::Type AlfAttribute::type(
+    unsigned int aIndex) const
+    {
+    if (aIndex >= mData->mTargetValueContainer.count())
+        {
+        ALF_THROW(AlfAttributeException,EInvalidAttribute,"AlfAttribute")
+        }
+    return mData->mTargetValueContainer[aIndex]->type();
+    }
+
+// ---------------------------------------------------------------------------
+// Gets the int value.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int AlfAttribute::intValue(unsigned int aIndex) const
+    {
+    if (aIndex >= mData->mTargetValueContainer.count())
+        {
+        ALF_THROW(AlfAttributeException,EInvalidAttribute,"AlfAttribute")
+        }
+    return mData->mTargetValueContainer[aIndex]->intValue();
+    }
+
+// ---------------------------------------------------------------------------
+// Gets the real value.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT float AlfAttribute::realValue(unsigned int aIndex) const
+    {
+    if (aIndex >= mData->mTargetValueContainer.count())
+        {
+        ALF_THROW(AlfAttributeException,EInvalidAttribute,"AlfAttribute")
+        }
+    return mData->mTargetValueContainer[aIndex]->realValue();
+    }
+
+// ---------------------------------------------------------------------------
+// Gets the string value.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const UString& AlfAttribute::stringValue(unsigned int aIndex) const
+    {
+    if (aIndex >= mData->mTargetValueContainer.count())
+        {
+        ALF_THROW(AlfAttributeException,EInvalidAttribute,"AlfAttribute")
+        }
+    return mData->mTargetValueContainer[aIndex]->stringValue();
+    }
+
+// ---------------------------------------------------------------------------
+// Returns true if attribute is set.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT bool AlfAttribute::isValueSet() const
+    {
+    return mData->mTargetValueContainer.count() > 0;
+    }
+
+// ---------------------------------------------------------------------------
+// Gets the unit of the value.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAlfUnit AlfAttribute::unit(unsigned int aIndex) const
+    {
+    if (aIndex >= mData->mTargetValueContainer.count())
+        {
+        ALF_THROW(AlfAttributeException,EInvalidAttribute,"AlfAttribute")
+        }
+    return mData->mTargetValueContainer[aIndex]->unit();
+    }
+
+// ---------------------------------------------------------------------------
+// Adds a new target value to the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT  void AlfAttribute::addTargetValue(AlfAttributeValueType* aValue)
+    {
+    mData->mTargetValueContainer.resize(mData->mTargetValueContainer.count() +1 );
+    mData->mTargetValueContainer.insert(mData->mTargetValueContainer.count(), aValue);
+    }
+
+// ---------------------------------------------------------------------------
+// Gets target value count.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT  unsigned int AlfAttribute::getTargetValueCount() const
+    {
+    return mData->mTargetValueContainer.count();
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the target value of the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttribute::setTargetValue(AlfAttributeValueType* aValue,
+        unsigned int aIndex)
+    {
+    if (aIndex < mData->mTargetValueContainer.count())
+        {
+        mData->mTargetValueContainer.remove(aIndex);
+        }
+    mData->mTargetValueContainer.insert(aIndex, aValue);
+    mData->mDirtyFlag=true;
+    }
+
+// ---------------------------------------------------------------------------
+// Gets the target value of the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttributeValueType* AlfAttribute::getTargetValue(
+    unsigned int aIndex) const
+    {
+    if (aIndex >= mData->mTargetValueContainer.count())
+        {
+        ALF_THROW(AlfAttributeException,EInvalidAttribute,"AlfAttribute")
+        }
+    return mData->mTargetValueContainer[aIndex];
+    }
+
+// ---------------------------------------------------------------------------
+// Removes the target value of the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttribute::removeTargetValue(unsigned int aIndex)
+    {
+    if (aIndex >= mData->mTargetValueContainer.count())
+        {
+        ALF_THROW(AlfAttributeException,EInvalidAttribute,"AlfAttribute")
+        }
+    mData->mTargetValueContainer.remove(aIndex);
+    }
+
+// ---------------------------------------------------------------------------
+// Adds a new source value to the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttribute::addSourceValue(AlfAttributeValueType* aValue)
+    {
+    mData->mSourceValueContainer.resize(mData->mSourceValueContainer.count() +1 );
+    mData->mSourceValueContainer.insert(mData->mSourceValueContainer.count(), aValue);
+    }
+
+// ---------------------------------------------------------------------------
+// Gets source value count.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT unsigned int AlfAttribute::getSourceValueCount() const
+    {
+    return mData->mSourceValueContainer.count();
+    }
+
+// ---------------------------------------------------------------------------
+// Adds a new source value to the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttribute::setSourceValue(AlfAttributeValueType* aValue,
+        unsigned int aIndex)
+    {
+    if (aIndex < mData->mSourceValueContainer.count())
+        {
+        mData->mSourceValueContainer.remove(aIndex);
+        }
+    mData->mSourceValueContainer.insert(aIndex, aValue);
+    mData->mDirtyFlag=true;
+    }
+
+// ---------------------------------------------------------------------------
+//  Gets the source value of the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT AlfAttributeValueType* AlfAttribute::getSourceValue(
+    unsigned int aIndex) const
+    {
+    if (aIndex >= mData->mSourceValueContainer.count())
+        {
+        ALF_THROW(AlfAttributeException,EInvalidAttribute,"AlfAttribute")
+        }
+    return mData->mSourceValueContainer[aIndex];
+    }
+
+// ---------------------------------------------------------------------------
+// Removes the source value of the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttribute::removeSourceValue(unsigned int aIndex)
+    {
+    if (aIndex >= mData->mSourceValueContainer.count())
+        {
+        ALF_THROW(AlfAttributeException,EInvalidAttribute,"AlfAttribute")
+        }
+    mData->mSourceValueContainer.remove(aIndex);
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the interpolation style of the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttribute::setInterpolationStyle(
+    TAlfInterpolationStyle aInterpolationStyle)
+    {
+    mData->mInterpolationStyle = aInterpolationStyle;
+    mData->mDirtyFlag=true;
+    }
+
+// ---------------------------------------------------------------------------
+// Gets the interpolation style of the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT TAlfInterpolationStyle AlfAttribute::getInterpolationStyle()const
+    {
+    return mData->mInterpolationStyle;
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the transition time for the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttribute::setTime(int aTime)
+    {
+    mData->mTime = aTime;
+    mData->mDirtyFlag=true;
+    }
+
+// ---------------------------------------------------------------------------
+// Gets the transition time for the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int AlfAttribute::getTime()const
+    {
+    return mData->mTime;
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the mapping function id for the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttribute::setMappingFunctionId(int aId)
+    {
+    mData->mMappingFunctionId = aId;
+    mData->mDirtyFlag=true;
+    }
+
+// ---------------------------------------------------------------------------
+// Gets the mapping function id for the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int AlfAttribute::getMappingFunctionId()const
+    {
+    return mData->mMappingFunctionId;
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the datafield for the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttribute::setDataField(const char* aDataField)
+    {
+    mData->mDataField = UString(aDataField);
+    mData->mDirtyFlag = true;
+    }
+
+// ---------------------------------------------------------------------------
+// Gets the datafield for the attribute.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT const char* AlfAttribute::getDataField() const
+    {
+    return mData->mDataField.getUtf8();
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the delay before the transition.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT void AlfAttribute::setDelay(int aDelay)
+    {
+    mData->mDelay = aDelay;
+    mData->mDirtyFlag = true;
+    }
+
+// ---------------------------------------------------------------------------
+// Gets the delay before the transition.
+// ---------------------------------------------------------------------------
+//
+OSN_EXPORT int AlfAttribute::getDelay() const
+    {
+    return mData->mDelay;
+    }
+
+// ---------------------------------------------------------------------------
+// Resets the data.
+// ---------------------------------------------------------------------------
+//
+void AlfAttribute::reset( const char* aName, AlfAttributeValueType* aValue,
+                          attributecategory aCategory)
+    {
+    mData.reset(new (EMM) AlfAttributeImpl());
+
+    mData->mCategory = aCategory;
+    mData->mName = UString(aName);
+    mData->mTargetValueContainer.remove(0);
+    mData->mTargetValueContainer.insert(0, aValue);
+    }
+
+// ---------------------------------------------------------------------------
+// Helper function for cloning value type.
+// ---------------------------------------------------------------------------
+//
+AlfAttributeValueType* AlfAttribute::cloneValueType(
+    AlfAttributeValueType* aValue) const
+    {
+    AlfAttributeValueType* ret = 0;
+
+    if (aValue)
+        {
+        switch (aValue->type())
+            {
+            case AlfAttributeValueType::EInt:
+                {
+                ret = new (EMM) AlfAttributeValueType(
+                    aValue->intValue(), aValue->unit());
+                break;
+                }
+            case AlfAttributeValueType::EFloat:
+                {
+                ret = new (EMM) AlfAttributeValueType(
+                    aValue->realValue(), aValue->unit());
+                break;
+                }
+            case AlfAttributeValueType::EString:
+                {
+                ret = new (EMM) AlfAttributeValueType(
+                    aValue->stringValue());
+                break;
+                }
+            default:
+                break;
+            }
+        }
+
+    return ret;
+    }
+OSN_EXPORT bool AlfAttribute::isDirty( ) const
+    {
+    return mData->mDirtyFlag;
+    }
+
+OSN_EXPORT void AlfAttribute::setDirty(bool aFlag )
+    {
+    mData->mDirtyFlag = aFlag;
+    }
+
+    } // Alf