--- /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;
+ }