00001 // EIKLBV.H 00002 // 00003 // Copyright (c) 1997-1999 Symbian Ltd. All rights reserved. 00004 // 00005 00006 00007 #if !defined(__EIKLBV_H__) 00008 #define __EIKLBV_H__ 00009 00010 #if !defined(__E32BASE_H__) 00011 #include <e32base.h> 00012 #endif 00013 00014 #if !defined(__GDI_H__) 00015 #include <gdi.h> 00016 #endif 00017 00018 class CListItemDrawer; 00019 class MListBoxModel; 00020 class CWindowGc; 00021 class RWindowGroup; 00022 class CWsScreenDevice; 00023 class CWindowGc; 00024 class RWindow; 00025 00026 // 00027 // class MListVisibiltyObserver 00028 // 00029 00030 class MListVisibilityObserver 00031 { 00032 public: 00033 virtual TBool IsVisible() const = 0; 00034 }; 00035 00056 class CListBoxView : public CBase 00057 { 00058 public: 00059 00064 enum TCursorMovement 00065 { 00067 ECursorNextItem, 00068 00070 ECursorPreviousItem, 00071 00073 ECursorNextColumn, 00074 00076 ECursorPreviousColumn, 00077 00079 ECursorPreviousPage, 00080 00082 ECursorNextPage, 00083 00085 ECursorFirstItem, 00086 00088 ECursorLastItem, 00089 00091 ECursorNextScreen, 00092 00094 ECursorPrevScreen 00095 }; 00096 00103 enum TFlags 00104 { 00106 EAnchorExists = 0x0001, 00107 00109 EEmphasized = 0x0002, 00110 00112 EDimmed = 0x0004, 00113 00115 EHasMatcherCursor = 0x0008, 00116 00118 EDisableRedraw = 0x0010, 00119 00121 EPaintedSelection = 0x0020, 00122 00124 EMarkSelection = 0x0040, 00125 00127 EUnmarkSelection = 0x0080, 00128 00130 EItemCountModified = 0x0100 00131 }; 00132 00150 enum TSelectionMode 00151 { 00156 ENoSelection, 00157 00163 ESingleSelection, 00164 00170 EContiguousSelection, 00171 00177 EDisjointSelection, 00178 00183 EDisjointMarkSelection, 00184 00189 EPenMultiselection, 00190 00196 EChangeMarkMode 00197 }; 00198 00200 typedef CArrayFix<TInt> CSelectionIndexArray; 00201 00202 public: 00203 00207 IMPORT_C ~CListBoxView(); 00208 00215 IMPORT_C CListBoxView(); 00216 00233 IMPORT_C virtual void ConstructL(MListBoxModel* aListBoxModel, 00234 CListItemDrawer* aItemDrawer, 00235 CWsScreenDevice* aScreen, 00236 RWindowGroup* aGroupWin, 00237 RWindow* aWsWindow, 00238 const TRect& aDisplayArea, 00239 TInt aItemHeight); 00240 00241 // functions for accessing the view rect (the area of the host window in 00242 // which the items are drawn) 00248 IMPORT_C TRect ViewRect() const; 00249 00255 IMPORT_C void SetViewRect(const TRect& aRect); 00256 00257 // misc. access functions for the main attributes 00263 IMPORT_C virtual TInt CurrentItemIndex() const; 00264 00273 IMPORT_C void SetCurrentItemIndex(TInt aItemIndex); 00274 00280 IMPORT_C TInt TopItemIndex() const; 00281 00290 IMPORT_C virtual void SetTopItemIndex(TInt aItemIndex); 00291 00297 IMPORT_C TInt BottomItemIndex() const; 00298 00306 IMPORT_C virtual void CalcBottomItemIndex(); 00307 00313 IMPORT_C virtual void SetItemHeight(TInt aItemHeight); 00314 00315 // functions that support incremental matching 00322 IMPORT_C void SetMatcherCursorColor(TRgb aColor); 00323 00331 IMPORT_C void SetMatcherCursorPos(TInt aPosWithinCurrentItem); 00332 00340 IMPORT_C TInt MatcherCursorPos() const; 00341 00350 IMPORT_C virtual void DrawMatcherCursor(); 00351 00357 IMPORT_C void HideMatcherCursor(); 00358 00366 IMPORT_C void SetMatcherCursor(TBool aMatcherCursor); 00367 00376 IMPORT_C void SetEmphasized(TBool aEmphasized); 00377 00386 IMPORT_C void SetDimmed(TBool aDimmed); 00387 00398 IMPORT_C void SetDisableRedraw(TBool aDisableRedraw); 00399 00405 IMPORT_C TBool RedrawDisabled() const; 00406 00415 IMPORT_C void SetPaintedSelection( TBool aPaintedSelection ); 00416 00417 // functions that support selection 00425 IMPORT_C const CSelectionIndexArray* SelectionIndexes() const; 00426 00437 IMPORT_C void GetSelectionIndexesL( 00438 CSelectionIndexArray* aSelectionArray) const; 00439 00448 IMPORT_C void SetSelectionIndexesL(const CSelectionIndexArray* 00449 aSelectionIndexes); 00450 00457 IMPORT_C void ClearSelection(); 00458 00459 // select/highlight items without moving the cursor 00465 IMPORT_C virtual void UpdateSelectionL(TSelectionMode aSelectionMode); 00466 00474 IMPORT_C void ToggleItemL(TInt aItemIndex); 00475 00486 IMPORT_C void SelectItemL(TInt aItemIndex); 00487 00495 IMPORT_C void DeselectItem(TInt aItemIndex); 00496 00502 IMPORT_C void SetAnchor(TInt aItemIndex); 00503 00507 IMPORT_C void ClearSelectionAnchorAndActiveIndex(); 00508 00509 // functions that support scrolling 00517 IMPORT_C virtual TBool ScrollToMakeItemVisible(TInt aItemIndex); 00518 00524 IMPORT_C virtual void VScrollTo(TInt aNewTopItemIndex); 00525 00535 IMPORT_C virtual void VScrollTo(TInt aNewTopItemIndex, 00536 TRect& aMinRedrawRect); 00537 00544 IMPORT_C virtual void HScroll(TInt aHScrollAmount); 00545 00552 IMPORT_C TInt HScrollOffset() const; 00553 00560 IMPORT_C void SetHScrollOffset(TInt aHorizontalOffset); 00561 00567 IMPORT_C TInt DataWidth() const; 00568 00574 IMPORT_C virtual void CalcDataWidth(); 00575 00584 IMPORT_C virtual TInt VisibleWidth(const TRect& aRect) const; 00585 00595 IMPORT_C virtual TInt CalcNewTopItemIndexSoItemIsVisible( 00596 TInt aItemIndex) const; 00597 00598 // functions that support drawing 00610 IMPORT_C virtual void Draw(const TRect* aClipRect = NULL) const; 00611 00618 IMPORT_C virtual void DrawItem(TInt aItemIndex) const; 00619 00626 IMPORT_C void SetListEmptyTextL(const TDesC& aText); 00627 00633 inline const TDesC* EmptyListText() const; 00634 00641 IMPORT_C TBool ItemIsSelected(TInt aItemIndex) const; 00642 00649 IMPORT_C TBool ItemIsVisible(TInt aItemIndex) const; 00650 00657 IMPORT_C virtual TPoint ItemPos(TInt aItemIndex) const; 00658 00669 IMPORT_C virtual TSize ItemSize(TInt aItemIndex=0) const; 00670 00676 IMPORT_C void SetTextColor(TRgb aColor); 00677 00683 IMPORT_C void SetBackColor(TRgb aColor); 00684 00690 IMPORT_C TRgb TextColor() const; 00691 00697 IMPORT_C TRgb BackColor() const; 00698 00706 IMPORT_C virtual void MoveCursorL(TCursorMovement aCursorMovement, 00707 TSelectionMode aSelectionMode); 00708 00716 IMPORT_C virtual void VerticalMoveToItemL(TInt aTargetItemIndex, 00717 TSelectionMode aSelectionMode); 00718 00731 IMPORT_C virtual TBool XYPosToItemIndex(TPoint aPosition, 00732 TInt& aItemIndex) const; 00733 00740 IMPORT_C virtual TInt NumberOfItemsThatFitInRect(const TRect& aRect) const; 00741 00747 void SetVisibilityObserver(MListVisibilityObserver* aObserver); 00748 00755 IMPORT_C TBool IsVisible() const; 00756 00762 inline CListItemDrawer* ItemDrawer() const; 00763 00769 IMPORT_C virtual void DrawEmptyList(const TRect &aClientRect) const; 00770 00771 // disables vertical line drawing, useful only for certain 00772 //custom list boxes 00778 void DisableVerticalLineDrawing( TBool aDisable ); 00779 00787 IMPORT_C void DeselectRangeL(TInt aItemIndex1, TInt aItemIndex2); 00788 00789 protected: 00790 00791 // functions for accessing the flags 00799 inline TInt Flags() const; 00800 00808 inline void SetFlags(TInt aMask); 00809 00817 inline void ClearFlags(TInt aMask); 00818 00823 friend class CEikListBox; 00824 00825 // misc. functions 00833 IMPORT_C void SelectRangeL(TInt aItemIndex1, TInt aItemIndex2); 00834 00835 protected: 00836 00841 TInt iFlags; 00842 00847 CListItemDrawer* iItemDrawer; 00848 00853 MListBoxModel* iModel; 00854 00858 TInt iDataWidth; 00859 00864 TInt iTopItemIndex; 00865 00870 TInt iBottomItemIndex; 00871 00875 TInt iHScrollOffset; 00876 00880 TInt iCurrentItemIndex; 00881 00885 TInt iItemHeight; 00886 00890 RWindow* iWin; 00891 00895 RWindowGroup* iGroupWin; 00896 00900 CWindowGc* iGc; 00901 00905 TRect iViewRect; 00906 00910 HBufC *iListEmptyText; 00911 00915 TBool iDisableVerticalLineDrawing /*TInt iSpare*/; 00916 00917 private: 00918 TInt iMatcherCursorPos; 00919 TRgb iMatcherCursorColor; 00920 TRgb iBackColor; 00921 TRgb iTextColor; 00922 TInt iAnchorIndex; 00923 TInt iActiveEndIndex; 00924 CSelectionIndexArray* iSelectionIndexes; 00925 MListVisibilityObserver* iVisibilityObserver; 00926 00927 TInt iSpare[6]; 00928 }; 00929 00933 inline const TDesC* CListBoxView::EmptyListText() const 00934 { return(iListEmptyText); } 00935 00936 00937 class CSnakingListBoxView : public CListBoxView 00938 { 00939 public: 00940 IMPORT_C ~CSnakingListBoxView(); 00941 IMPORT_C CSnakingListBoxView(); 00942 inline TInt ColumnWidth() const; 00943 IMPORT_C void SetColumnWidth(TInt aColumnWidth); 00944 IMPORT_C virtual void MoveCursorL(TCursorMovement aCursorMovement, TSelectionMode aSelectionMode); 00945 IMPORT_C virtual void SetTopItemIndex(TInt aItemIndex); 00946 IMPORT_C virtual void SetItemHeight(TInt aItemHeight); 00947 IMPORT_C virtual TBool XYPosToItemIndex(TPoint aPosition, TInt& aItemIndex) const; 00948 IMPORT_C virtual TInt NumberOfItemsThatFitInRect(const TRect& aRect) const; 00949 IMPORT_C virtual void HScroll(TInt aHScrollAmount); 00950 IMPORT_C virtual void CalcDataWidth(); 00951 IMPORT_C virtual void CalcBottomItemIndex(); 00952 IMPORT_C virtual void Draw(const TRect* aClipRect = NULL) const; 00953 IMPORT_C virtual TInt VisibleWidth(const TRect& aRect) const; 00954 IMPORT_C virtual TBool ScrollToMakeItemVisible(TInt aItemIndex); 00955 IMPORT_C virtual TInt CalculateHScrollOffsetSoItemIsVisible(TInt aItemIndex); 00956 IMPORT_C virtual TInt CalcNewTopItemIndexSoItemIsVisible(TInt aItemIndex) const; 00957 IMPORT_C virtual TPoint ItemPos(TInt aItemIndex) const; 00958 IMPORT_C virtual TSize ItemSize(TInt aItemIndex=0) const; 00959 IMPORT_C void CalcRowAndColIndexesFromItemIndex(TInt aItemIndex, TInt& aRowIndex, TInt& aColIndex) const; 00960 IMPORT_C void CalcItemIndexFromRowAndColIndexes(TInt& aItemIndex, TInt aRowIndex, TInt aColIndex) const; 00961 IMPORT_C virtual TInt NumberOfItemsPerColumn() const; 00962 protected: 00963 IMPORT_C virtual void DrawItemRange(TInt aStartItemIndex, TInt aEndItemIndex) const; 00964 IMPORT_C void DrawColumnRange(TInt aStartColIndex, TInt aEndColIndex) const; 00965 IMPORT_C void MoveToPreviousColumnL(TSelectionMode aSelectionMode); 00966 IMPORT_C void MoveToNextColumnL(TSelectionMode aSelectionMode); 00967 IMPORT_C void ClearUnusedItemSpace(TInt aStartItemIndex, TInt aEndItemIndex) const; 00968 IMPORT_C void UpdateHScrollOffsetBasedOnTopItemIndex(); 00969 private: // overridden from CListBoxView 00970 IMPORT_C virtual TAny* Reserved_1(); 00971 protected: 00972 TInt iColumnWidth; 00973 }; 00974 00975 00976 00977 inline TInt CListBoxView::Flags() const 00978 { return iFlags; } 00979 00980 inline void CListBoxView::SetFlags(TInt aMask) 00981 { iFlags|=aMask; } 00982 00983 inline void CListBoxView::ClearFlags(TInt aMask) 00984 { iFlags&=(~aMask); } 00985 00986 inline CListItemDrawer* CListBoxView::ItemDrawer() const 00987 { return iItemDrawer; } 00988 00989 inline TInt CSnakingListBoxView::ColumnWidth() const 00990 { return iColumnWidth; } 00991 00992 00993 // __EIKLBV_H__ 00994 #endif