--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fmradio/fmradioengine/inc/fmradiopropertyobserver.h Tue Feb 02 00:17:10 2010 +0200
@@ -0,0 +1,264 @@
+/*
+* Copyright (c) 2009 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: Abstract interface for handling property change events.
+*
+*/
+
+
+#ifndef CFMRADIOPROPERTYOBSERVER_H
+#define CFMRADIOPROPERTYOBSERVER_H
+
+#include <e32base.h>
+#include <e32property.h>
+
+/**
+ * MFMRadioPropertyChangeObserver
+ *
+ * Abstract interface for handling property change events.
+ */
+class MFMRadioPropertyChangeObserver
+{
+
+public:
+
+ /**
+ * This is a callback function which is called when a property value of
+ * type int is changed.
+ *
+ * @param aCategory UID of Publish And Subscribe category
+ * @param aKey subkey to specify the category event; to be used with
+ * Publish And Subscribe
+ *
+ * @param aValue the new value
+ */
+ virtual void HandlePropertyChangeL(
+ const TUid& aCategory,
+ const TUint aKey,
+ const TInt aValue ) = 0;
+
+ /**
+ * This is a callback function which is called when a property value of
+ * type text is changed.
+ *
+ * @param aCategory UID of Publish And Subscribe category
+ * @param aKey subkey to specify the category event; to be used with
+ * Publish And Subscribe
+ * @param aValue the new value
+ **/
+ virtual void HandlePropertyChangeL(
+ const TUid& aCategory,
+ const TUint aKey,
+ const TDesC& aValue ) = 0;
+
+ /**
+ * This is a callback function which is called when a property value of
+ * type byte array is changed.
+ *
+ * @param aCategory UID of Publish And Subscribe category
+ * @param aKey subkey to specify the category event; to be used with
+ * Publish And Subscribe
+ * @param aValue the new value
+ **/
+ virtual void HandlePropertyChangeL(
+ const TUid& aCategory,
+ const TUint aKey,
+ const TDesC8& aValue ) = 0;
+
+ /**
+ * This is a callback function which is called when a P&S components
+ * returns an error
+ *
+ * @param aCategory UID of Publish And Subscribe category
+ * @param aKey subkey to specify the category event
+ * @param aError an error code
+ */
+ virtual void HandlePropertyChangeErrorL(
+ const TUid& aCategory,
+ const TUint aKey,
+ TInt aError) = 0;
+};
+
+
+
+/**
+ * Observer class that observes changes of Property values and propogates
+ * them further.
+ * The class defines a handle to a property, a single data value representing
+ * an item of state information.
+ *
+ */
+ class CFMRadioPropertyObserver : public CActive
+ {
+
+ public:
+
+ /**
+ * Property type. Cannot use RProperty::TType because EByteArray == EText.
+ */
+ enum TFMRadioPropertyType
+ {
+ EFMRadioPropertyInt, // Integral property type.
+ EFMRadioPropertyByteArray, // Byte-array (8 bit), max size 512 bytes
+ EFMRadioPropertyText // Text (16 bit), max size 512 bytes
+ };
+
+ /**
+ * Two-phased constructor.
+ *
+ * @param aObserver a reference to the observer interface implementer
+ * @param aCategory UID of Publish And Subscribe category
+ * @param aKey subkey to specify the category event; to be used with
+ * Publish And Subscribe
+ * @param aPropertyType property type to observe
+ */
+ static CFMRadioPropertyObserver* NewL(
+ MFMRadioPropertyChangeObserver& aObserver,
+ const TUid& aCategory,
+ const TUint aKey,
+ const TFMRadioPropertyType aPropertyType);
+
+ /**
+ * Two-phased constructor.
+ *
+ * @param aObserver a reference to the observer interface implementer
+ * @param aCategory UID of Publish And Subscribe category
+ * @param aKey subkey to specify the category event; to be used with
+ * Publish And Subscribe
+ * @param aPropertyType property type to observe
+ */
+ static CFMRadioPropertyObserver* NewLC(
+ MFMRadioPropertyChangeObserver& aObserver,
+ const TUid& aCategory,
+ const TUint aKey,
+ const TFMRadioPropertyType aPropertyType);
+
+ /**
+ * Destructor.
+ */
+ ~CFMRadioPropertyObserver();
+
+ /**
+ * Subscribes the object to listen to the specified key. Does nothing if already active.
+ * Must be called after construction, or after calling Cancel().
+ */
+ void ActivateL();
+
+ /**
+ * Returns current integer property value
+ * @param aUpdate ETrue if the cache value should be updated
+ *
+ * @return int value
+ */
+ TInt ValueInt( TBool aUpdate = EFalse );
+
+ /**
+ * Returns current byte array property value
+ ** @param aUpdate ETrue if the cache value should be updated
+ *
+ * @return byte array value
+ */
+ const TDesC8& ValueDes8( TBool aUpdate = EFalse );
+
+ /**
+ * Returns current text property value
+ * * @param aUpdate ETrue if the cache value should be updated
+ *
+ * @return text value
+ */
+ const TDesC& ValueDes( TBool aUpdate = EFalse );
+
+private:
+
+ /**
+ * C++ default constructor overload.
+ * Two-phased constructor.
+ *
+ * @param aObserver a reference to the observer interface implementer
+ * @param aCategory UID of Publish And Subscribe category
+ * @param aKey subkey to specify the category event; to be used with
+ * Publish And Subscribe
+ * @param aPropertyType property type to observe
+ */
+ CFMRadioPropertyObserver(
+ MFMRadioPropertyChangeObserver& aObserver,
+ const TUid& aCategory,
+ const TUint aKey,
+ const TFMRadioPropertyType aPropertyType);
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ **/
+ void ConstructL();
+
+ // from base class Cactive
+ /**
+ * From CActive
+ *
+ * @see CActive::RunL()
+ */
+ void RunL();
+
+ /**
+ * From CActive,
+ *
+ * @see CActive::DoCancel()
+ */
+ void DoCancel();
+
+private: // data
+
+ /**
+ * Value of a subscribed category property of type int.
+ */
+ TInt iValueInt;
+
+ /**
+ * Value of a subscribed category property of type byte array.
+ */
+ HBufC8* iValueByteArray;
+
+ /**
+ * Value of a subscribed category property of type text.
+ */
+ HBufC* iValueText;
+
+ /**
+ * Handle to Publish And Subscribe component
+ */
+ RProperty iProperty;
+
+ /**
+ * Observer to be notified when particular Property value has changed
+ */
+ MFMRadioPropertyChangeObserver& iObserver;
+
+ /**
+ * UID of Publish And Subscribe category
+ */
+ TUid iCategory;
+
+ /**
+ * Subkey to be used with Publish And Subscribe
+ */
+ TUint iKey;
+
+ /**
+ * Type of the observed property.
+ */
+ TFMRadioPropertyType iPropertyType;
+
+ };
+
+#endif // CFMRADIOPROPERTYOBSERVER_H
+