--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/Client/src/alfpropertyowner.cpp Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,348 @@
+/*
+* 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: Property object for Alfred
+*
+*/
+
+
+
+#include "alf/alfpropertyowner.h"
+
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAlfPropertyOwner::CAlfPropertyOwner()
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAlfPropertyOwner::~CAlfPropertyOwner()
+ {
+ PropertyClear();
+ }
+
+// ---------------------------------------------------------------------------
+// Remove property
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CAlfPropertyOwner::PropertyRemove(const TDesC8& aName)
+ {
+ TInt index;
+
+ if (!Find(aName, &index))
+ {
+ return EFalse;
+ }
+
+ delete iProperties[index];
+ iProperties.Remove(index);
+ iProperties.Compress();
+
+ return ETrue;
+ }
+
+// ---------------------------------------------------------------------------
+// Clear property
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfPropertyOwner::PropertyClear()
+ {
+ iProperties.ResetAndDestroy();
+ }
+
+
+// We have a different registration method for each property type.
+
+// ---------------------------------------------------------------------------
+// Set integer property
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CAlfPropertyOwner::PropertySetIntegerL(const TDesC8& aName, TInt aVal, TInt aMin, TInt aMax)
+ {
+ CAlfPropertyInteger* property;
+ TAlfPropertyType type;
+ TInt index;
+
+ if (aName.Length() == 0)
+ {
+ // Cannot have zero-length name as an argument.
+ return EFalse;
+ }
+
+ if (Find(aName, &index, &type))
+ {
+ // Property exists already.
+ if (type != EAlfPropertyTypeInteger)
+ {
+ // Wrong type. We have to exit without doing anything.
+ return EFalse;
+ }
+
+ // Modify existing property.
+ property = static_cast<CAlfPropertyInteger*>(iProperties[index]);
+ property->Set(TRangedValue(aVal, aMin, aMax));
+ }
+ else
+ {
+ // Not found, so add new item to the property list.
+ property = new (ELeave) CAlfPropertyInteger();
+ CleanupStack::PushL(property);
+ property->ConstructL(aName);
+ CleanupStack::Pop(property);
+
+ property->Set(TRangedValue(aVal, aMin, aMax));
+
+ User::LeaveIfError(iProperties.Append(property));
+ }
+
+ return ETrue;
+ }
+
+// ---------------------------------------------------------------------------
+// Find integer property
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CAlfPropertyOwner::PropertyFindInteger(const TDesC8& aName, TInt* aValue) const
+ {
+ TInt index;
+
+ if (!FindOfType(aName, &index, EAlfPropertyTypeInteger))
+ {
+ return EFalse;
+ }
+
+ if (aValue)
+ {
+ // Clamp the value.
+ CAlfPropertyInteger* foundVal = static_cast<CAlfPropertyInteger*>(iProperties[index]);
+
+ *aValue = Min(foundVal->Data().iValue, foundVal->Data().iMax);
+ *aValue = Max(*aValue, foundVal->Data().iMin);
+ }
+
+ return ETrue;
+ }
+
+// ---------------------------------------------------------------------------
+// Find complete ranged value
+// ---------------------------------------------------------------------------
+//
+TBool CAlfPropertyOwner::PropertyFindInteger(const TDesC8& aName, TRangedValue& aValue) const
+ {
+ TInt index;
+
+ if (FindOfType(aName, &index, EAlfPropertyTypeInteger))
+ {
+ CAlfPropertyInteger* foundVal = static_cast<CAlfPropertyInteger*>(iProperties[index]);
+
+ aValue = foundVal->Data();
+ return ETrue;
+ }
+
+ return EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// Set string property
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CAlfPropertyOwner::PropertySetStringL(const TDesC8& aName, const TDesC& aValue)
+ {
+ CAlfPropertyString* property;
+ TAlfPropertyType type;
+ TInt index;
+
+ if (aName.Length() == 0)
+ {
+ // Cannot have zero-length name as an argument.
+ return EFalse;
+ }
+
+ if (Find(aName, &index, &type))
+ {
+ // Property exists already.
+ if (type != EAlfPropertyTypeString)
+ {
+ // Wrong type. We have to exit without doing anything.
+ return EFalse;
+ }
+
+ // Modify existing property.
+ property = static_cast<CAlfPropertyString*>(iProperties[index]);
+ property->SetL(aValue);
+ }
+ else
+ {
+ // Not found, so add new item to the property list.
+ property = new (ELeave) CAlfPropertyString();
+ CleanupStack::PushL(property);
+ property->ConstructL(aName);
+ CleanupStack::Pop(property);
+
+ property->SetL(aValue);
+
+ User::LeaveIfError(iProperties.Append(property));
+ }
+
+ return ETrue;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Find string property
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CAlfPropertyOwner::PropertyFindString(const TDesC8& aName, TDesC** aValue) const
+ {
+ TInt index;
+
+ if (!FindOfType(aName, &index, EAlfPropertyTypeString))
+ {
+ return EFalse;
+ }
+
+ CAlfPropertyString* foundVal = static_cast<CAlfPropertyString*>(iProperties[index]);
+
+ if (aValue)
+ {
+ *aValue = foundVal->Data();
+ }
+
+ return ETrue;
+ }
+
+
+// Private methods
+
+// ---------------------------------------------------------------------------
+// Find property
+// ---------------------------------------------------------------------------
+//
+TBool CAlfPropertyOwner::Find(const TDesC8& aName, TInt* aIndex, TAlfPropertyType* aType) const
+ {
+ TIdentityRelation<CAlfProperty> matchName( CAlfProperty::Matches );
+
+ if (iProperties.Count() == 0)
+ {
+ // Array is empty, nothing to find.
+ return false;
+ }
+
+ // Create a temporary property with the name we want to find.
+ CAlfProperty* toFind = new CAlfProperty();
+ if ( !toFind )
+ {
+ return EFalse;
+ }
+
+ TRAPD( err, toFind->ConstructL(aName) );
+ if ( err != KErrNone )
+ {
+ delete toFind;
+ return EFalse;
+ }
+
+ TInt found = iProperties.Find(toFind, matchName);
+ delete toFind;
+
+ if (found == KErrNotFound)
+ {
+ return EFalse;
+ }
+
+ CAlfProperty* foundProperty = iProperties[found];
+
+ if (aIndex)
+ {
+ *aIndex = found;
+ }
+
+ if (aType)
+ {
+ *aType = foundProperty->Type();
+ }
+
+ return ETrue;
+ }
+
+// ---------------------------------------------------------------------------
+// Find property and check for the correct type
+// ---------------------------------------------------------------------------
+//
+TBool CAlfPropertyOwner::FindOfType(const TDesC8& aName, TInt* aIndex, TAlfPropertyType aRequiredType) const
+ {
+ TAlfPropertyType foundType;
+
+ if (!Find(aName, aIndex, &foundType))
+ {
+ return EFalse;
+ }
+
+ if (foundType != aRequiredType)
+ {
+ return EFalse;
+ }
+
+ // Return, with find index stored in return parameter.
+ return ETrue;
+ }
+
+
+EXPORT_C TInt CAlfPropertyOwner::CopyProperty(const CAlfPropertyOwner& aOwner, const TDesC8& aPropertyName)
+ {
+ TInt index(0), result(KErrNone);
+ TAlfPropertyType propertyType;
+
+ if (aOwner.Find(aPropertyName, &index, &propertyType))
+ {
+ switch (propertyType)
+ {
+ case EAlfPropertyTypeInteger:
+ {
+ TRangedValue value;
+ aOwner.PropertyFindInteger(aPropertyName, value); // we know it exists
+ TRAP(result, PropertySetIntegerL(aPropertyName, value.iValue, value.iMin, value.iMax))
+ break;
+ }
+ case EAlfPropertyTypeString:
+ {
+ TDesC* string = 0;
+ aOwner.PropertyFindString(aPropertyName, &string); // we know it exists
+ TRAP(result, PropertySetStringL(aPropertyName, *string))
+ break;
+ }
+ default:
+ result = KErrNotSupported;
+ break;
+ }
+ }
+ else
+ {
+ result = KErrNotFound;
+ }
+
+ return result;
+ }
+
+EXPORT_C void CAlfPropertyOwner::PropertyOwnerExtension(const TUid& /*aExtensionUid*/, TAny** /*aExtensionParams*/)
+ {
+
+ }
+