javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/inc/swtlistboxlists.h
branchRCL_3
changeset 66 2455ef1f5bbc
child 83 26b2b12093af
equal deleted inserted replaced
65:ae942d28ec0e 66:2455ef1f5bbc
       
     1 /*******************************************************************************
       
     2  * Copyright (c) 2007, 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3  * All rights reserved. This program and the accompanying materials
       
     4  * are made available under the terms of the Eclipse Public License v1.0
       
     5  * which accompanies this distribution, and is available at
       
     6  * http://www.eclipse.org/legal/epl-v10.html
       
     7  *
       
     8  * Contributors:
       
     9  *     Nokia Corporation - S60 implementation
       
    10  *******************************************************************************/
       
    11 
       
    12 
       
    13 #ifndef SWTLISTBOXLISTS_H
       
    14 #define SWTLISTBOXLISTS_H
       
    15 
       
    16 
       
    17 #include <aknlists.h>
       
    18 #include "eswtwidgetscore.h"
       
    19 #include "swtlistboxlistsitemdrawer.h"
       
    20 
       
    21 template <class, class, class> class CSwtListBoxTemplate;
       
    22 
       
    23 
       
    24 /** List box types. Same order as in KSwtLbCells */
       
    25 enum TSwtLbType
       
    26 {
       
    27     ESwtLbSingle = 0,
       
    28     ESwtLbSingleGraphic,
       
    29     ESwtLbSingleLarge,
       
    30     ESwtLbSingleHeading,
       
    31     ESwtLbSingleHeadingGraphic,
       
    32     ESwtLbDouble,
       
    33     ESwtLbDoubleGraphic,
       
    34     ESwtLbDoubleLarge,
       
    35     ESwtLbTypeCount
       
    36 };
       
    37 
       
    38 /** Avkon list boxes for each list box type */
       
    39 typedef CSwtListBoxTemplate <CAknSingleStyleListBox,
       
    40 CSwtColumnListBoxItemDrawer,
       
    41 CColumnListBoxData> CSwtListBoxSingle;
       
    42 typedef CSwtListBoxTemplate <CAknSingleGraphicStyleListBox,
       
    43 CSwtColumnListBoxItemDrawer,
       
    44 CColumnListBoxData> CSwtListBoxSingleGraphic;
       
    45 typedef CSwtListBoxTemplate <CAknSingleLargeStyleListBox,
       
    46 CSwtColumnListBoxItemDrawer,
       
    47 CColumnListBoxData> CSwtListBoxSingleLarge;
       
    48 typedef CSwtListBoxTemplate <CAknSingleHeadingStyleListBox,
       
    49 CSwtSingleHeadingStyleListBoxItemDrawer,
       
    50 CColumnListBoxData> CSwtListBoxSingleHeading;
       
    51 typedef CSwtListBoxTemplate <CAknSingleGraphicHeadingStyleListBox,
       
    52 CSwtSingleHeadingStyleListBoxItemDrawer,
       
    53 CColumnListBoxData> CSwtListBoxSingleHeadingGraphic;
       
    54 typedef CSwtListBoxTemplate <CAknDoubleStyleListBox,
       
    55 CSwtFormattedCellListBoxItemDrawer,
       
    56 CFormattedCellListBoxData> CSwtListBoxDouble;
       
    57 typedef CSwtListBoxTemplate <CAknDoubleGraphicStyleListBox,
       
    58 CSwtFormattedCellListBoxItemDrawer,
       
    59 CFormattedCellListBoxData> CSwtListBoxDoubleGraphic;
       
    60 typedef CSwtListBoxTemplate <CAknDoubleLargeStyleListBox,
       
    61 CSwtDoubleLargeStyleItemDrawer,
       
    62 CFormattedCellListBoxData> CSwtListBoxDoubleLarge;
       
    63 
       
    64 /** List box cells */
       
    65 enum TSwtLbCellType
       
    66 {
       
    67     ECellInvalid = 0,
       
    68     ECellEmpty,
       
    69     ECellDtxt,
       
    70     ECellDimg,
       
    71     ECellHtxt,
       
    72     ECellHimg
       
    73 };
       
    74 
       
    75 /** Maximum number of cells per item */
       
    76 const TInt KMaxCellCount = 5;
       
    77 
       
    78 /** List box cells for each list box type. Same order as in TSwtLbType */
       
    79 const TInt KSwtLbCells[ESwtLbTypeCount][KMaxCellCount] =
       
    80 {
       
    81     { ECellEmpty, ECellDtxt, ECellDimg, 0,         0 }, // ESwtLbSingle
       
    82     { ECellHimg,  ECellDtxt, ECellDimg, 0,         0 }, // ESwtLbSingleGraphic
       
    83     { ECellHimg,  ECellDtxt, ECellDimg, 0,         0 }, // ESwtLbSingleLarge
       
    84     { ECellHtxt,  ECellDtxt, ECellDimg, 0,         0 }, // ESwtLbSingleHeading
       
    85     { ECellHimg,  ECellHtxt, ECellDtxt, ECellDimg, 0 }, // ESwtLbSingleHeadingGraphic
       
    86     { ECellEmpty, ECellHtxt, ECellDtxt, ECellDimg, 0 }, // ESwtLbDouble
       
    87     { ECellHimg,  ECellHtxt, ECellDtxt, ECellDimg, 0 }, // ESwtLbDoubleGraphic
       
    88     { ECellHimg,  ECellHtxt, ECellDtxt, ECellDimg, 0 }, // ESwtLbDoubleLarge
       
    89 };
       
    90 
       
    91 /** List box selection types */
       
    92 enum TSwtLbSelectionType
       
    93 {
       
    94     ESwtLbSingleSelection = 0,
       
    95     ESwtLbMultiSelection
       
    96 };
       
    97 
       
    98 
       
    99 /**
       
   100  *  MSwtListObserver
       
   101  */
       
   102 class MSwtListObserver
       
   103 {
       
   104 public:
       
   105     virtual void HandleSizeChangedL() = 0;
       
   106     virtual MSwtUiUtils& Utils() const = 0;
       
   107 };
       
   108 
       
   109 /**
       
   110  *  CSwtListBoxListTemplate
       
   111  *  @lib eswt
       
   112  */
       
   113 template<class CType, class CSwtListBoxItemDrawerType, class CListBoxDataType>
       
   114 NONSHARABLE_CLASS(CSwtListBoxTemplate)
       
   115         : public CType
       
   116 {
       
   117 // New methods
       
   118 public:
       
   119     /**
       
   120      * Factory
       
   121      */
       
   122     static CSwtListBoxTemplate<CType, CSwtListBoxItemDrawerType,
       
   123     CListBoxDataType>* NewL();
       
   124 
       
   125     /**
       
   126      * Sets item drawer's clipping rectangle
       
   127      */
       
   128     void SetItemDrawerClippingRect(const TRect& aRect);
       
   129 
       
   130     /**
       
   131      * Sets margins.
       
   132      */
       
   133     void SetMargins(TInt aHorizontal, TInt aVertical);
       
   134 
       
   135     /**
       
   136      * Destructor
       
   137      */
       
   138     ~CSwtListBoxTemplate();
       
   139 
       
   140 private:
       
   141     /**
       
   142      * First Phase Constructor
       
   143      */
       
   144     CSwtListBoxTemplate();
       
   145 
       
   146     /**
       
   147      * Second Phase Constructor
       
   148      */
       
   149     void ConstructL();
       
   150 
       
   151 // From CCoeControl
       
   152 public:
       
   153     void PositionChanged();
       
   154     void SizeChanged();
       
   155 
       
   156 // From CCoeControl
       
   157 protected:
       
   158     TTypeUid::Ptr MopSupplyObject(TTypeUid aId);
       
   159 
       
   160 // From CEikListBox
       
   161 public:
       
   162     void SetItemHeightL(TInt aHeight);
       
   163 
       
   164 // From CType
       
   165 protected:
       
   166     void CreateItemDrawerL();
       
   167 
       
   168 // New methods
       
   169 public:
       
   170     /**
       
   171      * Set a list observer.
       
   172      * @param aListObserver The list observer
       
   173      */
       
   174     void SetListObserver(MSwtListObserver* aListObserver);
       
   175 
       
   176 private:
       
   177     /**
       
   178      * Calculate area capable of displaying client data.
       
   179      * @param aRect
       
   180      * @param aBorder
       
   181      * @param aSBrame
       
   182      * @param aExcludeScrollBars
       
   183      */
       
   184     TRect ClientRect(TRect aRect, TGulBorder aBorder,
       
   185                      CEikScrollBarFrame* aSBrame, TBool aExcludeScrollBars) const;
       
   186 
       
   187     /**
       
   188      * Size or position of this control has changed.
       
   189      */
       
   190     void RectChangedL(TBool aDoHandleSizeChanged);
       
   191 
       
   192 // Data
       
   193 private:
       
   194     MSwtListObserver* iListObserver;
       
   195 };
       
   196 
       
   197 
       
   198 /**
       
   199  * CSwtListBoxLists
       
   200  * @lib eswt
       
   201  */
       
   202 NONSHARABLE_CLASS(CSwtListBoxLists)
       
   203         : public CBase
       
   204 {
       
   205 // New methods
       
   206 public:
       
   207     /**
       
   208      * Create a list box.
       
   209      * @param aListType see TSwtLbType
       
   210      * @return pointer to created list box or NULL upon error.
       
   211      */
       
   212     static CEikTextListBox* NewListL(TInt aListType);
       
   213 
       
   214     /**
       
   215      * Set a list observer to a list.
       
   216      * @param aListType see TSwtLbType
       
   217      * @param aList Pointer to the list
       
   218      * @param aListObserver The list observer
       
   219      * @return pointer to created list box or NULL upon error.
       
   220      */
       
   221     static void SetListObserver(
       
   222         TInt aListType,
       
   223         CEikTextListBox* aList,
       
   224         MSwtListObserver* aListObserver);
       
   225 
       
   226     /**
       
   227      * Check if a certain type of listbox is formatted.
       
   228      * @param aListType see TSwtLbType
       
   229      * @return ETrue if listbox is formatted.
       
   230      */
       
   231     static TBool IsListFormatted(TInt aListType);
       
   232 
       
   233     /**
       
   234      * Compute an array of cell types for a certain list box type
       
   235      * @param aListType see TSwtLbType
       
   236      * @return ETrue if listbox is formatted.
       
   237      */
       
   238     static void CellsL(TInt aListType, RArray<TInt>& aCellArray);
       
   239 
       
   240     /**
       
   241      * Check if a int value is in the range of listbox types.
       
   242      * @param aVal listbox type or int value.
       
   243      * @return ETrue if value is listbox type.
       
   244      */
       
   245     static TBool IsListType(TInt aVal);
       
   246 
       
   247     /**
       
   248      * Sets custom clipping rectangle of the list's item drawer
       
   249      */
       
   250     static void SetItemDrawerClippingRect(
       
   251         TInt aListType,
       
   252         CEikTextListBox* aList,
       
   253         const TRect& aRect);
       
   254 
       
   255     /**
       
   256      * Sets listbox's margins
       
   257      */
       
   258     static void SetMargins(
       
   259         TInt aListType,
       
   260         CEikTextListBox* aList,
       
   261         TInt aHorizontal, TInt aVertical);
       
   262 
       
   263     /**
       
   264      * Change stretching
       
   265      */
       
   266     static void EnableStretching(
       
   267         TInt aListType,
       
   268         CEikTextListBox* aList,
       
   269         TBool aEnabled);
       
   270 
       
   271 #ifdef RD_JAVA_S60_RELEASE_9_2
       
   272     /**
       
   273      * Enabling focus highlight for lists
       
   274      */
       
   275     static void EnableFocusHighlight(
       
   276         CListItemDrawer* aItemDrawer,
       
   277         TBool aEnable);
       
   278 #endif //RD_JAVA_S60_RELEASE_9_2
       
   279 };
       
   280 
       
   281 #endif // SWTLISTBOXLISTS_H