classicui_pub/status_pane_api/inc/eikspmod.h
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/classicui_pub/status_pane_api/inc/eikspmod.h	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,730 @@
+/*
+* Copyright (c) 1997-1999 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:
+*
+*/
+
+
+#if !defined(__EIKSPMOD_H__)
+#define __EIKSPMOD_H__
+
+#if !defined(__E32BASE_H__)
+#include <e32base.h>
+#endif
+
+#if !defined(__EIKON_HRH__)
+#include <uikon.hrh>
+#endif
+
+#if !defined(__EIKSRVC_H__)
+#include <eiksrvc.h>
+#endif
+
+
+class TResourceReader;
+class CEikStatusPaneLayoutTree;
+class CEikonEnv;
+class CAknSgcClient;
+class CEikStatusPaneLayout;
+namespace AknLayout { class CInstance; }
+namespace AknLayoutScalable_Avkon { class CInstance; }
+
+// Extra bit flags not defined in hrh file.
+const TInt KEikStatusPaneDirectionBit		= 0x04;
+const TInt KEikStatusPaneHiddenBit			= 0x08;
+const TInt KEikStatusPaneInitInitializedBit	= 0x80000000;
+
+
+typedef TUid TPaneId;
+
+/**
+*
+* This class stores the details about status pane sub pane 
+* ownership and initial contents. 
+*
+*/
+class TEikStatusPaneInit
+	{
+public:
+   /**
+	* Default constructor.
+	*/
+	TEikStatusPaneInit();
+
+   /**
+	* Copy constructor.
+	*/
+	TEikStatusPaneInit(const TEikStatusPaneInit& aCopy);
+
+   /**
+	* Operator overload.
+	*/
+	TEikStatusPaneInit& operator=(const TEikStatusPaneInit& aCopy);
+	
+   /**
+	* Gets pane id.
+	* @return id of the pane.
+	*/
+	inline TPaneId Id() const;
+
+   /**
+	* Loads deafault values of the pane from given resource.
+	* Resource reader should point to an entry from the arrays of 
+	* SPANE_PANE structures  found in the STATUS_PANE_SYSTEM_MODEL 
+	* and STATUS_PANE_APP_MODEL resource structures.
+	*
+	* @param @aResource Resource reader.
+	*/
+	void LoadDefaults(TResourceReader& aResource);
+
+   /**
+	* Gets flag that indicates if the sub pane is owned by the 
+	* application or not.
+	* @return ETrue if pane is application owned, otherwise EFalse.
+	*/
+	inline TBool AppOwned() const;
+	
+   /**
+	* Returns control type id of the pane.
+	* @return Id of the control inside the pane.
+	*/	
+	inline TInt ControlTypeId() const;
+
+   /**
+	* Returns resource id of the control in the pane.
+	* @return Control resource id.
+	*/	
+	inline TInt ControlResourceId() const;
+
+   /**
+	* Sets hidden flag.
+	*/	
+	inline void SetHidden();
+
+   /**
+	* Clears hidden flag.
+	*/	
+	inline void ClearHidden();
+
+   /**
+	* Gets hidden flag.
+	* @return ETrue if the pane is hidden.
+	*/		
+	inline TBool IsHidden() const;
+
+private:
+   /**
+	* Gets initialized flag.
+	* @return ETrue if the pane is initialized.
+	*/		
+	inline TBool Initialized();
+
+   /**
+	* Sets initialized flag.
+	*/		
+	inline void SetInitialized();
+
+private:
+	TPaneId iId;
+	TInt iControlId;
+	TInt iControlResource;
+	TInt iFlags;
+	};
+
+
+/**
+*
+* This class stores array of TEikStatusPaneInit instances.
+*
+*/
+NONSHARABLE_CLASS(CEikStatusPaneSetInit) : public CArrayFixFlat<TEikStatusPaneInit>
+	{
+public:
+ 
+   /**
+	* Two phase constructor.
+	*/
+	static CEikStatusPaneSetInit* NewL();
+
+   /**
+	* Destructor.
+	*/
+	~CEikStatusPaneSetInit();
+
+   /**
+	* Loads deafault values of the panes from given resource.
+	* Values are read from SPANE_PANE structure found in the 
+	* STATUS_PANE_SYSTEM_MODEL and STATUS_PANE_APP_MODEL resource 
+	* structures
+	* @param @aResource Resource reader.
+	*/
+	void LoadDefaultsL(TResourceReader& aResource);
+	
+   /**
+	* Finds the pane init with a given id. If a pane init
+	* is not found, method leaves with code KErrNotFound.
+	* @return The pane init instance with given id.
+	*/			
+	TEikStatusPaneInit& FindL(const TPaneId& aPaneId);
+
+private:
+ 
+   /**
+	* Private constructor.
+	*/
+	CEikStatusPaneSetInit();
+	};
+
+
+/**
+*
+* This abstract class is used for checking pane layout validity.
+*
+*/
+class MEikStatusPaneLayoutTreeVisitor
+	{
+public:
+   /**
+	* Virtual function of which implementation should be provided 
+	* by the classes that implement the layout check visitor design 
+	* pattern.
+	* @param aNode A layout node to be visited.
+	*/
+	virtual void VisitL(CEikStatusPaneLayoutTree* aNode) = 0;
+	};
+
+
+
+/**
+*
+* This class calculates and stores the screen area available 
+* for each layout tree.
+*
+*/
+NONSHARABLE_CLASS(CEikStatusPaneLayoutTree) : public CBase
+	{
+public:
+	enum TDirection
+		{
+		/** Horizontal direction */
+		EHorizontal,
+		/** Vertical direction */
+		EVertical
+		};
+
+public:
+   /**
+	* Destructor.
+	*/
+	~CEikStatusPaneLayoutTree();
+
+   /**
+	* Two phase constructor.
+	* @param aLayout Layout data
+	* @param aResource Resource of layout tree.
+	* @param aDefaultDirection Default direction of the layout tree.
+	*/
+	static CEikStatusPaneLayoutTree* NewL(CEikStatusPaneLayout* aLayout, TResourceReader& aResource, TDirection aDefaultDirection = EHorizontal);
+
+   /**
+	* Finds the layout tree with a given pane id. 
+	* @param aPaneId A id of the pane.
+	* @return If layout tree was found, a pointer to layout tree 
+	*         with given id. Otherwise NULL is returned.
+	*/			
+	CEikStatusPaneLayoutTree* Find(const TPaneId& aPaneId);
+	
+   /**
+	* Calls given visitor objects VisitL, method. Additionally
+	* calls AcceptL -method of each sub pane layouts inside this layout tree.
+	* @param aVisitor A visitor object to be visited.
+	*/			
+	void AcceptL(MEikStatusPaneLayoutTreeVisitor* aVisitor);
+
+   /**
+	* Gets pane id.
+	* @return id of the pane.
+	*/
+	inline TPaneId Id() const;
+
+   /**
+	* Gets rectagle of the layout tree.
+	* @return Rectangle of the layout tree.
+	*/
+	inline TRect Rect() const;
+
+    /**
+     * This method maps given layout resource id and subpane UID to correct
+     * layout lines in the AknLayout system.
+     *
+     * @since   2.8
+     * @param   aLayoutResourceId    Id of a statuspane layout.
+     * @param   aPaneId              Uid of a statuspane subpane.
+     * @return  A rectangle which specifies the given subpane size 
+     *          and position in the given layout. 
+     *
+     */
+    TRect AknLayoutRect(TInt aLayoutResourceId, TPaneId aPaneId);
+
+private:
+
+   /**
+	* Private constructor.
+	* @param aLayout Layout data
+	* @param aDefaultDirection Default direction of the layout tree.
+	*/
+	CEikStatusPaneLayoutTree(CEikStatusPaneLayout* aLayout, TDirection aDefaultDirection);
+
+   /**
+	* Private 2nd phase constructor.
+	* @param aResource Resource of layout tree.
+	*/
+	void ConstructL(TResourceReader& aResource);
+
+   /**
+	* Sets rectagle of the layout tree.
+	* @param aRect Rectangle of the layout tree.
+	*/
+	void SetRect(const TRect& aRect);
+
+   /**
+	* Gets direction of the layout tree.
+	* @return Direction of the layout tree.
+	*/
+	inline TDirection Direction();
+	
+   /**
+	* Sets direction of the layout tree.
+	* @param aDirection Direction of the layout tree.
+	*/
+	void SetDirection(TDirection aDirection);
+	
+   /**
+	* Gets size of the layout tree.
+	* @return size of the layout tree.
+	*/
+	inline TInt Size();
+	
+   /**
+	* Gets stretchable flag of the layout tree.
+	* @return Stretchable flag of the layout tree.
+	*/
+	inline TBool Stretchable();
+
+   /**
+	* Sets stretchable flag of the layout tree.
+	* @param Stretchable flag of the layout tree.
+	*/
+	void SetStretchable(TBool aStretchable);
+	
+   /**
+	* Sets the layout of the sub panes inside layout tree according to
+	* layout tree attributes read from the resource structures.
+	*/
+	void Layout();
+
+   /**
+     * This methods purpose is eqvivalent of the Layout() method, but the difference
+     * is that this method uses AknLayout system instead of the statuspane
+     * resource definitions for determining the positions and sizes of the subpanes.
+     *
+     * If AknLayoutUsed flag has not been set then this method defaults to the behaviour
+     * of the Layout() -method.
+     *
+     * @since   2.8
+     * @param   aLayoutResourceId    Id of the statuspane layout which is to be laid out.
+     *
+     */
+	void Layout(TInt aLayoutResourceId);
+
+    /**
+     * This method sets flag which tells wheter AknLayout system is
+     * used or not for layout.
+     *
+     * @since   2.8
+     * @param   aAknLayoutUsed  ETrue if AknLayout is to be used. EFalse otherwise.   
+     *
+     */
+    void SetAknLayoutUsed(TBool aAknLayoutUsed);
+    
+    /**
+     * This method gets flag which tells wheter AknLayout system is
+     * used or not for layout.
+     *
+     * @since   2.8
+     * @return  ETrue if AknLayout is to be used. EFalse otherwise.   
+     *
+     */
+    TBool AknLayoutUsed();
+
+private:
+	TPaneId iId;
+	TInt iFlags;
+	TRect iRect;
+	TInt iSize;
+
+	typedef CArrayPtrFlat<CEikStatusPaneLayoutTree> CSubPaneArray;
+	CSubPaneArray* iSubPanes;
+
+	CEikStatusPaneLayout* iLayout;
+	
+private:
+	friend class CEikStatusPaneLayout;
+	};
+
+
+/**
+*
+* This class calculates and stores the screen area available 
+* for each sub pane layout.
+*
+*/
+NONSHARABLE_CLASS(CEikStatusPaneLayout) : public CBase
+	{
+public:
+   /**
+	* Two phase constructor.
+	* @param aResource Resource of sub pane layout.
+	* @param aScreenRect Screen rectangle.
+	*/
+	static CEikStatusPaneLayout* NewL(TResourceReader& aResource, const TRect& aScreenRect);
+
+   /**
+	* Two phase constructor.
+	* @param aResource Resource of sub pane layout.
+	* @param aScreenRect Screen rectangle.
+	* @param aLayoutId Id of the status pane layout.
+	*/
+	static CEikStatusPaneLayout* NewL(TResourceReader& aResource, const TRect& aScreenRect, TInt aLayoutId);
+	
+   /**
+	* Destructor
+	*/	
+	~CEikStatusPaneLayout();
+
+   /**
+	* Finds the pane init with a given id. If a pane init
+	* is not found NULL pointer is returned.
+	* @return The layout tree instance with given id.
+	*/			
+	inline CEikStatusPaneLayoutTree* Find(const TPaneId& aPaneId) const;
+
+   /**
+	* Calls given visitor objects VisitL, method. 
+	* @param aVisitor A visitor object to be visited.
+	*/			
+	inline void AcceptL(MEikStatusPaneLayoutTreeVisitor* aVisitor);
+	
+   /**
+	* Gets rectagle of the sub pane layout.
+	* @return Rectangle of the sub pane layout.
+	*/
+	inline TRect Rect() const;
+
+    /**
+     * Re-reads layout data from AknLayout system. The data may have to be refreshed when e.g.
+     * screen resolution, orientation or language variant layout is changed on the fly.
+     *
+     * @since   2.8
+     * @param   aLayoutResourceId    Id of the statuspane layout which data is to be refreshed.
+     *
+     */
+	void AknLayoutRefresh(TInt aLayoutResourceId);
+
+    /**
+     * This method tells if this layout is using AknLayout system for placing and sizing 
+     * the statuspane subpanes.
+     *
+     * @since   2.8
+     * @return  ETrue if this layout has been initailized to use AknLayout. EFalse if the default
+     *          statuspane layout system is in use.
+     *
+     */
+    TBool AknLayoutUsed();
+
+    /**
+     * This method maps given layout resource id and subpane UID to correct
+     * layout lines in the AknLayout system.
+     *
+     * @since   3.1
+     * @param   aLayoutResourceId    Id of a statuspane layout.
+     * @param   aPaneId              Uid of a statuspane subpane.
+     * @return  A rectangle which specifies the given subpane size 
+     *          and position in the given layout. 
+     *
+     */
+    TRect AknLayoutRect(TInt aLayoutResourceId, TPaneId aPaneId);
+
+private:
+
+   /**
+	* Constructor.
+	*/
+	CEikStatusPaneLayout();
+
+   /**
+	* 2nd phase constructor.
+	*/
+	void ConstructL(TResourceReader& aResource, const TRect& aScreenRect, TInt aLayoutId);
+
+private:
+	CEikStatusPaneLayoutTree* iRoot;
+
+private:
+
+   /**
+	* Updates layout data.
+	* @param aLayoutResId Status pane layout resource id. 
+	*/
+	void UpdateLayoutData(TInt aLayoutResId);
+	
+private:	// layout data for all nodes in CEikStatusPaneLayoutTree
+	friend class CEikStatusPaneLayoutTree;
+	const AknLayout::CInstance& iAknLayout;
+	const AknLayoutScalable_Avkon::CInstance& iAknLayoutScalable_Avkon;
+    TRect iScreenRect; 
+    TRect iMainPaneRect;
+    TRect iUsualStatusPaneRect;
+    TRect iApplicationWindowRect;
+	TRect iStaconLayout1Rect;
+	TRect iStaconLayout2Rect;
+	TRect iSmallStatusPaneRect;
+	};
+
+
+/**
+*
+* Base class for status pane model.
+*
+*/
+class CEikStatusPaneModelBase : public CBase
+	{
+public:
+
+   /**
+	* Destructor.
+	*/
+	IMPORT_C ~CEikStatusPaneModelBase();
+
+   /**
+	* Gets the pane inits of the status pane.
+	* @return Pane inits.
+	*/
+	inline CEikStatusPaneSetInit* PaneInits() const;
+	
+   /**
+	* Sets the status pane layout
+	* @param aLayoutResId Resource id of the status pane layout.
+	* @param aChangeStatusPaneNow A flag to indicate immediate status pane layout change.
+	*/	
+	IMPORT_C virtual void SetLayoutL(TInt aLayoutResId, TBool aChangeStatusPaneNow = ETrue);
+	
+   /**
+	* Gets the current layout.
+	* @return The current layout.
+	*/
+	inline CEikStatusPaneLayout* CurrentLayout() const;
+
+   /**
+	* Gets the current layout resource id.
+	* @return The current layout resource id.
+	*/
+	IMPORT_C TInt CurrentLayoutResId() const;
+
+    /**
+     * Re-reads layout data for all existing layouts from AknLayout system. The data 
+     * may have to be refreshed when e.g. screen resolution, orientation or language 
+     * variant layout is changed on the fly.
+     *
+     * @since 2.8
+     *
+     */
+	void AknLayoutRefresh();
+
+    /**
+     * This method tells if given layout is using AknLayout system for placing and sizing 
+     * the statuspane subpanes.
+     *
+     * @since   2.8
+     * @param   aLayoutId   Layout which layout type is wanted to be known.
+     * @return  ETrue if given layout has been initailized to use AknLayout. EFalse if the default
+     *          statuspane layout system is in use.
+     *
+     */
+	TBool AknLayoutUsed(TInt aLayoutId);
+
+protected:
+
+	/**
+	* Internal class to CEikStatusPaneModel, 
+	* which ties layout resource IDs to layout structures.
+	*/
+	NONSHARABLE_CLASS(CIdLayoutPair) : public CBase
+		{
+	public:
+      /**
+		* Constructor.
+		* @param aResId Resource id 
+		* @param aLayout Sub pane layout
+		*/
+		CIdLayoutPair(TInt aResId, CEikStatusPaneLayout* aLayout);
+       /**
+		* Destructor.
+		*/
+		~CIdLayoutPair();
+	public:
+		TInt iResId;
+		CEikStatusPaneLayout* iLayout;
+		};
+	typedef CArrayPtrFlat<CIdLayoutPair> CLayoutIdSet;
+	typedef CArrayFixFlat<TInt> CIdSet;
+
+protected:
+	
+   /**
+	* Constructor.
+	* @param aEikEnv An environment for creating controls.
+	*/
+	IMPORT_C CEikStatusPaneModelBase(CEikonEnv& aEikEnv);
+
+   /**
+	* Base constructor for 2nd phase construction.
+	* @param aCoreResId Status pane core resource id.
+	*/
+	IMPORT_C void BaseConstructL(TInt aCoreResId);
+
+   /**
+	* Loads given layout from resource.
+	* @param aLayoutResId Layout resource id.
+	*/
+	IMPORT_C CEikStatusPaneLayout* LoadLayoutL(TInt aLayoutResId);
+
+   /**
+	* Returns set of legal layout ids.
+	* @return Set of allowed status pane layout ids.
+	*/
+	inline CIdSet* LegalIds() const;
+	
+   /**
+	* Checks if given layout id is allowed.
+	* @param aLayoutResId Layout id to be checked.
+	* @return ETrue if given layout id is allowed.
+	*/	
+	TBool IsLegalId(TInt aLayoutResId) const;
+
+private:
+   /**
+	* Gets given layout.
+	* @param aLayoutResId Layout resource id.
+	*/
+	CEikStatusPaneLayout* Layout(TInt aLayoutResId);
+
+   /**
+	* Checks given layout.
+	* @param aLayout Layout to be checked.
+	*/
+	void CheckLayoutL(CEikStatusPaneLayout* aLayout);
+
+private:
+	IMPORT_C virtual void Reserved_1();
+
+private:
+	NONSHARABLE_CLASS(TLayoutChecker) : public MEikStatusPaneLayoutTreeVisitor
+		{
+	public:
+		TLayoutChecker(CEikStatusPaneSetInit* aPanes);
+		void VisitL(CEikStatusPaneLayoutTree* aNode);
+	private:
+		CEikStatusPaneSetInit* iPanes;	
+		};
+
+protected:
+	CLayoutIdSet* iLayouts;
+	TInt iCurrentResId;
+	CEikonEnv& iEikEnv;
+
+private:
+	CEikStatusPaneSetInit* iPanes;
+	CEikStatusPaneLayout* iCurrentLayout;
+	CIdSet* iLegalIds;
+	};
+
+
+/**
+*
+* Status pane model for application status pane.
+*
+*/
+NONSHARABLE_CLASS(CEikAppStatusPaneModel) : public CEikStatusPaneModelBase
+	{
+public:
+   /**
+	* Two phase constructor.
+    *
+	* @param aEikEnv An environment for creating controls.
+	* @param aCoreResId Status pane core resource id
+	* @param aAppResId Application status pane resource id
+	* @param aChangeStatusPaneNow A flag to indicate immediate status pane layout change.
+	* @return Constructed instance.
+	*/
+	static CEikAppStatusPaneModel* NewL(CEikonEnv& aEikEnv, /*REikSrvSession,*/ TInt aCoreResId, TInt aAppResId = EEikStatusPaneUseDefaults, TBool aChangeStatusPaneNow = ETrue);
+	
+   /**
+	* Destructor.
+	*/
+	~CEikAppStatusPaneModel();
+
+   /**
+	* Takes current layout into use.
+	*/
+	void ApplyCurrentLayoutL();
+
+public:	
+   /**
+	* from CEikStatusPaneModelBase
+	*/
+	void SetLayoutL(TInt aLayoutResId, TBool aChangeStatusPaneNow = ETrue);
+public:	
+   /**
+	* from CEikStatusPaneModelBase
+	*/
+	void SetLayoutL(TInt aLayoutResId, TBool aChangeStatusPaneNow, TBool aNotfiyServerSide);
+
+private:
+	CEikAppStatusPaneModel(CEikonEnv& aEikEnv);
+	void ConstructL(TInt aCoreResId, TInt aAppResId, TBool aChangeStatusPaneNow = ETrue);
+	};
+
+
+inline TPaneId TEikStatusPaneInit::Id() const { return iId; }
+inline TBool TEikStatusPaneInit::AppOwned() const { return iFlags & EEikStatusPaneAppOwned; }
+inline TInt TEikStatusPaneInit::ControlTypeId() const { return iControlId; }
+inline TInt TEikStatusPaneInit::ControlResourceId() const { return iControlResource; }
+inline void TEikStatusPaneInit::SetHidden() {iFlags|=KEikStatusPaneHiddenBit;}
+inline void TEikStatusPaneInit::ClearHidden() {iFlags&=~KEikStatusPaneHiddenBit;}
+inline TBool TEikStatusPaneInit::IsHidden() const {return iFlags&KEikStatusPaneHiddenBit;}
+
+inline CEikStatusPaneLayoutTree* CEikStatusPaneLayout::Find(const TPaneId& aPaneId) const { return iRoot->Find(aPaneId); }
+inline void CEikStatusPaneLayout::AcceptL(MEikStatusPaneLayoutTreeVisitor* aVisitor) { iRoot->AcceptL(aVisitor); }
+inline TRect CEikStatusPaneLayout::Rect() const { return iRoot->Rect(); }
+
+inline TPaneId CEikStatusPaneLayoutTree::Id() const { return iId; }
+inline TRect CEikStatusPaneLayoutTree::Rect() const { return iRect; }
+
+
+inline CEikStatusPaneSetInit* CEikStatusPaneModelBase::PaneInits() const { return iPanes; }
+inline CEikStatusPaneLayout* CEikStatusPaneModelBase::CurrentLayout() const { return iCurrentLayout; }
+inline CEikStatusPaneModelBase::CIdSet* CEikStatusPaneModelBase::LegalIds() const { return iLegalIds; }
+
+#endif