00001 // EIKSPMOD.H 00002 // 00003 // Copyright (c) 1997-1999 Symbian Ltd. All rights reserved. 00004 // 00005 00006 #if !defined(__EIKSPMOD_H__) 00007 #define __EIKSPMOD_H__ 00008 00009 #if !defined(__E32BASE_H__) 00010 #include <e32base.h> 00011 #endif 00012 00013 #if !defined(__EIKON_HRH__) 00014 #include <uikon.hrh> 00015 #endif 00016 00017 #if !defined(__EIKSRVC_H__) 00018 #include <eiksrvc.h> 00019 #endif 00020 00021 00022 class TResourceReader; 00023 class CEikStatusPaneLayoutTree; 00024 class CEikonEnv; 00025 class CAknSgcClient; 00026 #start_since SINCE_3_1_SDK 00027 class CEikStatusPaneLayout; 00031 namespace AknLayout { class CInstance; } 00035 namespace AknLayoutScalable_Avkon { class CInstance; } 00036 #end_since SINCE_3_1_SDK 00037 00038 // Extra bit flags not defined in hrh file. 00039 const TInt KEikStatusPaneDirectionBit = 0x04; 00040 const TInt KEikStatusPaneHiddenBit = 0x08; 00041 const TInt KEikStatusPaneInitInitializedBit = 0x80000000; 00042 00043 00044 typedef TUid TPaneId; 00045 00052 class TEikStatusPaneInit 00053 { 00054 public: 00058 TEikStatusPaneInit(); 00059 00063 TEikStatusPaneInit(const TEikStatusPaneInit& aCopy); 00064 00068 TEikStatusPaneInit& operator=(const TEikStatusPaneInit& aCopy); 00069 00074 inline TPaneId Id() const; 00075 00084 void LoadDefaults(TResourceReader& aResource); 00085 00091 inline TBool AppOwned() const; 00092 00097 inline TInt ControlTypeId() const; 00098 00103 inline TInt ControlResourceId() const; 00104 00108 inline void SetHidden(); 00109 00113 inline void ClearHidden(); 00114 00119 inline TBool IsHidden() const; 00120 00121 private: 00126 inline TBool Initialized(); 00127 00131 inline void SetInitialized(); 00132 00133 private: 00134 TPaneId iId; 00135 TInt iControlId; 00136 TInt iControlResource; 00137 TInt iFlags; 00138 }; 00139 00140 00146 NONSHARABLE_CLASS(CEikStatusPaneSetInit) : public CArrayFixFlat<TEikStatusPaneInit> 00147 { 00148 public: 00149 00153 static CEikStatusPaneSetInit* NewL(); 00154 00158 ~CEikStatusPaneSetInit(); 00159 00167 void LoadDefaultsL(TResourceReader& aResource); 00168 00174 TEikStatusPaneInit& FindL(const TPaneId& aPaneId); 00175 00176 private: 00177 00181 CEikStatusPaneSetInit(); 00182 }; 00183 00184 00190 class MEikStatusPaneLayoutTreeVisitor 00191 { 00192 public: 00199 virtual void VisitL(CEikStatusPaneLayoutTree* aNode) = 0; 00200 }; 00201 00202 00203 00210 NONSHARABLE_CLASS(CEikStatusPaneLayoutTree) : public CBase 00211 { 00212 public: 00213 enum TDirection 00214 { 00216 EHorizontal, 00218 EVertical 00219 }; 00220 00221 public: 00225 ~CEikStatusPaneLayoutTree(); 00226 #start_since SINCE_3_1_SDK 00227 00234 static CEikStatusPaneLayoutTree* NewL(CEikStatusPaneLayout* aLayout, TResourceReader& aResource, TDirection aDefaultDirection = EHorizontal); 00235 #end_since SINCE_3_1_SDK 00236 00243 CEikStatusPaneLayoutTree* Find(const TPaneId& aPaneId); 00244 00250 void AcceptL(MEikStatusPaneLayoutTreeVisitor* aVisitor); 00251 00256 inline TPaneId Id() const; 00257 00262 inline TRect Rect() const; 00263 00264 #start_since SINCE_3_1_SDK 00265 00276 TRect AknLayoutRect(TInt aLayoutResourceId, TPaneId aPaneId); 00277 #end_since SINCE_3_1_SDK 00278 00279 private: 00280 00286 CEikStatusPaneLayoutTree(CEikStatusPaneLayout* aLayout, TDirection aDefaultDirection); 00287 00292 void ConstructL(TResourceReader& aResource); 00293 00298 void SetRect(const TRect& aRect); 00299 00304 inline TDirection Direction(); 00305 00310 void SetDirection(TDirection aDirection); 00311 00316 inline TInt Size(); 00317 00322 inline TBool Stretchable(); 00323 00328 void SetStretchable(TBool aStretchable); 00329 00334 void Layout(); 00335 00348 void Layout(TInt aLayoutResourceId); 00349 00358 void SetAknLayoutUsed(TBool aAknLayoutUsed); 00359 00368 TBool AknLayoutUsed(); 00369 00370 private: 00371 TPaneId iId; 00372 TInt iFlags; 00373 TRect iRect; 00374 TInt iSize; 00375 00376 typedef CArrayPtrFlat<CEikStatusPaneLayoutTree> CSubPaneArray; 00377 CSubPaneArray* iSubPanes; 00378 00379 CEikStatusPaneLayout* iLayout; 00380 00381 private: 00382 friend class CEikStatusPaneLayout; 00383 }; 00384 00385 00392 NONSHARABLE_CLASS(CEikStatusPaneLayout) : public CBase 00393 { 00394 public: 00400 static CEikStatusPaneLayout* NewL(TResourceReader& aResource, const TRect& aScreenRect); 00401 00408 static CEikStatusPaneLayout* NewL(TResourceReader& aResource, const TRect& aScreenRect, TInt aLayoutId); 00409 00413 ~CEikStatusPaneLayout(); 00414 00420 inline CEikStatusPaneLayoutTree* Find(const TPaneId& aPaneId) const; 00421 00426 inline void AcceptL(MEikStatusPaneLayoutTreeVisitor* aVisitor); 00427 00432 inline TRect Rect() const; 00433 00442 void AknLayoutRefresh(TInt aLayoutResourceId); 00443 00453 TBool AknLayoutUsed(); 00454 00455 #start_since SINCE_3_1_SDK 00456 00467 TRect AknLayoutRect(TInt aLayoutResourceId, TPaneId aPaneId); 00468 #end_since SINCE_3_1_SDK 00469 00470 private: 00471 00475 CEikStatusPaneLayout(); 00476 00480 void ConstructL(TResourceReader& aResource, const TRect& aScreenRect, TInt aLayoutId); 00481 00482 private: 00483 CEikStatusPaneLayoutTree* iRoot; 00484 00485 private: 00486 00491 void UpdateLayoutData(TInt aLayoutResId); 00492 00493 private: // layout data for all nodes in CEikStatusPaneLayoutTree 00494 friend class CEikStatusPaneLayoutTree; 00495 const AknLayout::CInstance& iAknLayout; 00496 const AknLayoutScalable_Avkon::CInstance& iAknLayoutScalable_Avkon; 00497 TRect iScreenRect; 00498 TRect iMainPaneRect; 00499 TRect iUsualStatusPaneRect; 00500 TRect iApplicationWindowRect; 00501 TRect iStaconLayout1Rect; 00502 TRect iStaconLayout2Rect; 00503 TRect iSmallStatusPaneRect; 00504 }; 00505 00506 00512 class CEikStatusPaneModelBase : public CBase 00513 { 00514 public: 00515 00519 IMPORT_C ~CEikStatusPaneModelBase(); 00520 00525 inline CEikStatusPaneSetInit* PaneInits() const; 00526 00532 IMPORT_C virtual void SetLayoutL(TInt aLayoutResId, TBool aChangeStatusPaneNow = ETrue); 00533 00538 inline CEikStatusPaneLayout* CurrentLayout() const; 00539 00544 IMPORT_C TInt CurrentLayoutResId() const; 00545 00554 void AknLayoutRefresh(); 00555 00566 TBool AknLayoutUsed(TInt aLayoutId); 00567 00568 protected: 00569 00574 NONSHARABLE_CLASS(CIdLayoutPair) : public CBase 00575 { 00576 public: 00582 CIdLayoutPair(TInt aResId, CEikStatusPaneLayout* aLayout); 00586 ~CIdLayoutPair(); 00587 public: 00588 TInt iResId; 00589 CEikStatusPaneLayout* iLayout; 00590 }; 00591 typedef CArrayPtrFlat<CIdLayoutPair> CLayoutIdSet; 00592 typedef CArrayFixFlat<TInt> CIdSet; 00593 00594 protected: 00595 00600 IMPORT_C CEikStatusPaneModelBase(CEikonEnv& aEikEnv); 00601 00606 IMPORT_C void BaseConstructL(TInt aCoreResId); 00607 00612 IMPORT_C CEikStatusPaneLayout* LoadLayoutL(TInt aLayoutResId); 00613 00618 inline CIdSet* LegalIds() const; 00619 00625 TBool IsLegalId(TInt aLayoutResId) const; 00626 00627 private: 00632 CEikStatusPaneLayout* Layout(TInt aLayoutResId); 00633 00638 void CheckLayoutL(CEikStatusPaneLayout* aLayout); 00639 00640 private: 00641 IMPORT_C virtual void Reserved_1(); 00642 00643 private: 00644 NONSHARABLE_CLASS(TLayoutChecker) : public MEikStatusPaneLayoutTreeVisitor 00645 { 00646 public: 00647 TLayoutChecker(CEikStatusPaneSetInit* aPanes); 00648 void VisitL(CEikStatusPaneLayoutTree* aNode); 00649 private: 00650 CEikStatusPaneSetInit* iPanes; 00651 }; 00652 00653 protected: 00654 CLayoutIdSet* iLayouts; 00655 TInt iCurrentResId; 00656 CEikonEnv& iEikEnv; 00657 00658 private: 00659 CEikStatusPaneSetInit* iPanes; 00660 CEikStatusPaneLayout* iCurrentLayout; 00661 CIdSet* iLegalIds; 00662 }; 00663 00664 00670 NONSHARABLE_CLASS(CEikAppStatusPaneModel) : public CEikStatusPaneModelBase 00671 { 00672 public: 00682 static CEikAppStatusPaneModel* NewL(CEikonEnv& aEikEnv, /*REikSrvSession,*/ TInt aCoreResId, TInt aAppResId = EEikStatusPaneUseDefaults, TBool aChangeStatusPaneNow = ETrue); 00683 00687 ~CEikAppStatusPaneModel(); 00688 00692 void ApplyCurrentLayoutL(); 00693 00694 public: 00698 void SetLayoutL(TInt aLayoutResId, TBool aChangeStatusPaneNow = ETrue); 00699 public: 00703 void SetLayoutL(TInt aLayoutResId, TBool aChangeStatusPaneNow, TBool aNotfiyServerSide); 00704 00705 private: 00706 CEikAppStatusPaneModel(CEikonEnv& aEikEnv); 00707 void ConstructL(TInt aCoreResId, TInt aAppResId, TBool aChangeStatusPaneNow = ETrue); 00708 }; 00709 00710 00711 inline TPaneId TEikStatusPaneInit::Id() const { return iId; } 00712 inline TBool TEikStatusPaneInit::AppOwned() const { return iFlags & EEikStatusPaneAppOwned; } 00713 inline TInt TEikStatusPaneInit::ControlTypeId() const { return iControlId; } 00714 inline TInt TEikStatusPaneInit::ControlResourceId() const { return iControlResource; } 00715 inline void TEikStatusPaneInit::SetHidden() {iFlags|=KEikStatusPaneHiddenBit;} 00716 inline void TEikStatusPaneInit::ClearHidden() {iFlags&=~KEikStatusPaneHiddenBit;} 00717 inline TBool TEikStatusPaneInit::IsHidden() const {return iFlags&KEikStatusPaneHiddenBit;} 00718 00719 inline CEikStatusPaneLayoutTree* CEikStatusPaneLayout::Find(const TPaneId& aPaneId) const { return iRoot->Find(aPaneId); } 00720 inline void CEikStatusPaneLayout::AcceptL(MEikStatusPaneLayoutTreeVisitor* aVisitor) { iRoot->AcceptL(aVisitor); } 00721 inline TRect CEikStatusPaneLayout::Rect() const { return iRoot->Rect(); } 00722 00723 inline TPaneId CEikStatusPaneLayoutTree::Id() const { return iId; } 00724 inline TRect CEikStatusPaneLayoutTree::Rect() const { return iRect; } 00725 00726 00727 inline CEikStatusPaneSetInit* CEikStatusPaneModelBase::PaneInits() const { return iPanes; } 00728 inline CEikStatusPaneLayout* CEikStatusPaneModelBase::CurrentLayout() const { return iCurrentLayout; } 00729 inline CEikStatusPaneModelBase::CIdSet* CEikStatusPaneModelBase::LegalIds() const { return iLegalIds; } 00730 00731 #endif