epoc32/include/mw/eikspmod.h
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
parent 1 666f914201fb
child 4 837f303aceeb
permissions -rw-r--r--
Final list of Symbian^2 public API header files
williamr@2
     1
/*
williamr@2
     2
* Copyright (c) 1997-1999 Nokia Corporation and/or its subsidiary(-ies).
williamr@2
     3
* All rights reserved.
williamr@2
     4
* This component and the accompanying materials are made available
williamr@2
     5
* under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
williamr@2
     6
* which accompanies this distribution, and is available
williamr@2
     7
* at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
williamr@2
     8
*
williamr@2
     9
* Initial Contributors:
williamr@2
    10
* Nokia Corporation - initial contribution.
williamr@2
    11
*
williamr@2
    12
* Contributors:
williamr@2
    13
*
williamr@2
    14
* Description:
williamr@2
    15
*
williamr@2
    16
*/
williamr@2
    17
williamr@2
    18
williamr@2
    19
#if !defined(__EIKSPMOD_H__)
williamr@2
    20
#define __EIKSPMOD_H__
williamr@2
    21
williamr@2
    22
#if !defined(__E32BASE_H__)
williamr@2
    23
#include <e32base.h>
williamr@2
    24
#endif
williamr@2
    25
williamr@2
    26
#if !defined(__EIKON_HRH__)
williamr@2
    27
#include <uikon.hrh>
williamr@2
    28
#endif
williamr@2
    29
williamr@2
    30
#if !defined(__EIKSRVC_H__)
williamr@2
    31
#include <eiksrvc.h>
williamr@2
    32
#endif
williamr@2
    33
williamr@2
    34
williamr@2
    35
class TResourceReader;
williamr@2
    36
class CEikStatusPaneLayoutTree;
williamr@2
    37
class CEikonEnv;
williamr@2
    38
class CAknSgcClient;
williamr@2
    39
class CEikStatusPaneLayout;
williamr@2
    40
namespace AknLayout { class CInstance; }
williamr@2
    41
namespace AknLayoutScalable_Avkon { class CInstance; }
williamr@2
    42
williamr@2
    43
// Extra bit flags not defined in hrh file.
williamr@2
    44
const TInt KEikStatusPaneDirectionBit		= 0x04;
williamr@2
    45
const TInt KEikStatusPaneHiddenBit			= 0x08;
williamr@2
    46
const TInt KEikStatusPaneInitInitializedBit	= 0x80000000;
williamr@2
    47
williamr@2
    48
williamr@2
    49
typedef TUid TPaneId;
williamr@2
    50
williamr@2
    51
/**
williamr@2
    52
*
williamr@2
    53
* This class stores the details about status pane sub pane 
williamr@2
    54
* ownership and initial contents. 
williamr@2
    55
*
williamr@2
    56
*/
williamr@2
    57
class TEikStatusPaneInit
williamr@2
    58
	{
williamr@2
    59
public:
williamr@2
    60
   /**
williamr@2
    61
	* Default constructor.
williamr@2
    62
	*/
williamr@2
    63
	TEikStatusPaneInit();
williamr@2
    64
williamr@2
    65
   /**
williamr@2
    66
	* Copy constructor.
williamr@2
    67
	*/
williamr@2
    68
	TEikStatusPaneInit(const TEikStatusPaneInit& aCopy);
williamr@2
    69
williamr@2
    70
   /**
williamr@2
    71
	* Operator overload.
williamr@2
    72
	*/
williamr@2
    73
	TEikStatusPaneInit& operator=(const TEikStatusPaneInit& aCopy);
williamr@2
    74
	
williamr@2
    75
   /**
williamr@2
    76
	* Gets pane id.
williamr@2
    77
	* @return id of the pane.
williamr@2
    78
	*/
williamr@2
    79
	inline TPaneId Id() const;
williamr@2
    80
williamr@2
    81
   /**
williamr@2
    82
	* Loads deafault values of the pane from given resource.
williamr@2
    83
	* Resource reader should point to an entry from the arrays of 
williamr@2
    84
	* SPANE_PANE structures  found in the STATUS_PANE_SYSTEM_MODEL 
williamr@2
    85
	* and STATUS_PANE_APP_MODEL resource structures.
williamr@2
    86
	*
williamr@2
    87
	* @param @aResource Resource reader.
williamr@2
    88
	*/
williamr@2
    89
	void LoadDefaults(TResourceReader& aResource);
williamr@2
    90
williamr@2
    91
   /**
williamr@2
    92
	* Gets flag that indicates if the sub pane is owned by the 
williamr@2
    93
	* application or not.
williamr@2
    94
	* @return ETrue if pane is application owned, otherwise EFalse.
williamr@2
    95
	*/
williamr@2
    96
	inline TBool AppOwned() const;
williamr@2
    97
	
williamr@2
    98
   /**
williamr@2
    99
	* Returns control type id of the pane.
williamr@2
   100
	* @return Id of the control inside the pane.
williamr@2
   101
	*/	
williamr@2
   102
	inline TInt ControlTypeId() const;
williamr@2
   103
williamr@2
   104
   /**
williamr@2
   105
	* Returns resource id of the control in the pane.
williamr@2
   106
	* @return Control resource id.
williamr@2
   107
	*/	
williamr@2
   108
	inline TInt ControlResourceId() const;
williamr@2
   109
williamr@2
   110
   /**
williamr@2
   111
	* Sets hidden flag.
williamr@2
   112
	*/	
williamr@2
   113
	inline void SetHidden();
williamr@2
   114
williamr@2
   115
   /**
williamr@2
   116
	* Clears hidden flag.
williamr@2
   117
	*/	
williamr@2
   118
	inline void ClearHidden();
williamr@2
   119
williamr@2
   120
   /**
williamr@2
   121
	* Gets hidden flag.
williamr@2
   122
	* @return ETrue if the pane is hidden.
williamr@2
   123
	*/		
williamr@2
   124
	inline TBool IsHidden() const;
williamr@2
   125
williamr@2
   126
private:
williamr@2
   127
   /**
williamr@2
   128
	* Gets initialized flag.
williamr@2
   129
	* @return ETrue if the pane is initialized.
williamr@2
   130
	*/		
williamr@2
   131
	inline TBool Initialized();
williamr@2
   132
williamr@2
   133
   /**
williamr@2
   134
	* Sets initialized flag.
williamr@2
   135
	*/		
williamr@2
   136
	inline void SetInitialized();
williamr@2
   137
williamr@2
   138
private:
williamr@2
   139
	TPaneId iId;
williamr@2
   140
	TInt iControlId;
williamr@2
   141
	TInt iControlResource;
williamr@2
   142
	TInt iFlags;
williamr@2
   143
	};
williamr@2
   144
williamr@2
   145
williamr@2
   146
/**
williamr@2
   147
*
williamr@2
   148
* This class stores array of TEikStatusPaneInit instances.
williamr@2
   149
*
williamr@2
   150
*/
williamr@2
   151
NONSHARABLE_CLASS(CEikStatusPaneSetInit) : public CArrayFixFlat<TEikStatusPaneInit>
williamr@2
   152
	{
williamr@2
   153
public:
williamr@2
   154
 
williamr@2
   155
   /**
williamr@2
   156
	* Two phase constructor.
williamr@2
   157
	*/
williamr@2
   158
	static CEikStatusPaneSetInit* NewL();
williamr@2
   159
williamr@2
   160
   /**
williamr@2
   161
	* Destructor.
williamr@2
   162
	*/
williamr@2
   163
	~CEikStatusPaneSetInit();
williamr@2
   164
williamr@2
   165
   /**
williamr@2
   166
	* Loads deafault values of the panes from given resource.
williamr@2
   167
	* Values are read from SPANE_PANE structure found in the 
williamr@2
   168
	* STATUS_PANE_SYSTEM_MODEL and STATUS_PANE_APP_MODEL resource 
williamr@2
   169
	* structures
williamr@2
   170
	* @param @aResource Resource reader.
williamr@2
   171
	*/
williamr@2
   172
	void LoadDefaultsL(TResourceReader& aResource);
williamr@2
   173
	
williamr@2
   174
   /**
williamr@2
   175
	* Finds the pane init with a given id. If a pane init
williamr@2
   176
	* is not found, method leaves with code KErrNotFound.
williamr@2
   177
	* @return The pane init instance with given id.
williamr@2
   178
	*/			
williamr@2
   179
	TEikStatusPaneInit& FindL(const TPaneId& aPaneId);
williamr@2
   180
williamr@2
   181
private:
williamr@2
   182
 
williamr@2
   183
   /**
williamr@2
   184
	* Private constructor.
williamr@2
   185
	*/
williamr@2
   186
	CEikStatusPaneSetInit();
williamr@2
   187
	};
williamr@2
   188
williamr@2
   189
williamr@2
   190
/**
williamr@2
   191
*
williamr@2
   192
* This abstract class is used for checking pane layout validity.
williamr@2
   193
*
williamr@2
   194
*/
williamr@2
   195
class MEikStatusPaneLayoutTreeVisitor
williamr@2
   196
	{
williamr@2
   197
public:
williamr@2
   198
   /**
williamr@2
   199
	* Virtual function of which implementation should be provided 
williamr@2
   200
	* by the classes that implement the layout check visitor design 
williamr@2
   201
	* pattern.
williamr@2
   202
	* @param aNode A layout node to be visited.
williamr@2
   203
	*/
williamr@2
   204
	virtual void VisitL(CEikStatusPaneLayoutTree* aNode) = 0;
williamr@2
   205
	};
williamr@2
   206
williamr@2
   207
williamr@2
   208
williamr@2
   209
/**
williamr@2
   210
*
williamr@2
   211
* This class calculates and stores the screen area available 
williamr@2
   212
* for each layout tree.
williamr@2
   213
*
williamr@2
   214
*/
williamr@2
   215
NONSHARABLE_CLASS(CEikStatusPaneLayoutTree) : public CBase
williamr@2
   216
	{
williamr@2
   217
public:
williamr@2
   218
	enum TDirection
williamr@2
   219
		{
williamr@2
   220
		/** Horizontal direction */
williamr@2
   221
		EHorizontal,
williamr@2
   222
		/** Vertical direction */
williamr@2
   223
		EVertical
williamr@2
   224
		};
williamr@2
   225
williamr@2
   226
public:
williamr@2
   227
   /**
williamr@2
   228
	* Destructor.
williamr@2
   229
	*/
williamr@2
   230
	~CEikStatusPaneLayoutTree();
williamr@2
   231
williamr@2
   232
   /**
williamr@2
   233
	* Two phase constructor.
williamr@2
   234
	* @param aLayout Layout data
williamr@2
   235
	* @param aResource Resource of layout tree.
williamr@2
   236
	* @param aDefaultDirection Default direction of the layout tree.
williamr@2
   237
	*/
williamr@2
   238
	static CEikStatusPaneLayoutTree* NewL(CEikStatusPaneLayout* aLayout, TResourceReader& aResource, TDirection aDefaultDirection = EHorizontal);
williamr@2
   239
williamr@2
   240
   /**
williamr@2
   241
	* Finds the layout tree with a given pane id. 
williamr@2
   242
	* @param aPaneId A id of the pane.
williamr@2
   243
	* @return If layout tree was found, a pointer to layout tree 
williamr@2
   244
	*         with given id. Otherwise NULL is returned.
williamr@2
   245
	*/			
williamr@2
   246
	CEikStatusPaneLayoutTree* Find(const TPaneId& aPaneId);
williamr@2
   247
	
williamr@2
   248
   /**
williamr@2
   249
	* Calls given visitor objects VisitL, method. Additionally
williamr@2
   250
	* calls AcceptL -method of each sub pane layouts inside this layout tree.
williamr@2
   251
	* @param aVisitor A visitor object to be visited.
williamr@2
   252
	*/			
williamr@2
   253
	void AcceptL(MEikStatusPaneLayoutTreeVisitor* aVisitor);
williamr@2
   254
williamr@2
   255
   /**
williamr@2
   256
	* Gets pane id.
williamr@2
   257
	* @return id of the pane.
williamr@2
   258
	*/
williamr@2
   259
	inline TPaneId Id() const;
williamr@2
   260
williamr@2
   261
   /**
williamr@2
   262
	* Gets rectagle of the layout tree.
williamr@2
   263
	* @return Rectangle of the layout tree.
williamr@2
   264
	*/
williamr@2
   265
	inline TRect Rect() const;
williamr@2
   266
williamr@2
   267
    /**
williamr@2
   268
     * This method maps given layout resource id and subpane UID to correct
williamr@2
   269
     * layout lines in the AknLayout system.
williamr@2
   270
     *
williamr@2
   271
     * @since   2.8
williamr@2
   272
     * @param   aLayoutResourceId    Id of a statuspane layout.
williamr@2
   273
     * @param   aPaneId              Uid of a statuspane subpane.
williamr@2
   274
     * @return  A rectangle which specifies the given subpane size 
williamr@2
   275
     *          and position in the given layout. 
williamr@2
   276
     *
williamr@2
   277
     */
williamr@2
   278
    TRect AknLayoutRect(TInt aLayoutResourceId, TPaneId aPaneId);
williamr@2
   279
williamr@2
   280
private:
williamr@2
   281
williamr@2
   282
   /**
williamr@2
   283
	* Private constructor.
williamr@2
   284
	* @param aLayout Layout data
williamr@2
   285
	* @param aDefaultDirection Default direction of the layout tree.
williamr@2
   286
	*/
williamr@2
   287
	CEikStatusPaneLayoutTree(CEikStatusPaneLayout* aLayout, TDirection aDefaultDirection);
williamr@2
   288
williamr@2
   289
   /**
williamr@2
   290
	* Private 2nd phase constructor.
williamr@2
   291
	* @param aResource Resource of layout tree.
williamr@2
   292
	*/
williamr@2
   293
	void ConstructL(TResourceReader& aResource);
williamr@2
   294
williamr@2
   295
   /**
williamr@2
   296
	* Sets rectagle of the layout tree.
williamr@2
   297
	* @param aRect Rectangle of the layout tree.
williamr@2
   298
	*/
williamr@2
   299
	void SetRect(const TRect& aRect);
williamr@2
   300
williamr@2
   301
   /**
williamr@2
   302
	* Gets direction of the layout tree.
williamr@2
   303
	* @return Direction of the layout tree.
williamr@2
   304
	*/
williamr@2
   305
	inline TDirection Direction();
williamr@2
   306
	
williamr@2
   307
   /**
williamr@2
   308
	* Sets direction of the layout tree.
williamr@2
   309
	* @param aDirection Direction of the layout tree.
williamr@2
   310
	*/
williamr@2
   311
	void SetDirection(TDirection aDirection);
williamr@2
   312
	
williamr@2
   313
   /**
williamr@2
   314
	* Gets size of the layout tree.
williamr@2
   315
	* @return size of the layout tree.
williamr@2
   316
	*/
williamr@2
   317
	inline TInt Size();
williamr@2
   318
	
williamr@2
   319
   /**
williamr@2
   320
	* Gets stretchable flag of the layout tree.
williamr@2
   321
	* @return Stretchable flag of the layout tree.
williamr@2
   322
	*/
williamr@2
   323
	inline TBool Stretchable();
williamr@2
   324
williamr@2
   325
   /**
williamr@2
   326
	* Sets stretchable flag of the layout tree.
williamr@2
   327
	* @param Stretchable flag of the layout tree.
williamr@2
   328
	*/
williamr@2
   329
	void SetStretchable(TBool aStretchable);
williamr@2
   330
	
williamr@2
   331
   /**
williamr@2
   332
	* Sets the layout of the sub panes inside layout tree according to
williamr@2
   333
	* layout tree attributes read from the resource structures.
williamr@2
   334
	*/
williamr@2
   335
	void Layout();
williamr@2
   336
williamr@2
   337
   /**
williamr@2
   338
     * This methods purpose is eqvivalent of the Layout() method, but the difference
williamr@2
   339
     * is that this method uses AknLayout system instead of the statuspane
williamr@2
   340
     * resource definitions for determining the positions and sizes of the subpanes.
williamr@2
   341
     *
williamr@2
   342
     * If AknLayoutUsed flag has not been set then this method defaults to the behaviour
williamr@2
   343
     * of the Layout() -method.
williamr@2
   344
     *
williamr@2
   345
     * @since   2.8
williamr@2
   346
     * @param   aLayoutResourceId    Id of the statuspane layout which is to be laid out.
williamr@2
   347
     *
williamr@2
   348
     */
williamr@2
   349
	void Layout(TInt aLayoutResourceId);
williamr@2
   350
williamr@2
   351
    /**
williamr@2
   352
     * This method sets flag which tells wheter AknLayout system is
williamr@2
   353
     * used or not for layout.
williamr@2
   354
     *
williamr@2
   355
     * @since   2.8
williamr@2
   356
     * @param   aAknLayoutUsed  ETrue if AknLayout is to be used. EFalse otherwise.   
williamr@2
   357
     *
williamr@2
   358
     */
williamr@2
   359
    void SetAknLayoutUsed(TBool aAknLayoutUsed);
williamr@2
   360
    
williamr@2
   361
    /**
williamr@2
   362
     * This method gets flag which tells wheter AknLayout system is
williamr@2
   363
     * used or not for layout.
williamr@2
   364
     *
williamr@2
   365
     * @since   2.8
williamr@2
   366
     * @return  ETrue if AknLayout is to be used. EFalse otherwise.   
williamr@2
   367
     *
williamr@2
   368
     */
williamr@2
   369
    TBool AknLayoutUsed();
williamr@2
   370
williamr@2
   371
private:
williamr@2
   372
	TPaneId iId;
williamr@2
   373
	TInt iFlags;
williamr@2
   374
	TRect iRect;
williamr@2
   375
	TInt iSize;
williamr@2
   376
williamr@2
   377
	typedef CArrayPtrFlat<CEikStatusPaneLayoutTree> CSubPaneArray;
williamr@2
   378
	CSubPaneArray* iSubPanes;
williamr@2
   379
williamr@2
   380
	CEikStatusPaneLayout* iLayout;
williamr@2
   381
	
williamr@2
   382
private:
williamr@2
   383
	friend class CEikStatusPaneLayout;
williamr@2
   384
	};
williamr@2
   385
williamr@2
   386
williamr@2
   387
/**
williamr@2
   388
*
williamr@2
   389
* This class calculates and stores the screen area available 
williamr@2
   390
* for each sub pane layout.
williamr@2
   391
*
williamr@2
   392
*/
williamr@2
   393
NONSHARABLE_CLASS(CEikStatusPaneLayout) : public CBase
williamr@2
   394
	{
williamr@2
   395
public:
williamr@2
   396
   /**
williamr@2
   397
	* Two phase constructor.
williamr@2
   398
	* @param aResource Resource of sub pane layout.
williamr@2
   399
	* @param aScreenRect Screen rectangle.
williamr@2
   400
	*/
williamr@2
   401
	static CEikStatusPaneLayout* NewL(TResourceReader& aResource, const TRect& aScreenRect);
williamr@2
   402
williamr@2
   403
   /**
williamr@2
   404
	* Two phase constructor.
williamr@2
   405
	* @param aResource Resource of sub pane layout.
williamr@2
   406
	* @param aScreenRect Screen rectangle.
williamr@2
   407
	* @param aLayoutId Id of the status pane layout.
williamr@2
   408
	*/
williamr@2
   409
	static CEikStatusPaneLayout* NewL(TResourceReader& aResource, const TRect& aScreenRect, TInt aLayoutId);
williamr@2
   410
	
williamr@2
   411
   /**
williamr@2
   412
	* Destructor
williamr@2
   413
	*/	
williamr@2
   414
	~CEikStatusPaneLayout();
williamr@2
   415
williamr@2
   416
   /**
williamr@2
   417
	* Finds the pane init with a given id. If a pane init
williamr@2
   418
	* is not found NULL pointer is returned.
williamr@2
   419
	* @return The layout tree instance with given id.
williamr@2
   420
	*/			
williamr@2
   421
	inline CEikStatusPaneLayoutTree* Find(const TPaneId& aPaneId) const;
williamr@2
   422
williamr@2
   423
   /**
williamr@2
   424
	* Calls given visitor objects VisitL, method. 
williamr@2
   425
	* @param aVisitor A visitor object to be visited.
williamr@2
   426
	*/			
williamr@2
   427
	inline void AcceptL(MEikStatusPaneLayoutTreeVisitor* aVisitor);
williamr@2
   428
	
williamr@2
   429
   /**
williamr@2
   430
	* Gets rectagle of the sub pane layout.
williamr@2
   431
	* @return Rectangle of the sub pane layout.
williamr@2
   432
	*/
williamr@2
   433
	inline TRect Rect() const;
williamr@2
   434
williamr@2
   435
    /**
williamr@2
   436
     * Re-reads layout data from AknLayout system. The data may have to be refreshed when e.g.
williamr@2
   437
     * screen resolution, orientation or language variant layout is changed on the fly.
williamr@2
   438
     *
williamr@2
   439
     * @since   2.8
williamr@2
   440
     * @param   aLayoutResourceId    Id of the statuspane layout which data is to be refreshed.
williamr@2
   441
     *
williamr@2
   442
     */
williamr@2
   443
	void AknLayoutRefresh(TInt aLayoutResourceId);
williamr@2
   444
williamr@2
   445
    /**
williamr@2
   446
     * This method tells if this layout is using AknLayout system for placing and sizing 
williamr@2
   447
     * the statuspane subpanes.
williamr@2
   448
     *
williamr@2
   449
     * @since   2.8
williamr@2
   450
     * @return  ETrue if this layout has been initailized to use AknLayout. EFalse if the default
williamr@2
   451
     *          statuspane layout system is in use.
williamr@2
   452
     *
williamr@2
   453
     */
williamr@2
   454
    TBool AknLayoutUsed();
williamr@2
   455
williamr@2
   456
    /**
williamr@2
   457
     * This method maps given layout resource id and subpane UID to correct
williamr@2
   458
     * layout lines in the AknLayout system.
williamr@2
   459
     *
williamr@2
   460
     * @since   3.1
williamr@2
   461
     * @param   aLayoutResourceId    Id of a statuspane layout.
williamr@2
   462
     * @param   aPaneId              Uid of a statuspane subpane.
williamr@2
   463
     * @return  A rectangle which specifies the given subpane size 
williamr@2
   464
     *          and position in the given layout. 
williamr@2
   465
     *
williamr@2
   466
     */
williamr@2
   467
    TRect AknLayoutRect(TInt aLayoutResourceId, TPaneId aPaneId);
williamr@2
   468
williamr@2
   469
private:
williamr@2
   470
williamr@2
   471
   /**
williamr@2
   472
	* Constructor.
williamr@2
   473
	*/
williamr@2
   474
	CEikStatusPaneLayout();
williamr@2
   475
williamr@2
   476
   /**
williamr@2
   477
	* 2nd phase constructor.
williamr@2
   478
	*/
williamr@2
   479
	void ConstructL(TResourceReader& aResource, const TRect& aScreenRect, TInt aLayoutId);
williamr@2
   480
williamr@2
   481
private:
williamr@2
   482
	CEikStatusPaneLayoutTree* iRoot;
williamr@2
   483
williamr@2
   484
private:
williamr@2
   485
williamr@2
   486
   /**
williamr@2
   487
	* Updates layout data.
williamr@2
   488
	* @param aLayoutResId Status pane layout resource id. 
williamr@2
   489
	*/
williamr@2
   490
	void UpdateLayoutData(TInt aLayoutResId);
williamr@2
   491
	
williamr@2
   492
private:	// layout data for all nodes in CEikStatusPaneLayoutTree
williamr@2
   493
	friend class CEikStatusPaneLayoutTree;
williamr@2
   494
	const AknLayout::CInstance& iAknLayout;
williamr@2
   495
	const AknLayoutScalable_Avkon::CInstance& iAknLayoutScalable_Avkon;
williamr@2
   496
    TRect iScreenRect; 
williamr@2
   497
    TRect iMainPaneRect;
williamr@2
   498
    TRect iUsualStatusPaneRect;
williamr@2
   499
    TRect iApplicationWindowRect;
williamr@2
   500
	TRect iStaconLayout1Rect;
williamr@2
   501
	TRect iStaconLayout2Rect;
williamr@2
   502
	TRect iSmallStatusPaneRect;
williamr@2
   503
	};
williamr@2
   504
williamr@2
   505
williamr@2
   506
/**
williamr@2
   507
*
williamr@2
   508
* Base class for status pane model.
williamr@2
   509
*
williamr@2
   510
*/
williamr@2
   511
class CEikStatusPaneModelBase : public CBase
williamr@2
   512
	{
williamr@2
   513
public:
williamr@2
   514
williamr@2
   515
   /**
williamr@2
   516
	* Destructor.
williamr@2
   517
	*/
williamr@2
   518
	IMPORT_C ~CEikStatusPaneModelBase();
williamr@2
   519
williamr@2
   520
   /**
williamr@2
   521
	* Gets the pane inits of the status pane.
williamr@2
   522
	* @return Pane inits.
williamr@2
   523
	*/
williamr@2
   524
	inline CEikStatusPaneSetInit* PaneInits() const;
williamr@2
   525
	
williamr@2
   526
   /**
williamr@2
   527
	* Sets the status pane layout
williamr@2
   528
	* @param aLayoutResId Resource id of the status pane layout.
williamr@2
   529
	* @param aChangeStatusPaneNow A flag to indicate immediate status pane layout change.
williamr@2
   530
	*/	
williamr@2
   531
	IMPORT_C virtual void SetLayoutL(TInt aLayoutResId, TBool aChangeStatusPaneNow = ETrue);
williamr@2
   532
	
williamr@2
   533
   /**
williamr@2
   534
	* Gets the current layout.
williamr@2
   535
	* @return The current layout.
williamr@2
   536
	*/
williamr@2
   537
	inline CEikStatusPaneLayout* CurrentLayout() const;
williamr@2
   538
williamr@2
   539
   /**
williamr@2
   540
	* Gets the current layout resource id.
williamr@2
   541
	* @return The current layout resource id.
williamr@2
   542
	*/
williamr@2
   543
	IMPORT_C TInt CurrentLayoutResId() const;
williamr@2
   544
williamr@2
   545
    /**
williamr@2
   546
     * Re-reads layout data for all existing layouts from AknLayout system. The data 
williamr@2
   547
     * may have to be refreshed when e.g. screen resolution, orientation or language 
williamr@2
   548
     * variant layout is changed on the fly.
williamr@2
   549
     *
williamr@2
   550
     * @since 2.8
williamr@2
   551
     *
williamr@2
   552
     */
williamr@2
   553
	void AknLayoutRefresh();
williamr@2
   554
williamr@2
   555
    /**
williamr@2
   556
     * This method tells if given layout is using AknLayout system for placing and sizing 
williamr@2
   557
     * the statuspane subpanes.
williamr@2
   558
     *
williamr@2
   559
     * @since   2.8
williamr@2
   560
     * @param   aLayoutId   Layout which layout type is wanted to be known.
williamr@2
   561
     * @return  ETrue if given layout has been initailized to use AknLayout. EFalse if the default
williamr@2
   562
     *          statuspane layout system is in use.
williamr@2
   563
     *
williamr@2
   564
     */
williamr@2
   565
	TBool AknLayoutUsed(TInt aLayoutId);
williamr@2
   566
williamr@2
   567
protected:
williamr@2
   568
williamr@2
   569
	/**
williamr@2
   570
	* Internal class to CEikStatusPaneModel, 
williamr@2
   571
	* which ties layout resource IDs to layout structures.
williamr@2
   572
	*/
williamr@2
   573
	NONSHARABLE_CLASS(CIdLayoutPair) : public CBase
williamr@2
   574
		{
williamr@2
   575
	public:
williamr@2
   576
      /**
williamr@2
   577
		* Constructor.
williamr@2
   578
		* @param aResId Resource id 
williamr@2
   579
		* @param aLayout Sub pane layout
williamr@2
   580
		*/
williamr@2
   581
		CIdLayoutPair(TInt aResId, CEikStatusPaneLayout* aLayout);
williamr@2
   582
       /**
williamr@2
   583
		* Destructor.
williamr@2
   584
		*/
williamr@2
   585
		~CIdLayoutPair();
williamr@2
   586
	public:
williamr@2
   587
		TInt iResId;
williamr@2
   588
		CEikStatusPaneLayout* iLayout;
williamr@2
   589
		};
williamr@2
   590
	typedef CArrayPtrFlat<CIdLayoutPair> CLayoutIdSet;
williamr@2
   591
	typedef CArrayFixFlat<TInt> CIdSet;
williamr@2
   592
williamr@2
   593
protected:
williamr@2
   594
	
williamr@2
   595
   /**
williamr@2
   596
	* Constructor.
williamr@2
   597
	* @param aEikEnv An environment for creating controls.
williamr@2
   598
	*/
williamr@2
   599
	IMPORT_C CEikStatusPaneModelBase(CEikonEnv& aEikEnv);
williamr@2
   600
williamr@2
   601
   /**
williamr@2
   602
	* Base constructor for 2nd phase construction.
williamr@2
   603
	* @param aCoreResId Status pane core resource id.
williamr@2
   604
	*/
williamr@2
   605
	IMPORT_C void BaseConstructL(TInt aCoreResId);
williamr@2
   606
williamr@2
   607
   /**
williamr@2
   608
	* Loads given layout from resource.
williamr@2
   609
	* @param aLayoutResId Layout resource id.
williamr@2
   610
	*/
williamr@2
   611
	IMPORT_C CEikStatusPaneLayout* LoadLayoutL(TInt aLayoutResId);
williamr@2
   612
williamr@2
   613
   /**
williamr@2
   614
	* Returns set of legal layout ids.
williamr@2
   615
	* @return Set of allowed status pane layout ids.
williamr@2
   616
	*/
williamr@2
   617
	inline CIdSet* LegalIds() const;
williamr@2
   618
	
williamr@2
   619
   /**
williamr@2
   620
	* Checks if given layout id is allowed.
williamr@2
   621
	* @param aLayoutResId Layout id to be checked.
williamr@2
   622
	* @return ETrue if given layout id is allowed.
williamr@2
   623
	*/	
williamr@2
   624
	TBool IsLegalId(TInt aLayoutResId) const;
williamr@2
   625
williamr@2
   626
private:
williamr@2
   627
   /**
williamr@2
   628
	* Gets given layout.
williamr@2
   629
	* @param aLayoutResId Layout resource id.
williamr@2
   630
	*/
williamr@2
   631
	CEikStatusPaneLayout* Layout(TInt aLayoutResId);
williamr@2
   632
williamr@2
   633
   /**
williamr@2
   634
	* Checks given layout.
williamr@2
   635
	* @param aLayout Layout to be checked.
williamr@2
   636
	*/
williamr@2
   637
	void CheckLayoutL(CEikStatusPaneLayout* aLayout);
williamr@2
   638
williamr@2
   639
private:
williamr@2
   640
	IMPORT_C virtual void Reserved_1();
williamr@2
   641
williamr@2
   642
private:
williamr@2
   643
	NONSHARABLE_CLASS(TLayoutChecker) : public MEikStatusPaneLayoutTreeVisitor
williamr@2
   644
		{
williamr@2
   645
	public:
williamr@2
   646
		TLayoutChecker(CEikStatusPaneSetInit* aPanes);
williamr@2
   647
		void VisitL(CEikStatusPaneLayoutTree* aNode);
williamr@2
   648
	private:
williamr@2
   649
		CEikStatusPaneSetInit* iPanes;	
williamr@2
   650
		};
williamr@2
   651
williamr@2
   652
protected:
williamr@2
   653
	CLayoutIdSet* iLayouts;
williamr@2
   654
	TInt iCurrentResId;
williamr@2
   655
	CEikonEnv& iEikEnv;
williamr@2
   656
williamr@2
   657
private:
williamr@2
   658
	CEikStatusPaneSetInit* iPanes;
williamr@2
   659
	CEikStatusPaneLayout* iCurrentLayout;
williamr@2
   660
	CIdSet* iLegalIds;
williamr@2
   661
	};
williamr@2
   662
williamr@2
   663
williamr@2
   664
/**
williamr@2
   665
*
williamr@2
   666
* Status pane model for application status pane.
williamr@2
   667
*
williamr@2
   668
*/
williamr@2
   669
NONSHARABLE_CLASS(CEikAppStatusPaneModel) : public CEikStatusPaneModelBase
williamr@2
   670
	{
williamr@2
   671
public:
williamr@2
   672
   /**
williamr@2
   673
	* Two phase constructor.
williamr@2
   674
    *
williamr@2
   675
	* @param aEikEnv An environment for creating controls.
williamr@2
   676
	* @param aCoreResId Status pane core resource id
williamr@2
   677
	* @param aAppResId Application status pane resource id
williamr@2
   678
	* @param aChangeStatusPaneNow A flag to indicate immediate status pane layout change.
williamr@2
   679
	* @return Constructed instance.
williamr@2
   680
	*/
williamr@2
   681
	static CEikAppStatusPaneModel* NewL(CEikonEnv& aEikEnv, /*REikSrvSession,*/ TInt aCoreResId, TInt aAppResId = EEikStatusPaneUseDefaults, TBool aChangeStatusPaneNow = ETrue);
williamr@2
   682
	
williamr@2
   683
   /**
williamr@2
   684
	* Destructor.
williamr@2
   685
	*/
williamr@2
   686
	~CEikAppStatusPaneModel();
williamr@2
   687
williamr@2
   688
   /**
williamr@2
   689
	* Takes current layout into use.
williamr@2
   690
	*/
williamr@2
   691
	void ApplyCurrentLayoutL();
williamr@2
   692
williamr@2
   693
public:	
williamr@2
   694
   /**
williamr@2
   695
	* from CEikStatusPaneModelBase
williamr@2
   696
	*/
williamr@2
   697
	void SetLayoutL(TInt aLayoutResId, TBool aChangeStatusPaneNow = ETrue);
williamr@2
   698
public:	
williamr@2
   699
   /**
williamr@2
   700
	* from CEikStatusPaneModelBase
williamr@2
   701
	*/
williamr@2
   702
	void SetLayoutL(TInt aLayoutResId, TBool aChangeStatusPaneNow, TBool aNotfiyServerSide);
williamr@2
   703
williamr@2
   704
private:
williamr@2
   705
	CEikAppStatusPaneModel(CEikonEnv& aEikEnv);
williamr@2
   706
	void ConstructL(TInt aCoreResId, TInt aAppResId, TBool aChangeStatusPaneNow = ETrue);
williamr@2
   707
	};
williamr@2
   708
williamr@2
   709
williamr@2
   710
inline TPaneId TEikStatusPaneInit::Id() const { return iId; }
williamr@2
   711
inline TBool TEikStatusPaneInit::AppOwned() const { return iFlags & EEikStatusPaneAppOwned; }
williamr@2
   712
inline TInt TEikStatusPaneInit::ControlTypeId() const { return iControlId; }
williamr@2
   713
inline TInt TEikStatusPaneInit::ControlResourceId() const { return iControlResource; }
williamr@2
   714
inline void TEikStatusPaneInit::SetHidden() {iFlags|=KEikStatusPaneHiddenBit;}
williamr@2
   715
inline void TEikStatusPaneInit::ClearHidden() {iFlags&=~KEikStatusPaneHiddenBit;}
williamr@2
   716
inline TBool TEikStatusPaneInit::IsHidden() const {return iFlags&KEikStatusPaneHiddenBit;}
williamr@2
   717
williamr@2
   718
inline CEikStatusPaneLayoutTree* CEikStatusPaneLayout::Find(const TPaneId& aPaneId) const { return iRoot->Find(aPaneId); }
williamr@2
   719
inline void CEikStatusPaneLayout::AcceptL(MEikStatusPaneLayoutTreeVisitor* aVisitor) { iRoot->AcceptL(aVisitor); }
williamr@2
   720
inline TRect CEikStatusPaneLayout::Rect() const { return iRoot->Rect(); }
williamr@2
   721
williamr@2
   722
inline TPaneId CEikStatusPaneLayoutTree::Id() const { return iId; }
williamr@2
   723
inline TRect CEikStatusPaneLayoutTree::Rect() const { return iRect; }
williamr@2
   724
williamr@2
   725
williamr@2
   726
inline CEikStatusPaneSetInit* CEikStatusPaneModelBase::PaneInits() const { return iPanes; }
williamr@2
   727
inline CEikStatusPaneLayout* CEikStatusPaneModelBase::CurrentLayout() const { return iCurrentLayout; }
williamr@2
   728
inline CEikStatusPaneModelBase::CIdSet* CEikStatusPaneModelBase::LegalIds() const { return iLegalIds; }
williamr@2
   729
williamr@2
   730
#endif