diff -r 000000000000 -r 2e3d3ce01487 contextframework/cfw/inc/cfscriptengine/cfscriptsubscription.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contextframework/cfw/inc/cfscriptengine/cfscriptsubscription.h Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,173 @@ +/* +* Copyright (c) 2007-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: CCFScriptSubscription class declaration. +* +*/ + + + +#ifndef C_CFSCRIPTSUBSCRIPTION_H +#define C_CFSCRIPTSUBSCRIPTION_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class MCFContextInterface; +class MCFContextSubscriptionListener; +class MCFScriptListener; +class CCFContextSubscriptionImpl; +class CCFContextObject; + +// CLASS DECLARATION + +/** +* Script subscription class provides a centralized context subscription for +* operations on Context Framework Scripts. Script subscription stores all +* operation subscriptions for a context and manages one real context +* subscription on Context Framework. +* +* @lib CFScriptEngine +* @since S60 v5.0 +*/ +NONSHARABLE_CLASS( CCFScriptSubscription ): public CBase + { +public: // Constructors and destructor + + /** + * Creates a CCFScriptSubscription instance. + * @param aCF is a reference to context interface. + * @param aCFListener is a reference to context subscription listener. + * @param aListener is a pointer to script listener, i.e. context operation. + * @return a pointer to the created instance of CCFScriptSubscription. + */ + static CCFScriptSubscription* NewL( MCFContextInterface& aCF, + MCFContextSubscriptionListener& aCFListener, + MCFScriptListener* aListener ); + + /** + * Creates a CCFScriptSubscription instance. + * @param aCF is a reference to context interface. + * @param aCFListener is a reference to context subscription listener. + * @param aListener is a pointer to script listener, i.e. context operation. + * @return a pointer to the created instance of CCFScriptSubscription. + */ + static CCFScriptSubscription* NewLC( MCFContextInterface& aCF, + MCFContextSubscriptionListener& aCFListener, + MCFScriptListener* aListener ); + + /** + * Destructor. + */ + virtual ~CCFScriptSubscription(); + +public: // New functions + + /** + * Adds a script listener to this context subscription. Notifies the listener + * about the current value of subscribed context. + * @param aListener is a pointer to script listener, i.e. context operation. + * @return None. + */ + void AddListenerL( MCFScriptListener* aListener ); + + /** + * Removes a script listener from this context subscription. Removing the + * last listener also removes the context subscription. + * @param aListener is a pointer to script listener, i.e. context operation. + * @return ETrue if there are no more listeners and the instance could be + * deleted, EFalse otherwise. + */ + TBool RemoveListener( MCFScriptListener* aListener ); + + /** + * Checks whether the context subscription is a match with a script listener. + * @param aListener is a pointer to script listener, i.e. context operation. + * @return ETrue if the subscription is a match with the listener, EFalse + * otherwise. + */ + TBool Match( const MCFScriptListener& aListener ) const; + + /** + * Checks whether the context subscription is a match with a context. + * @param aContext is a reference to a context. + * @return ETrue if the subscription is a match with the context, EFalse + * otherwise. + */ + TBool Match( const CCFContextObject& aContext ) const; + + /** + * Notifies listeners about a context, i.e. evaluates context operations with + * the context. + * @param aContext is a reference to the context to be notified. + * @param aContextLevelDelay is storage for context level delay requirement + * from the context operation evaluation. + * @return ETrue if any listener executed actual evaluation, EFalse + * otherwise. + */ + TBool NotifyListeners( const CCFContextObject& aContext, + TInt& aContextLevelDelay ) const; + +protected: + + /** + * C++ default constructor. + */ + CCFScriptSubscription( MCFContextInterface& aCF, + MCFContextSubscriptionListener& aCFListener ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL( MCFScriptListener* aListener ); + +private: // New functions + + /** + * Subscribes context requested by a listener and notifies the listener about + * the current value of the context. + * @param aListener is a pointer to script listener, i.e. context operation. + * @return KErrNone if successful, otherwise any system wide error code. + */ + TInt DoSubscribeL( MCFScriptListener* aListener ); + + /** + * Notifies a listener about the current value of a context it is interested. + * @param aListener is a pointer to script listener, i.e. context operation. + * @return None. + */ + void NotifyListenerOfCurrentContextValueL( + MCFScriptListener* aListener ) const; + +private: // Data + + // Context interface for managing subscriptions. + MCFContextInterface& iCF; + + // Context subscription listener interface for managing subscriptions. + MCFContextSubscriptionListener& iCFListener; + + // Flag telling whether subscription has been made (ownership transferred). + TBool iSubscribed; + + // Context subscription for script listeners; when subscription has been + // activated (SubscribeContext() called) the ownership has been transferred. + CCFContextSubscriptionImpl* iSubscription; + + // Script listeners for the context subscription. Not owned. + RPointerArray< MCFScriptListener > iListeners; + }; + + +#endif // C_CFSCRIPTSUBSCRIPTION_H