epoc32/include/mw/akngrid.h
branchSymbian2
changeset 2 2fe1408b6811
parent 1 666f914201fb
child 4 837f303aceeb
equal deleted inserted replaced
1:666f914201fb 2:2fe1408b6811
     1 akngrid.h
     1 /*
       
     2 * Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     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
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  
       
    15 *     This is a concrete class for the handling of a grid. The class handles a
       
    16 *     rectangular grid arrangement of items held in any linear ordering i.e 
       
    17 *     cells ordered top to bottom and left, left to right and down etc.
       
    18 *
       
    19 *
       
    20 */
       
    21 
       
    22 
       
    23 #if !defined(__AKNGRID_H__)
       
    24 #define __AKNGRID_H__
       
    25 
       
    26 // INCLUDES
       
    27 #include <eiktxlbx.h>
       
    28 #include <eiklbv.h>
       
    29 #include <eikfrlbd.h>
       
    30 #include <eikfrlb.h>
       
    31 
       
    32 #include <AknGridM.h>
       
    33 #include <AknGridView.h>
       
    34 #include <Aknappui.h>
       
    35 
       
    36 // CLASS PREDEFINITIONS
       
    37 class CAknGridExtension;
       
    38 
       
    39 // CLASS DECLARATION
       
    40 
       
    41 /**
       
    42 *  Application grid handling class from Avkon.
       
    43 *  Provides support for ordering application grids items.
       
    44 *
       
    45 *  @since Series 60 0.9
       
    46 */
       
    47 class CAknGrid : public CEikListBox
       
    48     {
       
    49 private:// enums
       
    50     enum TIndicatorEvent
       
    51         {
       
    52         EMove,
       
    53         EChangeNumOfItems,
       
    54         EResize
       
    55         };
       
    56 public:
       
    57 
       
    58     /**
       
    59     * Base class default constructor.
       
    60     * @return A pointer to a new @c CAknGrid object.
       
    61     */
       
    62     IMPORT_C CAknGrid();
       
    63     
       
    64     /**
       
    65     * Destructor.
       
    66     */
       
    67     IMPORT_C virtual ~CAknGrid();
       
    68     
       
    69     /**
       
    70     * This function gives @c CAknGridM class pointer to @c CAknGrid class. 
       
    71     * Usually, the @c CAknGridM class object is instantiated automatically 
       
    72     * during the construction phase of the @c CAknGrid object. If an 
       
    73     * application programmer provides their own grid model class, the 
       
    74     * application programmer must instantiate their own grid model class object
       
    75     * and give it to the @c CAknGrid object using the @c SetModel function 
       
    76     * before calling the @c ConstructL/ConstructFromResourceL function.
       
    77     * @param aModel Pointer to @c CAknGridM class.
       
    78     */  
       
    79     IMPORT_C void SetModel(CAknGridM* aModel);
       
    80 
       
    81     /**
       
    82     * This is Symbian default constructor. The @c ConstructL function needs to
       
    83     * be called in case resource data is not used. If a leave occurs the 
       
    84     * framework generates a Symbian Leave code.
       
    85     * @param aPatent A CCoeControl pointer.
       
    86     * @param aFlags Parameter for @c CEikListBox constructor. If the 
       
    87     * parameter is missing default value is 0.
       
    88     */  
       
    89     IMPORT_C void ConstructL(const CCoeControl* aParent, TInt aFlags = 0);
       
    90 
       
    91     /**
       
    92     * The @c ConstructFromResourceL function needs to be called in case 
       
    93     * resource data is used. Usually, the @c CAknGridM class object is 
       
    94     * instantiated automatically during the construction phase of the 
       
    95     * @c CAknGrid object. If an application programmer provides their own grid
       
    96     * model class, the application programmer must instantiate their own grid 
       
    97     * model class object and give it to the @c CAknGrid object using the 
       
    98     * @c SetModel function before calling the 
       
    99     * @c ConstructL/ConstructFromResourceL function. If a leave occurs the 
       
   100     * framework generates a Symbian Leave code.
       
   101     * @param aReader Construct controls from resource file.
       
   102     */
       
   103     IMPORT_C void ConstructFromResourceL(TResourceReader& aReader);
       
   104 
       
   105     /**
       
   106     * Sets the orientation of the grid, either vertical or horizontal, the
       
   107     * ordering of the data and the size of the primary dimension of the
       
   108     * grid. The value for the parameter @c aNumOfItemsInPrimaryOrient must be
       
   109     * greater than zero since this determines the number of items (be it rows
       
   110     * or columns) in the primary orientation of the grid. If a leave occurs
       
   111     * the framework generates a Symbian Leave code.
       
   112     * @param aVerticalOrientation Items vertical orientation.
       
   113     * @param aLeftToRight @c ETrue left to right.
       
   114     * @param aTopToBottom @c ETrue top to bottom.
       
   115     * @param aNumOfItemsInPrimaryOrient Number of items in primary orient.  
       
   116     * @param aNumOfItemsInSecondaryOrient Number of items in Secondary orient.
       
   117     * @param aSizeOfItems Item size.
       
   118     * @param aWidthOfSpaceBetweenItems =0 Width of space between items.
       
   119     * @param aHeightOfSpaceBetweenItems =0 Height of space between items.
       
   120     */
       
   121     IMPORT_C void SetLayoutL(TBool aVerticalOrientation,
       
   122                              TBool aLeftToRight,
       
   123                              TBool aTopToBottom,
       
   124                              TInt aNumOfItemsInPrimaryOrient,
       
   125                              TInt aNumOfItemsInSecondaryOrient,
       
   126                              TSize aSizeOfItems,
       
   127                              TInt aWidthOfSpaceBetweenItems=0,
       
   128                              TInt aHeightOfSpaceBetweenItems=0);
       
   129 
       
   130     /**
       
   131     * Sets the layout from a resource. Layout includes orientation (either
       
   132     * vertical or horizontal), horizontal and vertical direction of numbering,
       
   133     * the number of items in the primary and secondary orientation, and the 
       
   134     * primary and secondary scrolling types. If a leave occurs the framework 
       
   135     * generates a Symbian Leave code.
       
   136     * @param aReader Constructs controls from a resource file. 
       
   137     */
       
   138     IMPORT_C void SetLayoutFromResourceL(TResourceReader& aReader);
       
   139 
       
   140     /**
       
   141     * Sets the movement of the cursor with respect to scrolling when the
       
   142     * end item in the current row or column, whichever is the primary
       
   143     * orientation of the data items, is encountered. The movement maybe
       
   144     * either stop, loop back to same row or column or move onto the
       
   145     * next logical data item in the sequence.
       
   146     * @param aScrollingType Items scrolling type enum definition.
       
   147     */
       
   148     IMPORT_C void SetPrimaryScrollingType(CAknGridView::TScrollingType aScrollingType);
       
   149     
       
   150     /** 
       
   151     * Sets the movement of the cursor with respect to scrolling when the
       
   152     * end item in the secondary dimension of the grid is encountered.
       
   153     * The movement maybe either stop, loop back back to same row or column
       
   154     * or move onto the next logical data item in the sequence.
       
   155     * @param aSecondaryScrolling Secondary scrolling type enum definition.
       
   156     */
       
   157     IMPORT_C void SetSecondaryScrollingType(CAknGridView::TScrollingType aSecondaryScrolling);
       
   158 
       
   159     /**
       
   160     * Sets the starting position of the data within the grid. A blank page 
       
   161     * cannot be accessed (since cannot move into empty cells) so  a totally 
       
   162     * blank page is the same as if the page never existed since the user 
       
   163     * cannot scroll into it. For this reason it is suggested that the start
       
   164     * position be no more than one page into the grid. If a leave occurs 
       
   165     * the framework generates a Symbian Leave code.
       
   166     * @param aGridStartPosition Parameter manipulate the grid's starting 
       
   167     * position.
       
   168     */
       
   169     IMPORT_C void SetStartPositionL(TPoint aGridStartPosition);
       
   170 
       
   171     /**
       
   172     * @c CurrentDataIndex retrieves the index of the selection. In grids, you 
       
   173     * should use this method instead of @c CEikListBox::CurrentItemIndex(), 
       
   174     * when you are manipulating data stored in the grid's @c ItemTextArray. 
       
   175     * While @c CurrentItemIndex() returns the same value as 
       
   176     * @c CurrentItemIndex() on most phones, there will be difference in some 
       
   177     * language variants where text reading/writing direction is different from 
       
   178     * left-to-right.
       
   179     * @return A current position of highlight.
       
   180     */
       
   181     IMPORT_C TInt CurrentDataIndex() const;
       
   182     
       
   183     /**
       
   184     * Moves the cursor to the required grid data index.
       
   185     * @param aDataIndex Data index value.
       
   186     */
       
   187     IMPORT_C void SetCurrentDataIndex(TInt aDataIndex);
       
   188 
       
   189     /**
       
   190     * The grid position function. Gives the data index by using grid's 
       
   191     * position. The position must be given from the top left corner. If 
       
   192     * the function returns -1 the item's position is invalid.
       
   193     * @param aGridPosition The data item's co-ordinate values. 
       
   194     * @return Activated item's index value.
       
   195     */
       
   196     IMPORT_C TInt IndexOfPosition(TPoint aGridPosition) const;
       
   197     
       
   198     /**
       
   199     * The grid position function. Gives the data item's co-ordinate values 
       
   200     * by using item's index value.
       
   201     * @param aItemIndex The data item's index value.   
       
   202     * @return @c TPoint co-ordinate values of active item.
       
   203     */
       
   204     IMPORT_C TPoint PositionAtIndex(TInt aItemIndex) const;
       
   205 
       
   206     /**
       
   207     * Item drawer. Gets the pointer to the grid class.
       
   208     * @return A pointer to @c CFormattedCellListBoxItemDrawer object.
       
   209     */
       
   210     IMPORT_C CFormattedCellListBoxItemDrawer* ItemDrawer() const;
       
   211 
       
   212     /**
       
   213     * Function sets a grid text to the data item. If a leave occurs the 
       
   214     * framework generates a Symbian Leave code.
       
   215     * @since Series S60 3.0
       
   216     * @param aText Descriptor parameter.
       
   217     */
       
   218     IMPORT_C void SetEmptyGridTextL(const TDesC& aText);
       
   219     
       
   220     /**
       
   221     * This function sets the empty grid text.
       
   222     * @return A pointer to the grid text descriptor.
       
   223     */
       
   224     inline const TDesC* EmptyGridText() const;
       
   225 
       
   226 public:
       
   227 
       
   228     /**
       
   229     * This function creates a new object and returns pointer to it. If the 
       
   230     * leave occurs the framework generates a Symbian Leave code.
       
   231     * @return A pointer to @c CListBoxView class.
       
   232     */
       
   233     IMPORT_C virtual CListBoxView* MakeViewClassInstanceL();
       
   234 
       
   235     /**
       
   236     * This function sets the column width of the grid. Column width cannot be 
       
   237     * set in a horizontal grid since the number of columns in the grid is 
       
   238     * defined by the initialising call to @c SetLayoutL. The column width 
       
   239     * cannot be larger than the width of the viewing rectangle.
       
   240     * @param aColumnWidth A parameter defines a width of the column.
       
   241     */
       
   242     IMPORT_C void SetColumnWidth(TInt aColumnWidth);
       
   243     
       
   244     /**
       
   245     * This function gives a width of the column.
       
   246     * @return A width of the column. 
       
   247     */
       
   248     IMPORT_C TInt ColumnWidth() const;
       
   249 
       
   250 public: //from CEikListBox
       
   251 
       
   252     /**
       
   253     * This function updates the scrollbars, including item position. This 
       
   254     * function is called when the size of the scrollbars or data changes. If 
       
   255     * the leave occurs the framework generates a Symbian Leave code.
       
   256     */
       
   257     IMPORT_C virtual void UpdateScrollBarsL();
       
   258     
       
   259     /**
       
   260     * This function should be called after one or more items have been added to
       
   261     * the grid. If a leave occurs the framework generates a Symbian Leave 
       
   262     * code.
       
   263     */  
       
   264     IMPORT_C void HandleItemAdditionL();
       
   265     
       
   266     /**
       
   267     * This function should be called after one or more items have been removed 
       
   268     * from the grid. If a leave occurs the framework generates a Symbian 
       
   269     * Leave code.
       
   270     */  
       
   271     IMPORT_C void HandleItemRemovalL();
       
   272     
       
   273     /**
       
   274     * This function is from @c CEikAppUi, handles key events. If a leave 
       
   275     * occurs the framework generates a Symbian Leave code.
       
   276     * @param aKeyEvent Event to handled.
       
   277     * @param aType of the key event.
       
   278     * @return Response code ( @c EKeyWasConsumed, @c EKeyWasNotConsumed )
       
   279     */  
       
   280     IMPORT_C virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
       
   281     
       
   282     /**
       
   283     * This function sets the row height of the grid. Row height cannot be set
       
   284     * in a vertical grid since the number of rows in the grid is defined by 
       
   285     * the initialising call to @c SetLayoutL. The row height cannot be larger 
       
   286     * than the height of the viewing rectangle. If a leave occurs the 
       
   287     * framework generates a Symbian Leave code. 
       
   288     * @param aHeight The height of the item's rows.
       
   289     */  
       
   290     IMPORT_C void SetItemHeightL(TInt aHeight);
       
   291     
       
   292     /**
       
   293     * This function handles size changes. This routine assumes that 
       
   294     * @c SetLayoutL has been called to set up the grid.
       
   295     */  
       
   296     IMPORT_C void SizeChanged();
       
   297     
       
   298     /**
       
   299     * This function creates a new object and returns pointer to 
       
   300     * @c CTextListBoxModel class.
       
   301     * @return A pointer to @c CTextListBoxModel object.
       
   302     */  
       
   303     IMPORT_C CTextListBoxModel* Model() const;
       
   304         
       
   305     /**
       
   306     * This function handles viewable rectangle.
       
   307     * @param aRect Rectangle parameter. 
       
   308     */  
       
   309     IMPORT_C void SetRect(const TRect& aRect);
       
   310     
       
   311     /**
       
   312     * This function is called when the grid's items, item's data and scroll 
       
   313     * bars has been changed. This implementation ensures that the current 
       
   314     * item is visible after resize. If a leave occurs the framework generates
       
   315     * a Symbian Leave code.
       
   316     */  
       
   317     IMPORT_C virtual void HandleViewRectSizeChangeL();
       
   318     
       
   319     /**
       
   320     * This function sets top item index.
       
   321     * @param aItemIndex Item index value.
       
   322     */  
       
   323     IMPORT_C virtual void SetTopItemIndex(TInt aItemIndex) const;
       
   324     
       
   325     /**
       
   326     * This function handles resource changes.
       
   327     * @since Series S60 2.6.
       
   328     * @param aType Message type.
       
   329     */  
       
   330     IMPORT_C virtual void HandleResourceChange(TInt aType);
       
   331     
       
   332     /**
       
   333     * Indicates whether the control should be redrawn now. If @c ENoDrawNow, 
       
   334     * the function has no immediately effect. EDrawNow redraw control 
       
   335     * immediately.
       
   336     * @since Series S60 3.0.
       
   337     */
       
   338     IMPORT_C void FocusChanged(TDrawNow aDrawNow);
       
   339 
       
   340 public: // From CCoeControl
       
   341     IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent);
       
   342 
       
   343 protected: // from CEikListBox
       
   344 
       
   345     /**
       
   346     * This function scroll horizontal by one column when the left/right scroll
       
   347     * arrows (i.e. the nudge buttons) are tapped.
       
   348     * @return A nudge value when the buttons are pressed.
       
   349     */
       
   350     IMPORT_C virtual TInt HorizontalNudgeValue() const;
       
   351     
       
   352     /**
       
   353     * This function gets the granularity for horizontal scrolls. The 
       
   354     * granularity is the minimum size of a horizontal move of the client area.
       
   355     * @return A grain size for horizontal scrolling in pixels. 
       
   356     */  
       
   357     IMPORT_C virtual TInt HorizScrollGranularityInPixels() const;
       
   358     
       
   359     /**
       
   360     * This function called by various functions of this class to ensure that
       
   361     * the top item index is always a sane value. The implementation in 
       
   362     * @c CEikListBox tries to ensure the minimum amount of white space at the 
       
   363     * bottom of the list box. Note that this function does not affect the 
       
   364     * current item index.
       
   365     */  
       
   366     IMPORT_C virtual void AdjustTopItemIndex() const;
       
   367     
       
   368     /** 
       
   369     * This function handles drag events. If a leave occurs the framework 
       
   370     * generates a Symbian Leave code.
       
   371     * @param aPointerPos The position of the @c TPointerEvent for which this 
       
   372     * handler is invoked.
       
   373     */
       
   374     IMPORT_C virtual void HandleDragEventL(TPoint aPointerPos);
       
   375 
       
   376     /** 
       
   377     * This function calculates the client area. This method is called by 
       
   378     * various functions of this class to recalculate the extent of the client
       
   379     * area from @c iViewRect. This implementation takes into account any 
       
   380     * rounding of the viewing rectangle made to fit a whole number of items.
       
   381     * @param aClientRect On return contains a size for the client area in 
       
   382     * pixels. 
       
   383     */
       
   384     IMPORT_C virtual void RestoreClientRectFromViewRect(TRect& aClientRect) const;
       
   385 
       
   386     /** 
       
   387     * This function rounds down the height of the rectangle (if necessary) so 
       
   388     * that only a whole number of items can be displayed inside the list box.
       
   389     * @param aRect Rectangle parameter.
       
   390     */
       
   391     IMPORT_C virtual TInt AdjustRectHeightToWholeNumberOfItems(TRect& aRect) const;
       
   392 
       
   393     /**
       
   394     * Updates the position of grids scroll bars’ thumbs to reflect the vertical 
       
   395     * position of selector.
       
   396     */
       
   397     IMPORT_C virtual void UpdateScrollBarThumbs() const;
       
   398     
       
   399     /**
       
   400     * Gets a count of the component controls of this grid.
       
   401     * @return The number of component controls.
       
   402     */
       
   403     IMPORT_C virtual TInt CountComponentControls() const;
       
   404 
       
   405 protected:
       
   406 
       
   407     /**
       
   408     * Moves to the next or previous item on the grid. If a leave occurs the 
       
   409     * framework generates a Symbian Leave code.
       
   410     * @param aPoint Co-ordinate object parameter.
       
   411     */
       
   412     IMPORT_C void MoveToNextOrPreviousItemL(TPoint aPoint);
       
   413     
       
   414     /** 
       
   415     * This protected function used by functions to check/alter the dimensions
       
   416     * of the grid as data items are added or removed or the size of the items
       
   417     * are altered. It also assumes that @c SetLayoutL has been called. 
       
   418     * This will not leave if scrollbars have both been turned off. If a leave 
       
   419     * occurs the framework generates a Symbian Leave code.
       
   420     */
       
   421     IMPORT_C virtual void CalcGridSizeL();
       
   422     
       
   423     /**
       
   424     * Creates a formatted list item drawer. If a leave occurs the framework 
       
   425     * generates a Symbian Leave code.
       
   426     */
       
   427     IMPORT_C virtual void CreateItemDrawerL();
       
   428 
       
   429 private:
       
   430     __DECLARE_TEST;
       
   431 
       
   432     // grid model helper
       
   433     inline CAknGridM* GridModel() const;
       
   434 
       
   435     // grid view helper
       
   436     inline CAknGridView* GridView() const;
       
   437 
       
   438     /**
       
   439     * This function sets the size and initial layout of items. If a leave 
       
   440     * occurs the framework generates a Symbian Leave code.
       
   441     * @param aOrientation
       
   442     * @param aHorizontal
       
   443     * @param aVertical
       
   444     * @param aNumOfItemsInPrimaryOrient
       
   445     * @param aNumOfItemsInSecondaryOrient
       
   446     * @param aSizeOfItems
       
   447     * @param aWidthOfSpaceBetweenItems
       
   448     * @param aHeightOfSpaceBetweenItems
       
   449     */
       
   450     void DoSetLayoutL(TInt aOrientation,
       
   451                       TInt aHorizontal,
       
   452                       TInt aVertical,
       
   453                       TInt aNumOfItemsInPrimaryOrient,
       
   454                       TInt aNumOfItemsInSecondaryOrient,
       
   455                       TSize aSizeOfItems,
       
   456                       TInt aWidthOfSpaceBetweenItems=0,
       
   457                       TInt aHeightOfSpaceBetweenItems=0);
       
   458 
       
   459 private:
       
   460     /**
       
   461     * From CAknControl
       
   462     */
       
   463     IMPORT_C void* ExtensionInterface( TUid aInterface );
       
   464 private: // from MListBoxModel
       
   465     IMPORT_C virtual TAny* MListBoxModel_Reserved();
       
   466     
       
   467 protected: 
       
   468     /**
       
   469     * From @c MEikScrollBarObserver
       
   470     *
       
   471     * This function handles scroll events caused by scroll bar. 
       
   472     * It updates grid's view by event and new thumb position. 
       
   473     *
       
   474     * @param aScrollBar pointer to scroll bar sent this event
       
   475     * @param aEventType type of event
       
   476     */
       
   477     IMPORT_C virtual void HandleScrollEventL(CEikScrollBar* aScrollBar, TEikScrollEvent aEventType);
       
   478 
       
   479     /**
       
   480     * From @c MObjectProvider.
       
   481     *
       
   482     * Retrieves an object of the same type as that encapsulated in aId. This 
       
   483     * function is used to allow controls to ask their owners for access to 
       
   484     * other objects that they own.
       
   485     * 
       
   486     * @param aId An encapsulated object type ID.
       
   487     * @return Encapsulates the pointer to the object provided. 
       
   488     *         Note that the encapsulated pointer may be NULL.
       
   489     */
       
   490     IMPORT_C virtual TTypeUid::Ptr MopSupplyObject(TTypeUid aId);
       
   491     
       
   492     
       
   493 private:
       
   494     TInt  iMinColWidth;
       
   495     TBool iCurrentIsValid;
       
   496     TInt  iNumOfColsInView;
       
   497     TInt  iNumOfRowsInView;
       
   498     TSize iSpaceBetweenItems;
       
   499         TInt  iSpare; // was iNumOfItemsInPrimaryOrient;
       
   500     TBitFlags iOrientationFlags;
       
   501     TBitFlags iHorizontalFlags;
       
   502     TBitFlags iVerticalFlags;
       
   503     CAknGridExtension *iExtension; // spare taken to use as extension class
       
   504     };
       
   505 
       
   506 /**
       
   507  * Return Model
       
   508  */
       
   509 inline CAknGridM* CAknGrid::GridModel() const
       
   510     {
       
   511     return STATIC_CAST(CAknGridM*,iModel);
       
   512     }
       
   513 
       
   514 /**
       
   515  * Return View 
       
   516  */
       
   517 inline CAknGridView* CAknGrid::GridView() const
       
   518     {
       
   519     return STATIC_CAST(CAknGridView*,iView);
       
   520     }
       
   521 
       
   522 /**
       
   523  * Return text currently in the empty grid text
       
   524  */
       
   525 inline const TDesC* CAknGrid::EmptyGridText() const
       
   526     {
       
   527     return STATIC_CAST(CAknGridView*,iView)->EmptyListText();
       
   528     }
       
   529 
       
   530 #endif //__AKNGRID_H__
       
   531