--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contextframework/cfw/inc/cfservices/CFContextSubscriptionImpl.h Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,241 @@
+/*
+* Copyright (c) 2002-2006 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: ?Description
+*
+*/
+
+
+#ifndef C_CFCONTEXTSUBSCRIPTIONIMPL_H
+#define C_CFCONTEXTSUBSCRIPTIONIMPL_H
+
+#include "cfcontextsubscription.h"
+
+// FORWARD DECLARATIONS
+
+class MCFContextSubscriptionListener;
+class CCFContextQueryImpl;
+class CCFContextObject;
+class CCFContextDataObject;
+class RWriteStream;
+
+/**
+* Subscription for observing context value changes for certain
+* context type or a subtree of context types coming from certain
+* source or all sources.
+*
+* Information about context changes will be sent to object implementing
+* <code>MCFListener</code>-interface.
+*
+* @since S60 5.0
+* @lib cfservices.lib
+*/
+NONSHARABLE_CLASS( CCFContextSubscriptionImpl ): public CCFContextSubscription
+ {
+ public:
+
+ /**
+ * Two phased construction.
+ *
+ * @since S60 5.0
+ * @param None.
+ * @return CCFContextSubscriptionImpl*
+ */
+ IMPORT_C static CCFContextSubscriptionImpl* NewL();
+ IMPORT_C static CCFContextSubscriptionImpl* NewLC();
+
+ /**
+ * Two phased construction with parameters.
+ *
+ * @since S60 5.0
+ * @param aStream Stream where to initialize.
+ * @return CCFContextSubscriptionImpl*
+ */
+ IMPORT_C static CCFContextSubscriptionImpl* NewL (
+ RReadStream& aStream);
+ IMPORT_C static CCFContextSubscriptionImpl* NewLC (
+ RReadStream& aStream);
+
+ // Destructor.
+ ~CCFContextSubscriptionImpl();
+
+ public: // From base classes
+
+ // @see CCFContextSubscription
+ void SetContextTypeL( const TDesC& aContextType );
+
+ // @see CCFContextSubscription
+ const TDesC& ContextType() const;
+
+ // @see CCFContextSubscription
+ void SetContextSourceL( const TDesC& aSource );
+
+ // @see CCFContextSubscription
+ const TDesC& ContextSource() const;
+
+ // @see CCFContextSubscription
+ TBool SubTypeMatch() const;
+
+ // @see CCFContextSubscription
+ void SetSubTypeMatch( TBool aMatchSubTypes );
+
+ // @see CCFContextSubscription
+ TBool OnlyChangesIndicated() const;
+
+ // @see CCFContextSubscription
+ void SetOnlyChangesIndicated( TBool aIndicateChangesOnly );
+
+ // @see CCFContextSubscription
+ void SetDataObjectEnabled( TBool aEnabled );
+
+ // @see CCFContextSubscription
+ TBool DataObjectEnabled() const;
+
+ public: // New methods
+
+ /**
+ * Internalizes object.
+ *
+ * @since S60 5.0
+ * @param aStream Stream from which to internalize.
+ * @return None.
+ */
+ IMPORT_C void InternalizeL( RReadStream& aStream );
+
+ /**
+ * Externalizes object.
+ *
+ * @since S60 5.0
+ * @param aStream Stream where to externalize.
+ * @return None
+ */
+ IMPORT_C void ExternalizeL( RWriteStream& aStream );
+
+ /**
+ * Gets object size in bytes.
+ *
+ * @since S60 5.0
+ * @param None
+ * @return TInt
+ */
+ IMPORT_C TInt Size() const;
+
+ /**
+ * Returns subscriber of this subscription.
+ *
+ * @since S60 5.0
+ * @param None.
+ * @return MCFContextSubscriptionListener&
+ */
+ IMPORT_C MCFContextSubscriptionListener& SubscriptionListener() const;
+
+ /**
+ * Sets a subscriber for this subscription.
+ *
+ * @since S60 5.0
+ * @param aListener Call back to subscriber.
+ * @return None.
+ */
+ IMPORT_C void SetSubscriptionListener(
+ MCFContextSubscriptionListener& aListener );
+
+ /**
+ * Evaluates context change event coming from data manager and sends
+ * indication to the subscriber if it matches this subscription.
+ *
+ * @since S60 5.0
+ * @param aOldContext Previous context.
+ * @param aNewContext Current context.
+ * @return
+ */
+ IMPORT_C void EvaluateContextChangeL(
+ const CCFContextObject& aNewContext,
+ const CCFContextObject& aOldContext, TBool aValueChanged ) const;
+
+ /**
+ * Tells whether this instance is the same as the argument.
+ * Comparison is made based on client session, subscribed context source
+ * and type.
+ *
+ * @return ETrue if this instance equals the argument. Otherwise, EFalse.
+ */
+ IMPORT_C TBool IsSame(
+ const CCFContextSubscriptionImpl& aSubscription) const;
+
+ /**
+ * Checks if a context type matches with this subscription.
+ *
+ * @since S60 5.0
+ * @param aContextType Context type to match.
+ * @return ETrue if a match.
+ */
+ IMPORT_C TBool Matches( const TDesC& aContextType ) const;
+
+ /**
+ * Checks if a context source and a context type matches
+ * this subscription.
+ *
+ * @since S60 5.0
+ * @param aContextType Context type to match.
+ * @param aContextSource Context source to match.
+ * @return ETrue if a match.
+ */
+ IMPORT_C TBool Matches( const TDesC& aContextType,
+ const TDesC& aContextSource ) const;
+
+ /**
+ * Evaluates context change event coming from data manager and sends
+ * indication to the subscriber if it matches this subscription.
+ *
+ * @since S60 5.0
+ * @param aNewContext Current context.
+ * @param aData Data object associated with the context.
+ * @param aValueChanged Value changed.
+ * @return
+ */
+ IMPORT_C void EvaluateContextChangeL(
+ const CCFContextObject& aNewContext,
+ CCFContextDataObject& aData,
+ TBool aValueChanged ) const;
+
+ private:
+
+ // Check if a context notification is needed.
+ TBool NotificationNeeded( const CCFContextObject& aNewContext,
+ TBool aValueChanged ) const;
+
+ private:
+
+ // C++ constructor
+ CCFContextSubscriptionImpl();
+
+ // 2nd phase constructors
+ void ConstructL();
+ void ConstructL( RReadStream& aStream );
+
+ private:
+
+ /** Context query related to subscription */
+ CCFContextQueryImpl* iContextQuery;
+
+ /** A call back interface to the subscriber */
+ MCFContextSubscriptionListener* iSubscriptionListener;
+
+ /** Flag indicating whether only changes in context value are indicated */
+ TBool iOnlyChangesIndicated;
+
+ /** Flag indicating that subscriber wants also data objects */
+ TBool iDataObjectEnabled;
+ };
+
+#endif