idlehomescreen/xmluirendering/uiengine/src/xnproperty.cpp
changeset 0 f72a12da539e
child 2 08c6ee43b396
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnproperty.cpp	Thu Dec 17 08:40:49 2009 +0200
@@ -0,0 +1,373 @@
+/*
+* Copyright (c) 2002-2004 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:  Xuikon property source
+*
+*/
+
+//  INCLUDE FILES
+#include "xnproperty.h"
+#include "xndomproperty.h"
+#include "xndompropertyvalue.h"
+#include "xndomlist.h"
+#include "xndomstringpool.h"
+#include <utf.h>
+#include <gdi.h>
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CXnProperty::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CXnProperty* CXnProperty::NewL( CXnDomProperty* aProperty )
+    {
+    CXnProperty* self = new ( ELeave ) CXnProperty;
+
+    CleanupStack::PushL( self );
+
+    self->ConstructL( aProperty );
+
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CXnProperty::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CXnProperty* CXnProperty::NewL( const TDesC8& aName,
+    CXnDomPropertyValue* aPropertyValue, CXnDomStringPool& aStringPool )
+    {
+    CXnProperty* self = new ( ELeave ) CXnProperty;
+
+    CleanupStack::PushL( self );
+
+    self->ConstructL( aName, aPropertyValue, aStringPool );
+
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CXnProperty::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CXnProperty* CXnProperty::NewL( const TDesC8& aPropertyName,
+    const TDesC8& aPropertyValue,
+    CXnDomPropertyValue::TPrimitiveValueType aValueType,
+    CXnDomStringPool& aStringPool )
+    {
+    CXnProperty* self = new ( ELeave ) CXnProperty;
+    CleanupStack::PushL( self );
+
+    self->ConstructL( aPropertyName, aPropertyValue, aValueType, aStringPool );
+
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CXnProperty::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CXnProperty* CXnProperty::NewL( const TDesC8& aPropertyName,
+    TReal aPropertyValue,
+    CXnDomPropertyValue::TPrimitiveValueType aValueType,
+    CXnDomStringPool& aStringPool )
+    {
+    CXnProperty* self = new ( ELeave ) CXnProperty;
+    CleanupStack::PushL( self );
+
+    self->ConstructL( aPropertyName, aPropertyValue, aValueType, aStringPool );
+
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CXnProperty::NewSharedL
+// -----------------------------------------------------------------------------
+//
+CXnProperty* CXnProperty::NewSharedL( CXnDomProperty* aProperty )
+    {
+    CXnProperty* self = new ( ELeave ) CXnProperty;
+
+    CleanupStack::PushL( self );
+
+    self->ConstructSharedL( aProperty );
+
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CXnProperty::~CXnProperty
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CXnProperty::~CXnProperty()
+    {
+    if ( iIsDomPropertyOwned )
+        {
+        delete iProperty;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CXnProperty::CXnProperty
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CXnProperty::CXnProperty()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CXnProperty::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CXnProperty::ConstructL( CXnDomProperty* aProperty )
+    {
+    iProperty = aProperty;
+    iIsDomPropertyOwned = ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CXnProperty::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CXnProperty::ConstructL( const TDesC8& aName,
+    CXnDomPropertyValue* aPropertyValue, CXnDomStringPool& aStringPool )
+    {
+    iProperty = CXnDomProperty::NewL( aName, aStringPool );
+    iIsDomPropertyOwned = ETrue;
+
+    CXnDomList& propertyValueList = iProperty->PropertyValueList();
+    propertyValueList.AddItemL( aPropertyValue );
+    }
+
+// -----------------------------------------------------------------------------
+// CXnProperty::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CXnProperty::ConstructL( const TDesC8& aPropertyName,
+    const TDesC8& aPropertyValue,
+    CXnDomPropertyValue::TPrimitiveValueType aValueType,
+    CXnDomStringPool& aStringPool )
+    {
+    iProperty = CXnDomProperty::NewL( aPropertyName, aStringPool );
+    iIsDomPropertyOwned = ETrue;
+
+    CXnDomPropertyValue* newValue = CXnDomPropertyValue::NewL( aStringPool );
+    CleanupStack::PushL( newValue );
+
+    newValue->SetStringValueL( aValueType, aPropertyValue );
+
+    CXnDomList& propertyValueList( iProperty->PropertyValueList() );
+
+    propertyValueList.AddItemL( newValue );
+
+    CleanupStack::Pop( newValue );
+    }
+
+// -----------------------------------------------------------------------------
+// CXnProperty::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CXnProperty::ConstructL( const TDesC8& aPropertyName,
+    TReal aPropertyValue,
+    CXnDomPropertyValue::TPrimitiveValueType aValueType,
+    CXnDomStringPool& aStringPool )
+    {
+    iProperty = CXnDomProperty::NewL( aPropertyName, aStringPool );
+    iIsDomPropertyOwned = ETrue;
+
+    CXnDomPropertyValue* newValue = CXnDomPropertyValue::NewL( aStringPool );
+    CleanupStack::PushL( newValue );
+
+    newValue->SetFloatValueL( aValueType, aPropertyValue );
+
+    CXnDomList& propertyValueList( iProperty->PropertyValueList() );
+
+    propertyValueList.AddItemL( newValue );
+
+    CleanupStack::Pop( newValue );
+    }
+
+// -----------------------------------------------------------------------------
+// CXnProperty::ConstructSharedL
+// -----------------------------------------------------------------------------
+//
+void CXnProperty::ConstructSharedL( CXnDomProperty* aProperty )
+    {
+    iProperty = aProperty;
+    iIsDomPropertyOwned = EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CXnProperty::EqualsL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CXnProperty::EqualsL( CXnProperty& aProperty ) const
+    {
+    TBool equals( EFalse );
+
+    if ( aProperty.Property()->PseudoClass() != iProperty->PseudoClass() )
+        {
+        return equals;
+        }
+
+    if ( aProperty.Property()->Name() != iProperty->Name() )
+        {
+        return equals;
+        }
+
+    CXnDomPropertyValue* value1 = static_cast< CXnDomPropertyValue* >(
+        iProperty->PropertyValueList().Item( 0 ) );
+    CXnDomPropertyValue::TPrimitiveValueType primitiveValueType1 =
+        value1->PrimitiveValueType();
+
+    CXnDomPropertyValue* value2 = static_cast< CXnDomPropertyValue* >(
+        aProperty.Property()->PropertyValueList().Item( 0 ) );
+    CXnDomPropertyValue::TPrimitiveValueType primitiveValueType2 =
+        value2->PrimitiveValueType();
+
+    switch ( primitiveValueType1 )
+        {
+        case CXnDomPropertyValue::ENumber:
+        case CXnDomPropertyValue::EPercentage:
+        case CXnDomPropertyValue::EEms:
+        case CXnDomPropertyValue::EExs:
+        case CXnDomPropertyValue::EPx:
+        case CXnDomPropertyValue::ECm:
+        case CXnDomPropertyValue::EMm:
+        case CXnDomPropertyValue::EIn:
+        case CXnDomPropertyValue::EPt:
+        case CXnDomPropertyValue::EPc:
+        case CXnDomPropertyValue::EDeg:
+        case CXnDomPropertyValue::ERad:
+        case CXnDomPropertyValue::EGrad:
+        case CXnDomPropertyValue::EMs:
+        case CXnDomPropertyValue::ES:
+        case CXnDomPropertyValue::EHz:
+        case CXnDomPropertyValue::EKHz:
+        case CXnDomPropertyValue::EUnitValue:
+            if ( primitiveValueType1 == primitiveValueType2 )
+                {
+                equals = ( value1->FloatValueL() == value2->FloatValueL() );
+                }
+            break;
+        case CXnDomPropertyValue::EString:
+        case CXnDomPropertyValue::EIdent:
+        case CXnDomPropertyValue::EUri:
+        case CXnDomPropertyValue::EAttr:
+        case CXnDomPropertyValue::EUnknown:
+            if ( primitiveValueType2 == CXnDomPropertyValue::EString ||
+                 primitiveValueType2 == CXnDomPropertyValue::EIdent ||
+                 primitiveValueType2 == CXnDomPropertyValue::EUri ||
+                 primitiveValueType2 == CXnDomPropertyValue::EAttr ||
+                 primitiveValueType2 == CXnDomPropertyValue::EUnknown )
+                {
+                equals = ( value1->StringValueL() == value2->StringValueL() );
+                }
+            break;
+        case CXnDomPropertyValue::ERgbColor:
+        case CXnDomPropertyValue::ERgbaColor:
+            if ( primitiveValueType1 == primitiveValueType2 )
+                {
+                TRgb rgb1( value1->RgbColorValueL() );
+                TRgb rgb2( value2->RgbColorValueL() );
+
+                equals = ( rgb1 == rgb2 );
+                }
+            break;
+        default:
+            break;
+        }
+
+    return equals;
+    }
+
+// -----------------------------------------------------------------------------
+// CXnProperty::Property
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CXnDomProperty* CXnProperty::Property()
+    {
+    return iProperty;
+    }
+
+// -----------------------------------------------------------------------------
+// CXnProperty::StringValueL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C HBufC* CXnProperty::StringValueL()
+    {
+    CXnDomPropertyValue* value = static_cast< CXnDomPropertyValue* >(
+        iProperty->PropertyValueList().Item( 0 ) );
+    const TDesC8& name = StringValue();
+    HBufC* utfName = HBufC::NewL( name.Length() );
+    TPtr16 ptr = utfName->Des();
+    CnvUtfConverter::ConvertToUnicodeFromUtf8( ptr, name );
+    return utfName;
+    }
+
+// -----------------------------------------------------------------------------
+// CXnProperty::StringValue
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC8& CXnProperty::StringValue()
+    {
+    CXnDomPropertyValue* value = static_cast< CXnDomPropertyValue* >(
+        iProperty->PropertyValueList().Item( 0 ) );
+    return value->StringValue();
+    }
+
+// -----------------------------------------------------------------------------
+// CXnProperty::FloatValueL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TReal CXnProperty::FloatValueL()
+    {
+    CXnDomPropertyValue* value = static_cast< CXnDomPropertyValue* >(
+        iProperty->PropertyValueList().Item( 0 ) );
+    return value->FloatValueL();
+    }
+
+// -----------------------------------------------------------------------------
+// CXnProperty::CloneL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CXnProperty* CXnProperty::CloneL()
+    {
+    CXnDomProperty* property = iProperty->CloneL();
+    CleanupStack::PushL( property );
+    CXnProperty* returnValue = CXnProperty::NewL( property );
+    CleanupStack::Pop( property );
+    return returnValue;
+    }