00001 // EIKSBFRM.H 00002 // 00003 // Copyright (c) 1997-1999 Symbian Ltd. All rights reserved. 00004 // 00005 00006 #if !defined(__EIKSBFRM_H__) 00007 #define __EIKSBFRM_H__ 00008 00009 #include <lafpublc.h> 00010 #if !defined(__AKNSCRLB_H__) 00011 #include <aknscrlb.h> 00012 #endif 00013 00014 class CEikCba; 00015 00019 class TEikScrollBarFrameLayout 00020 { 00021 00022 public: 00023 00028 enum TTilingMode 00029 { 00030 00032 EClientRectConstant, 00033 00035 EInclusiveRectConstant 00036 }; 00037 00038 public: 00039 00043 IMPORT_C TEikScrollBarFrameLayout(); 00044 00050 IMPORT_C void SetInclusiveMargin(TInt aMargin); 00051 00058 IMPORT_C void SetClientMargin(TInt aMargin); 00059 00060 public: 00061 00063 TMargins iInclusiveMargin; 00064 00069 TMargins iClientMargin; 00070 00075 TSize iClientAreaGranularity; 00076 00081 TTilingMode iTilingMode; 00082 }; 00083 00084 00085 class CEikCornerWindow; 00086 class CEikScrollBarFrameExtension; 00087 00099 class CEikScrollBarFrame : public CBase 00100 { 00101 00102 public: // enums 00103 00104 DECLARE_TYPE_ID(0x101F8672) 00105 00106 00107 enum TScrollBarVisibility 00108 { 00110 EOff, 00111 00113 EOn, 00114 00116 EAuto 00117 }; 00118 00120 enum TScrollBarType 00121 { 00123 ENormalScrollBar =0x0, 00124 00126 EArrowHead =0x200, 00127 00129 EDoubleSpan =0x400 00130 }; 00131 00133 enum TScrollBarSide 00134 { 00139 EBottomOrRight =0x0, 00140 00145 ETopOrLeft =0x800 00146 }; 00147 00149 enum TScrollBarManagement 00150 { 00157 EComponent ,//=SLafScrollBarFrame::EComponent, 00158 00167 EFloating ,//=SLafScrollBarFrame::EFloating, 00168 00174 EApplicationScrollBar //=SLafScrollBarFrame::EApplicationScrollBar 00175 }; 00176 00181 enum TScrollBarFrameFlags 00182 { 00184 EHVisible =0x01, 00185 00187 EVVisible =0x02, 00188 }; 00189 private: 00190 enum TMarginsAdjustmentMode 00191 { 00192 EGrow, 00193 EShrink 00194 }; 00195 00196 public: // specific 00197 00201 CEikScrollBarFrame(){} 00202 00210 IMPORT_C CEikScrollBarFrame(CCoeControl* aParentWindow, 00211 MEikScrollBarObserver* aObserver, 00212 TBool aPreAlloc=EFalse); 00213 00217 IMPORT_C ~CEikScrollBarFrame(); 00218 00230 CEikScrollBarFrame(CCoeControl* aParentWindow, 00231 MEikScrollBarObserver* aObserver, 00232 TBool aPreAlloc, 00233 TBool aDoubleSpan); 00234 00242 void InitExtension(CCoeControl* aParentWindow, 00243 MEikScrollBarObserver* aObserver); 00244 00249 IMPORT_C void DrawScrollBarsNow() const; 00250 00258 IMPORT_C void SetScrollBarVisibilityL(TScrollBarVisibility aHVisibility, 00259 TScrollBarVisibility aVVisibility); 00260 00269 inline TScrollBarVisibility VScrollBarVisibility() const; 00270 00271 #start_since SINCE_3_1_SDK 00272 00278 IMPORT_C void SetScrollBarFrameObserver(MEikScrollBarObserver* aObserver); 00279 #end_since SINCE_3_1_SDK 00280 00281 // Model setting. 00282 00290 IMPORT_C TBool Tile(TEikScrollBarModel* aVModel); 00291 00329 IMPORT_C TBool TileL(TEikScrollBarModel* aHModel, 00330 TEikScrollBarModel* aVModel, 00331 TRect& aClientRect, 00332 TRect& aInclusiveRect, 00333 const TEikScrollBarFrameLayout& aLayout); 00334 00345 IMPORT_C void MoveThumbsBy(TInt aDeltaX, TInt aDeltaY); 00346 00355 IMPORT_C void MoveHorizThumbTo(TInt aHorizThumbPos); 00356 00365 IMPORT_C void MoveVertThumbTo(TInt aVertThumbPos); 00366 00375 IMPORT_C void SetVFocusPosToThumbPos(TInt aFocusPosition); 00376 00386 IMPORT_C TInt ScrollBarBreadth( 00387 CEikScrollBar::TOrientation aOrientation) const; 00388 00389 // scroll bar frame behavior functions 00390 00396 IMPORT_C void SetAdjustsHorizontalModel(TBool aAdjusts); 00397 00403 IMPORT_C void SetAdjustsVerticalModel(TBool aAdjusts); 00404 00410 inline void SetScrollBarFrameFlags(TInt aMask); 00411 00418 IMPORT_C TBool ScrollBarExists( 00419 CEikScrollBar::TOrientation aOrientation) const; 00420 00428 IMPORT_C TInt CountComponentControls() const; 00429 00440 IMPORT_C CCoeControl* ComponentControl(TInt aIndex) const; 00441 00451 IMPORT_C CEikScrollBar* GetScrollBarHandle( 00452 CEikScrollBar::TOrientation aOrientation) const; 00453 00459 IMPORT_C CEikScrollBar* VerticalScrollBar() const; 00460 00467 IMPORT_C void SetTypeOfHScrollBar(TScrollBarType aType); 00468 00475 IMPORT_C void SetTypeOfVScrollBar(TScrollBarType aType); 00476 00482 IMPORT_C TScrollBarType TypeOfHScrollBar() const; 00483 00489 IMPORT_C TScrollBarType TypeOfVScrollBar() const; 00490 00497 IMPORT_C TBool IsArrowHeadScrollBar(TInt aFlag) const; 00498 00499 // application scroll bar utilities 00500 00507 void DisconnectExternalScrollBar(CEikScrollBar* aScrollBar); 00508 00549 IMPORT_C void CreateDoubleSpanScrollBarsL(TBool aWindowOwning, 00550 TBool aRemote); 00551 00572 IMPORT_C void CreateDoubleSpanScrollBarsL(TBool aWindowOwning, 00573 TBool aRemote, 00574 TBool aVertical, 00575 TBool aHorizontal); 00576 00596 IMPORT_C void Tile(TEikScrollBarModel* aVModel, TRect& aVScrollBar); 00597 00606 IMPORT_C void Tile(TEikScrollBarModel* aHModel, 00607 TEikScrollBarModel* aVModel); 00608 00620 IMPORT_C TScrollBarVisibility ScrollBarVisibility( 00621 CEikScrollBar::TOrientation aOrientation) const; 00622 00623 #start_since SINCE_3_1_SDK 00624 00639 IMPORT_C TInt DrawBackground(TBool aDrawHorizontal, TBool aDrawVertical); 00640 00656 IMPORT_C TInt DrawBackgroundState(TBool& aDrawHorizontal, TBool& aDrawVertical); 00657 #end_since SINCE_3_1_SDK 00658 00659 public: 00660 00666 CEikScrollBar* HorizontalScrollBar() const; 00667 00668 00669 protected: 00670 // Accessor methods 00671 00677 void SetParentWindow(CCoeControl* aParentWindow); 00678 00684 CCoeControl* ParentWindow() const; 00685 00686 protected: 00687 00689 struct SBarData 00690 { 00691 00693 CAknScrollBar* iBar; 00694 00696 TEikScrollBarModel iModel; 00697 00699 TScrollBarVisibility iVisibility; 00700 00702 TBool iExternalScrollBarAttached; 00703 }; 00704 00705 private: 00706 00707 void CalcTheoreticalScrollBarVisibility(const TEikScrollBarModel* aVModel); 00708 void ApplyModel(SBarData& aSBar); 00709 void MakeSBarVisible(SBarData& aSBar, TBool aVisible); 00710 void GetScrollBars(TBool aDoubleSpan); 00711 CEikCba* GetCurrentCba(); 00712 void DeleteScrollBars(); 00713 void CreateArrowHeadScrollBarsL(); 00714 00715 void CalcTheoreticalScrollBarVisibility(const TEikScrollBarModel* aVModel, 00716 const TEikScrollBarModel* aHModel); 00717 00718 protected: 00719 00721 SBarData iV; 00722 00723 private: 00724 00725 CEikScrollBarFrameExtension* iExtension; 00726 TInt iScrollBarFrameFlags; 00727 00728 friend class CEikScrollBarFrameExtension; 00729 }; 00730 00731 inline CEikScrollBarFrame::TScrollBarVisibility CEikScrollBarFrame::VScrollBarVisibility() const 00732 { return iV.iVisibility; } 00733 inline void CEikScrollBarFrame::SetScrollBarFrameFlags(TInt aMask) 00734 { iScrollBarFrameFlags|=aMask; } 00735 00736 // Cba scroll bar frame (with it's own scrollbar creation methods) 00737 class CEikCbaScrollBarFrame : public CEikScrollBarFrame 00738 { 00739 public: 00740 CEikCbaScrollBarFrame(CCoeControl* aParentWindow, MEikScrollBarObserver* aObserver, TBool aPreAlloc=EFalse); 00741 void ConstructL(); 00742 void SwitchToArrowHeadScrollBarL(); // 00743 }; 00744 00745 #endif