classicui_pub/lists_api/inc/eikfrlb.h
changeset 0 2f259fa3e83a
child 4 8ca85d2f0db7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/classicui_pub/lists_api/inc/eikfrlb.h	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,603 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// EIKFRLB.H
+//
+// Copyright (c) 1997-2001 Symbian Ltd.  All rights reserved.
+//
+#if !defined(__EIKFRLB_H__)
+#define __EIKFRLB_H__
+
+#include <eiklbi.h>
+#include <eiklbv.h>
+#include <eiktxlbm.h>
+#include <eiktxlbx.h>
+
+class CFormattedCellListBoxData;
+
+/**
+ *  @c CFormattedCellListBoxItemDrawer draws a single list item and manages
+ *  list item properties.
+ *
+ *  @lib avkon
+ */
+class CFormattedCellListBoxItemDrawer : public CTextListItemDrawer
+	{
+public:
+
+    /**
+     * C++ default constructor.
+     * 
+     * @param aTextListBoxModel The list box model class.
+     * @param aFont Font to be used in listbox.
+     * @param aFormattedCellData Pointer to the list layout drawer class.
+     */
+	IMPORT_C CFormattedCellListBoxItemDrawer(
+            MTextListBoxModel* aTextListBoxModel, 
+            const CFont* aFont, 
+            CFormattedCellListBoxData* aFormattedCellData);
+	
+    /**
+     * Destructor.
+     */
+    IMPORT_C ~CFormattedCellListBoxItemDrawer();
+
+    /**
+     * Gets the list layout drawer.
+     * 
+     * @return Pointer to the list layout drawer object.
+     */
+	IMPORT_C CFormattedCellListBoxData* FormattedCellData() const;
+
+    /**
+     * Gets the list layout drawer.
+     * 
+     * @return Pointer to the list layout drawer object.
+     */
+	IMPORT_C CFormattedCellListBoxData* ColumnData() const; 
+    // for compability with columnlistbox itemdrawer
+
+    /**
+     * Draws an empty item to the list box.
+     * 
+     * @param aItemIndex Not used.
+     * @param aItemRectPos Position for the list box item rectangle.
+     * @param aViewIsDimmed Not used.
+     */
+    IMPORT_C virtual void DrawEmptyItem(TInt aItemIndex, TPoint aItemRectPos, 
+                                        TBool aViewIsDimmed) const;
+
+    /**
+     * This function sets top item index.
+     * 
+     * @param aTop Item index value.
+     */
+	IMPORT_C void SetTopItemIndex(TInt aTop);
+
+    /**
+     * List item index and color and style properties.
+     */
+	struct SListProperties 
+	    {
+        /** List box item index. */
+        TInt iItem; // must be first
+
+        /** Colour and style properties for the list item. */
+        TListItemProperties iProperties;
+	    };
+
+    /**
+     * Clears all properties.
+     */
+	IMPORT_C void ClearAllPropertiesL();
+
+    /** 
+     * The SetProperties is convenience method for normal cases.
+     * NOTE that it does NOT work correctly if you can insert/delete
+     * items from the list -- You need to update all properties if
+     * any changes to the item text array happen! Often it is convenient
+     * to override the @c Properties() method. Further, use this only
+     * for small lists.
+     *
+     * It has been implemented as sorted list of (index,Property) pairs.
+     * 
+     * If you're using find, aItemIndex for this method is the same as you give
+     * in @c MdcaPoint() points the default @c Properties() does conversion 
+     * between indexes.
+     * 
+     * @param aItemIndex List box item index.
+     * @param properties Colour and style properties for the list box item.
+     */
+    IMPORT_C void SetPropertiesL(TInt aItemIndex, TListItemProperties properties);
+
+    /**
+     * Function for getting properties of a certain list box item.
+     * 
+     * @param aItemIndex The listbox item index.
+     * @return Colour and style properties of wanted
+     *         list box item.
+     */
+	IMPORT_C virtual TListItemProperties Properties(TInt aItemIndex) const;
+
+    /**
+     * Gets list box item cell size.
+     * 
+     * @return The list box item cell size.
+     */
+	TSize LafItemSize() { return iItemCellSize; }
+
+public: // from CTextListItemDrawer
+
+    /**
+     * From @c CTextListItemDrawer.
+     *
+     * Draw an item in a list box.
+     * 
+     * @param aItemIndex The index into the model's item array of the item 
+     *        to draw.
+     * @param aItemTextRect The item’s text rectangle. 
+     * @param aItemIsCurrent @c ETrue if the item is current. @c EFalse 
+     *        otherwise.
+     * @param aViewIsEmphasized @c ETrue if the view is emphasized. @c EFalse
+     *        otherwise.
+     * @param aItemIsSelected @c ETrue if the item is selected. @c EFalse 
+     *        otherwise.
+     */
+	IMPORT_C void DrawItemText(TInt aItemIndex,const  TRect& aItemTextRect,
+                               TBool aItemIsCurrent, TBool aViewIsEmphasized, 
+                               TBool aItemIsSelected) const;
+
+    /**
+     * From @c CTextListItemDrawer.
+     *
+     * Draws an item tick mark. 
+     *
+     * A tick mark is used in multiple selection lists to indicate the item is
+     * selected.
+     *
+     * This function is invoked by the framework to draw an item mark if 
+     * @c iDrawMark is set. The mark should be drawn into this list item 
+     * drawer's graphics context; by default, @c DrawItemMark() draws a tick 
+     * using the standard symbol font.
+     * 
+     * This function does not need to be re-implemented for derived classes 
+     * which do not draw item marks.
+     * 
+     * @param aItemIsSelected Whether the item to draw for is selected.
+     * @param aViewIsDimmed Whether the item is dimmed. 
+     * @param aMarkPos Position of the mark.
+     */
+	IMPORT_C void DrawItemMark(TBool aItemIsSelected, TBool aViewIsDimmed, 
+                               const TPoint& aMarkPos) const;
+
+public: // from CListItemDrawer
+
+    /**
+     * From @c CListItemDrawer.
+     *
+     * Gets the minimum size of a cell based on the font and the number of 
+     * characters in the cell.
+     * 
+     * @return The minimum size for a cell in pixels.
+     */
+	IMPORT_C TSize MinimumCellSize() const;
+
+    /**
+     * From @c CListItemDrawer.
+     *
+     * Gets the width in pixels of the specified item.
+     * 
+     * @param aItemIndex The index of the item for which the width is obtained.
+     * @return The specified item's width in pixels.
+     */
+	IMPORT_C TInt ItemWidthInPixels(TInt aItemIndex) const; 
+
+    /**
+     * From @c CListItemDrawer.
+     *
+     * Sets the item cell size.
+     *
+     * The cell size is the on-screen size of the entire item, including its 
+     * text and its item mark.
+     * 
+     * @param aSizeInPixels New size for the item cell.
+     */
+    IMPORT_C void SetItemCellSize(const TSize& aSizeInPixels);
+
+protected:
+    
+    /**
+     * Draws current item rectangle.
+     * 
+     * @param aRect Current item rectangle.
+     */
+	void DrawCurrentItemRect(const TRect& aRect) const;
+
+    /**
+     * @c WordWrapListItem is used with @c CAknDouble* style listboxes.
+     * If listbox does not have 2nd line defined, @c WordWrapListItem
+     * wraps 1st line to 2nd line, if text does not fit to 1st line.
+     * If listbox does have 2nd line defined, this method truncates
+     * both lines.
+     *
+     * @internal
+     * @param aTarget Where to place wrapped item string
+     * @param aItemString Text to be wrapped
+     * @param aFirstIndex index of 1st subcell to wrap
+     * @param aSecondIndex index of 2nd subcell
+     */
+    void WordWrapListItem( TPtr& aTarget, 
+                           const TDesC &aItemString, 
+                           TInt aFirstIndex, 
+                           TInt aSecondIndex,
+                           TInt aItemIndex ) const;
+    /**
+    * @internal
+    */
+    void DrawBackgroundAndSeparatorLines( const TRect& aItemTextRect ) const;
+                        
+
+private:
+
+	IMPORT_C void CFormattedCellListBoxItemDrawer_Reserved();
+
+protected:
+
+    /**
+     * Top item index.
+     */
+	TInt iTopItemIndex;
+
+    /**
+     * Array for list box item's properties.
+     * Own.
+     */
+	CArrayFix<SListProperties>* iPropertyArray;
+
+private:
+
+	TInt iSpare;
+	};
+
+
+/** 
+ * Avkon base class similar to uikon's column listbox.
+ *
+ * @code
+ *  ListBox <>--> View ---> ItemDrawer ---> Model
+ *  ListBox <>--> ItemDrawer <>---> Data
+ *  ListBox <>--> Model <>---> MDesCArray <--- Array <>---> Engine
+ * @endcode
+ * 
+ * Content for list items are tab-separated strings.
+ *
+ * See concrete classes derived from @c CEikFormattedCellListBox for details.
+ *
+ * Starting from 3.0 listbox uses highlight animations. Starting and stopping
+ * animation is connected to focus events. To support highlight animations
+ * properly you have to make sure that the list has focus when it has 'visual
+ * focus'. Common issues:
+ * - In many cases list is in a container which sits on top of the control
+ *   stack. The container receives all focus events and should hand them to the
+ *   list too. E.g. 
+ * @code       void CContainer::FocusChanged( TDrawNow aDrawNow )
+ *                 {
+ *                 ... some code ...
+ *                 if( iListBox )
+ *                     iListBox->SetFocus( IsFocused(), aDrawNow );
+ *                 }
+ * @endcode
+ * - When switching components programmatically, e.g. from one list to another
+ *   in the same view, make sure that you remove focus from the other
+ *   component.
+ * - In more complex cases you may have to add a dummy interceptor control to
+ *   the top of control stack to hand focus events to list.
+ * - Make sure you handle resource changes correctly. If resource handle chain
+ *   is solid it should reach @c CCoeControl::HandleResourceChange, which 
+ *   informs child components about resource change.
+ *
+ * See methods
+ *   @c CEikListBox::ConstructL()
+ *   @c CEikTextListBox::SetItemTextArray()
+ *   @c CEikFormattedCellListBoxData::SetIconArray()
+ * 
+ * Related flags for dialogs (@c avkon.hrh)
+ *   @c EAknDialogSelectionList
+ *   @c EAknDialogMenuList
+ *   @c EAknDialogMultiselectionList
+ *
+ * Check also:
+ *   @c CAknSelectionListDialog (@c aknselectionlist.h)
+ *   @c CAknMarkableListDialog  (@c aknselectionlist.h)
+ *   @c CAknPopupList           (@c aknpopup.h)
+ *   @c CAknListQueryDialog     (@c aknquerydialog.h)
+ *   @c CAknColumnListBox       (@c aknlists.h)
+ *
+ *  @lib avkon
+ */
+class CEikFormattedCellListBox : public CEikTextListBox 
+	{
+
+public:
+
+    /**
+     * C++ default constructor.
+     */
+	IMPORT_C CEikFormattedCellListBox();
+
+    /**
+     * Constructs list box from resource file. See @c LISTBOX resource 
+     * definition.
+     *
+     * Flags: 
+     *    @c EAknListBoxSelectionList, 
+     *    @c EAknListBoxMenuList, 
+     *    @c EAknListBoxMarkableList, 
+     *    @c EAknListBoxMultiselectionList, 
+     *    @c EAknListBoxViewerFlags
+     * 
+     * @param aReader Reference to resource reader @c TResourceReader object.
+     */
+	IMPORT_C void ConstructFromResourceL(TResourceReader& aReader);
+	
+    /** 
+     * By default Symbian 2nd phase constructor is private. Must be called 
+     * if resource data is not used.
+     * 
+     * @param aParent Pointer to @c CCoeControl class, parent control.
+     * @param aFlags Flags for @c CEikListBox constructor. Possible flags : 
+     *        @c EAknListBoxSelectionList, 
+     *        @c EAknListBoxMenuList, 
+     *        @c EAknListBoxMarkableList, 
+     *        @c EAknListBoxMultiselectionList, 
+     *        @c EAknListBoxViewerFlags
+	 */
+	IMPORT_C void ConstructL(const CCoeControl* aParent, TInt aFlags);
+
+public:
+
+    /**
+     * Gets model class of the list box.
+     * 
+     * @return Pointer to list box model class instance.
+     */
+	IMPORT_C CTextListBoxModel* Model() const;
+
+    /**
+    * Gets list box item drawer.
+    * 
+    * @return Pointer to item drawer object.
+    */
+	IMPORT_C CFormattedCellListBoxItemDrawer* ItemDrawer() const;
+
+    /**
+    * Sets icon sizes for visible list box items.
+    */
+    void SetIconSizes();
+
+public:
+
+	/**
+     * Enable or disable logical to visual reordering in listbox data text
+     * drawing. By default, it is enabled. This has any effect only when 
+     * bidirectional text is rendered.
+     *
+     * If you convert text to visual order prior to passing it to the listbox
+     * (for example by wrapping text to lines with methods in 
+     * @c AknBidiTextUtils), then you should disable conversion in listbox 
+     * by calling this method.
+     *
+     * @since S60 2.0
+     * @param aUseConversion If @c ETrue enable conversion. 
+     */
+	IMPORT_C void UseLogicalToVisualConversion( TBool aUseConversion );
+
+public:
+
+    /**
+     * This method needs to be called to enable extended drawing features such
+     * as skinning, pictograph drawing and marquee text in the listbox draw
+     * routine.
+     *
+     * Methods @c CEikFormattedCellListBox::ConstructL and
+     * @c CEikFormattedCellListBox::ConstructFromResourceL call this method. 
+     * So, you only need to call this if your listbox implementation does not 
+     * call either of those.
+     * 
+     * This method can be safely called more than once.
+     * Item drawer must be created before calling this method, or a panic is 
+     * raised.
+     *
+     * @since S60 2.6
+     * @panic EAknPanicListBoxItemDrawerNotCreated Panics if the item drawer 
+     *        for the current class has not been defined.
+     */
+    IMPORT_C void EnableExtendedDrawingL();
+    
+    /**
+    * Enables/disables list stretching. When a list is stretched its second line
+    * is moved after the first line. This is intented for devices with a large
+    * screen. This feature might be set as default by a product specific flag.
+    *
+    * Item drawer must be created before calling this method.
+    *
+    * @since S60 3.1
+    * @param aEnabled ETrue to enable list stretching.
+    */
+    IMPORT_C void EnableStretching( const TBool aEnabled );
+
+    /**
+    * Hides the second row of a double style listbox. This feature is disabled
+    * by default.
+    *
+    * @since S60 3.1
+    * @param aHide ETrue to hide the second row.
+    */
+    IMPORT_C void HideSecondRow( const TBool aHide );
+protected:
+
+    /**
+     * Creates item draver for the listbox.
+     */
+	IMPORT_C virtual void CreateItemDrawerL();
+
+    /**
+     * From @c CEikListBox.
+     *
+     * Rounds down the height of the rectangle (if necessary) so that only
+     * a whole number of items can be displayed inside the list box.
+     *
+     * @param aRect The rectangle to be modified.
+     * @return The number of pixels reduced.
+     */
+	IMPORT_C virtual TInt AdjustRectHeightToWholeNumberOfItems(
+                                    TRect &aRect) const;
+
+public: // from CEikListBox
+
+    /**
+     * From @c CEikListBox.
+     *
+     * Creates the list box view.
+     * 
+     * @return Pointer to new list box view class instance.
+     */
+	IMPORT_C CListBoxView* MakeViewClassInstanceL();
+
+    /**
+     * From @c CEikListBox.
+     *
+     * Handles focus changes.
+     *
+     * The function emphasizes or de-emphasizes the view as needed, 
+     * and shows or hides the matcher cursor.
+     *
+     * @param aDrawNow If @c EDrawNow, a redraw is performed immediately.
+     */
+    IMPORT_C void FocusChanged(TDrawNow aDrawNow);
+
+public: // from CCoeControl
+
+    /**
+     * From @c CCoeControl.
+     *
+     * Gets the list of logical colors used to draw the control.
+     * 
+     * @param aColorUseList The color list.
+     */
+	IMPORT_C void GetColorUseListL(
+        CArrayFix<TCoeColorUse>& aColorUseList) const;
+	
+    /**
+     * From @c CCoeControl.
+     *
+     * Handles a change to the control's resources.
+     *
+     * @param aType A message UID value.
+     */
+    IMPORT_C void HandleResourceChange(TInt aType);
+    
+    /**
+     * From @c CCoeControl.
+     *
+     * Handles pointer events.
+     *
+     * @param aPointerEvent The pointer event.
+     */
+    IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+
+protected: // from MObjectProvider
+
+    /**
+     * From @c MObjectProvider.
+     *
+     * Retrieves an object of the same type as that encapsulated in aId. This 
+     * function is used to allow controls to ask their owners for access to 
+     * other objects that they own.
+     * 
+     * @param aId An encapsulated object type ID.
+     * @return Encapsulates the pointer to the object provided. 
+     *         Note that the encapsulated pointer may be NULL.
+     */
+	IMPORT_C virtual TTypeUid::Ptr MopSupplyObject(TTypeUid aId);
+
+private: 
+
+    /**
+     * From @c CAknControl
+     */
+	IMPORT_C void* ExtensionInterface( TUid aInterface );
+
+private: // listbox use only
+
+	IMPORT_C virtual void CEikListBox_Reserved(); 
+
+private: // data
+
+    TInt iSpare;
+};
+
+
+/**
+ *  @c CFormattedCellListBoxView draws all the list items and manages
+ *  the area of the screen allocated for list itself. In particular,
+ *  this class does not handle margins of the whole list.
+ *
+ *  @lib avkon
+ */
+class CFormattedCellListBoxView : public CListBoxView
+	{
+
+public: // from CListBoxView
+
+    /**
+     * From @c CListBoxView.
+     *
+     * Draws every visible item into the specified rectangle. 
+     *
+     * @param aClipRect The rectangle to draw into. This is not used.
+     */
+	IMPORT_C void Draw(const TRect* aClipRect = NULL) const;
+
+    /**
+     * From @c CListBoxView.
+     *
+     * Draws empty list. 
+     *
+     * @param aClientRect The rectangle to draw into.
+     */
+	IMPORT_C virtual void DrawEmptyList(const TRect &aClientRect) const;
+	
+    /**
+     * From @c CListBoxView.
+     *
+     * Recalculates the index of the bottom item in the list from the top item
+     * index and the size of the display. This function is called by the owning
+     * list box control when either the size of the list box or the number of 
+     * items in its model changes. 
+     */
+    IMPORT_C virtual void CalcBottomItemIndex();
+
+private: // overridden from CListBoxView
+
+	IMPORT_C virtual TAny* Reserved_1();
+	};
+
+
+#endif  // __EIKFRLB_H__
+
+// End of File