uifw/AvKon/inc/aknstatuspanedatasubscriber.h
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AvKon/inc/aknstatuspanedatasubscriber.h	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,229 @@
+/*
+* Copyright (c) 2006-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:  Avkon internal subscriber for the system controlled and 
+*                published status pane data.
+*
+*/
+
+
+#ifndef C_AKNSTATUSPANEDATASUBSCRIBER_H
+#define C_AKNSTATUSPANEDATASUBSCRIBER_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <e32property.h>
+#include <coecntrl.h>
+
+// FORWARD DECLARATIONS
+class CActive;
+class CAknStatusPaneSubscriberData;
+class MAknStatusPaneDataObserver;
+
+/**
+ *
+ * This class is subscriber for the system controlled
+ * and published status pane data.
+ *
+ * @since S60 3.2
+ *
+ * @internal
+ */
+NONSHARABLE_CLASS( CAknStatusPaneDataSubscriber ) : public CActive
+	{
+public: 
+
+    DECLARE_TYPE_ID(0x102823DA) 
+
+	/**
+     * Two-phased constructor.
+     */
+    IMPORT_C static CAknStatusPaneDataSubscriber* NewL();
+     
+    /**
+     * Destructor.
+     */
+    ~CAknStatusPaneDataSubscriber();        
+
+    /**
+     * Sets a flag to indicate that when this subscriber is in foreground it
+     * does not indicate itself as foreground subscriber, thus allowing the
+     * previous foreground subscriber still to be updated normally.
+     * If this flag is set, then @c iForceBackgroundRefresh should be set to
+     * @c ETrue to allow this subscriber to receive updates in the background.
+     * 
+     * @param  aAlwaysBackground  @c ETrue if this subscriber
+     *                            remains always in the background.
+     */
+    IMPORT_C void SetAlwaysBackground( TBool aAlwaysBackground ); 
+
+    /**
+     * Refreshes status pane data.
+     */
+    IMPORT_C void RefreshDataL();
+
+	enum
+		{
+		ERefreshLevelNone   = 0x10,			
+		ERefreshLevelMedium = 0x20,
+		ERefreshLevelHigh   = 0x30
+		};
+		
+    /**
+     * Sets the refresh level.
+     *
+  	 * @param  aLevel   Refresh level to be set.
+  	 * @param  aForced  @c ETrue to force the level to be set or
+  	 *                  to override a level that has been forced.
+     */
+    IMPORT_C void SetRefreshLevel( TInt aLevel, TBool aForced ); 
+
+    /**
+     * Gets the refresh level.
+     *
+  	 * @return  Refresh level
+     */
+	IMPORT_C TInt RefreshLevel();
+
+    /**
+     * Gets the id of the subscriber in the foreground currently.
+     *
+  	 * @return  Id of the foreground status pane.
+     */
+    TInt ForegroundSubscriberId() const; 
+
+    /**
+     * Sets the id of the subscriber in the foreground currently.
+     *
+	 * @param  aId  Id of the foreground status pane sync service subscriber.
+     */
+    void SetForegroundSubscriberId( TInt aId ); 
+
+    /**
+     * Gets the id of this subscriber.
+     *
+     * @return  Id of the status pane sync service subscriber.
+     */
+    TInt SubscriberId() const; 
+
+    /**
+     * Returns @c ETrue if this subscriber is in the foreground. 
+     *
+	 * @return @c ETrue if this is in the foreground, otherwise @c EFalse.
+     */
+    TBool IsBackground() const; 
+
+    /**
+     * Adds observer which will be notified when status pane data has changed.
+     *
+     * @param  aObserver  An observer that is to be added.
+     */
+	void AddObserver( MAknStatusPaneDataObserver* aObserver );
+
+    /**
+     * Removes observer.
+     *
+     * @param  aObserver  An observer that is to be added.
+     */
+	void RemoveObserver( MAknStatusPaneDataObserver* aObserver );
+    
+    /**
+     * Handles the the situation where status pane comes
+     * to foreground.
+     */
+    IMPORT_C void HandleGainingForeground();
+
+    /**
+     * Handles the the situation where status pane loses foreground.
+     */       
+    IMPORT_C void HandleLosingForeground();
+
+private: // From @c CActive
+    
+    /**
+     * Executes when serverside publishes data update.
+     */
+    void RunL();
+
+    /**
+   	 * Cancels subscription to data update notifications.
+     */
+    void DoCancel();
+
+    /**
+	 * Handles error situation of the property subscribtions.
+     */
+    TInt RunError( TInt aError );
+
+private:
+
+	/**
+     * Private 2nd phase constructor.
+     */
+    void ConstructL();
+
+    /**
+     * Standard constructor
+     */
+    CAknStatusPaneDataSubscriber();
+ 
+    /**
+     * Subscribes to the property that contains the serverside data.
+     */
+    void DoSubscribe();   
+        
+private:
+
+	/** Property for status pane state data. */
+    RProperty iProperty;
+			
+	/**
+	 * Flag to indicate that when this subscriber is in foreground it does not
+	 * indicate itself as foreground subscriber, thus allowing the previous
+	 * foreground subscriber still to be updated. If this flag is set, then
+	 * @c iForceBackgroundRefresh should be set to @c ETrue to allow this
+	 * subscriber to receive updates in the background.
+	 */
+	TBool iAlwaysBackground;	
+
+	/** Describes the level of the status pane controls are updates. */
+	TInt  iRefreshLevel;
+
+	/** A flag to tell if refresh level has been forced or not. */	
+	TBool iForcedRefreshLevel;
+	
+	/** Unique id of this subscriber. */
+	TInt iSubscriberId;
+	
+	/** Data structure to hold status pane state data. */
+	CAknStatusPaneSubscriberData* iStatusPaneStateData;
+	
+	/** Array of subscriber observers. */
+	RPointerArray<MAknStatusPaneDataObserver> iObservers; 
+		
+	class TWsEventObserver;
+	friend class TWsEventObserver;
+	
+	/** Owned window server event observer */
+	TWsEventObserver* iObserver;	
+	
+	/**
+	 * A flag determining whether or not this subscriber is the
+	 * foreground subscriber.
+	 */
+	TBool iIsForeground;
+		
+  };
+
+#endif // C_AKNSTATUSPANEDATASUBSCRIBER_H