--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web_plat/widget_registry_api/inc/WidgetPropertyValue.h Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,257 @@
+/*
+* 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 the License "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: Holds property values.
+*
+*
+*/
+
+
+#ifndef WIDGETPROPERTYVALUE_H
+#define WIDGETPROPERTYVALUE_H
+
+#include <e32base.h>
+#include <s32strm.h>
+#include "WidgetRegistryConstants.h"
+
+// serialize length = header + value
+const TInt32 KWidgetPropertyValSerializeMaxLength = 32 + KWidgetRegistryVal;
+
+enum TWidgetPropertyType
+ {
+ EWidgetPropTypeUnknown = 0,
+ EWidgetPropTypeBool,
+ EWidgetPropTypeInt,
+ EWidgetPropTypeString,
+ EWidgetPropTypeUid,
+ EWidgetPropTypeBlob
+ };
+
+/**
+* CWidgetData
+* @since 3.1
+*/
+class CWidgetPropertyValue : public CBase
+ {
+public:
+ /**
+ * Two phase constructor
+ * @return none
+ * @since 3.1
+ **/
+ static CWidgetPropertyValue* NewL()
+ {
+ CWidgetPropertyValue *self = new ( ELeave ) CWidgetPropertyValue();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+ /**
+ * Destructor
+ * @return none
+ * @since 3.1
+ **/
+ ~CWidgetPropertyValue()
+ {
+ if ( EWidgetPropTypeString == iType )
+ {
+ delete iValue.s;
+ }
+ }
+
+ operator TInt() const
+ {
+ if ( EWidgetPropTypeInt == iType )
+ {
+ return iValue.i;
+ }
+ return 0;
+ }
+
+ operator const TDesC&()
+ {
+ if ( EWidgetPropTypeString == iType )
+ {
+ return *iValue.s;
+ }
+ return KNullDesC;
+ }
+
+ operator const TUid&()
+ {
+ if ( EWidgetPropTypeUid == iType )
+ {
+ return iValue.uid;
+ }
+ return KNullUid;
+ }
+
+ CWidgetPropertyValue& operator= (TInt i)
+ {
+ iValue.i = i;
+ iType = EWidgetPropTypeInt;
+ return *this;
+ }
+
+ CWidgetPropertyValue& operator= (const TDesC& s)
+ {
+ // self-assignment check
+ if ( iValue.s != &s )
+ {
+ delete iValue.s;
+ iValue.s = s.AllocL();
+ iType = EWidgetPropTypeString;
+ }
+ return *this;
+ }
+
+ CWidgetPropertyValue& operator= (TUid uid)
+ {
+ iValue.uid = uid;
+ iType = EWidgetPropTypeUid;
+ return *this;
+ }
+
+ void Reset()
+ {
+ if ( EWidgetPropTypeString == iType )
+ {
+ delete iValue.s;
+ iValue.s = NULL;
+ }
+ iType = EWidgetPropTypeUnknown;
+ }
+
+ void SerializeL( RWriteStream& aStream ) const
+ {
+ switch ( iType )
+ {
+ case EWidgetPropTypeUnknown:
+ aStream.WriteInt32L( 7 );
+ aStream.WriteL( _L("unknown"), 7 );
+ break;
+ case EWidgetPropTypeBool:
+ aStream.WriteInt32L( 4 );
+ aStream.WriteL( _L("bool"), 4 );
+ aStream.WriteInt32L( iValue.i );
+ break;
+ case EWidgetPropTypeInt:
+ aStream.WriteInt32L( 3 );
+ aStream.WriteL( _L("int"), 3 );
+ aStream.WriteInt32L( iValue.i );
+ break;
+ case EWidgetPropTypeString:
+ aStream.WriteInt32L( 3 );
+ aStream.WriteL( _L("str"), 3 );
+ aStream.WriteInt32L( iValue.s->Length() );
+ aStream.WriteL( *(iValue.s), iValue.s->Length() );
+ break;
+ case EWidgetPropTypeUid:
+ aStream.WriteInt32L( 3 );
+ aStream.WriteL( _L("uid"), 3 );
+ aStream.WriteInt32L( iValue.uid.iUid );
+ break;
+ default:
+ User::Leave( KErrCorrupt );
+ }
+ }
+
+ void DeserializeL( RReadStream& aStream )
+ {
+ Reset();
+ TInt x = 0;
+ TInt len = aStream.ReadInt32L();
+ if ( len > KMaxFileName )
+ {
+ User::Leave( KErrCorrupt );
+ }
+ TFileName buf;
+ aStream.ReadL( buf, len );
+ if ( 0 == buf.Compare( _L("unknown") ) )
+ {
+ iType = EWidgetPropTypeUnknown;
+ iValue.i = 0;
+ }
+ else if ( 0 == buf.Compare( _L("bool") ) )
+ {
+ iType = EWidgetPropTypeBool;
+ iValue.i = aStream.ReadInt32L();
+ }
+ else if ( 0 == buf.Compare( _L("int") ) )
+ {
+ iType = EWidgetPropTypeInt;
+ iValue.i = aStream.ReadInt32L();
+ }
+ else if ( 0 == buf.Compare( _L("str") ) )
+ {
+ iType = EWidgetPropTypeString;
+ len = aStream.ReadInt32L();
+ if ( len <= KMaxFileName )
+ {
+ HBufC* vBuf = HBufC::NewLC( len );
+ TPtr16 p = vBuf->Des();
+ aStream.ReadL( p, len );
+ iValue.s = vBuf;
+ CleanupStack::Pop(); // vBuf
+ }
+ else
+ {
+ User::Leave( KErrCorrupt );
+ }
+ }
+ else if ( 0 == buf.Compare( _L("uid") ) )
+ {
+ iType = EWidgetPropTypeUid;
+ TUid uid = TUid::Uid( aStream.ReadInt32L() );
+ iValue.uid = uid;
+ }
+ else
+ {
+ User::Leave( KErrCorrupt );
+ }
+ }
+
+protected:
+ /**
+ * Constructor
+ */
+ CWidgetPropertyValue() {}
+
+ /**
+ * 2-phase constructor
+ */
+ void ConstructL() {}
+
+private:
+ // no copy constructor
+ CWidgetPropertyValue( const CWidgetPropertyValue& );
+ // no assignment
+ CWidgetPropertyValue& operator=( const CWidgetPropertyValue& );
+
+public:
+ TWidgetPropertyType iType;
+ union
+ {
+ TInt i;
+ HBufC* s;
+ TUid uid;
+ } iValue;
+ };
+
+// RPointerArray<CWidgetPropertyValue> RWidgetPropertyValues(EWidgetPropertyIdCount)
+// and use is ended by ResetAndDestroy()
+
+
+#endif // WIDGETPROPERTYVALUE_H