javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/inc/swtlistbox.h
branchRCL_3
changeset 19 04becd199f91
child 23 98ccebc37403
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/inc/swtlistbox.h	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,490 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Nokia Corporation - S60 implementation
+ *******************************************************************************/
+
+
+#ifndef SWTLISTBOX_H
+#define SWTLISTBOX_H
+
+
+#include <eiklbo.h>
+#include "eswtmobileextensions.h"
+#include "swtscrollablebase.h"
+#include "swtlistboxlists.h"
+
+
+/**
+ * CSwtLbItem
+ * @lib eswt
+ */
+NONSHARABLE_CLASS(CSwtLbItem)
+        : public CSwtListBoxItem
+{
+// Own methods
+public:
+    /**
+     * Constructor
+     */
+    CSwtLbItem();
+
+    /**
+     * Constructor
+     */
+    CSwtLbItem(
+        HBufC* aDtxt,
+        const MSwtImage* aDimg,
+        HBufC* aHtxt,
+        const MSwtImage* aHimg);
+
+    /**
+     * Constructor
+     */
+    CSwtLbItem(
+        HBufC* aDtxt,
+        const MSwtImage* aDimg,
+        const TSize& aDimgSize,
+        HBufC* aHtxt,
+        const MSwtImage* aHimg,
+        const TSize& aHimgSize);
+
+    /**
+     * Destructor
+     */
+    virtual ~CSwtLbItem();
+
+// Data
+public:
+    /**
+     * Heading image index
+     */
+    TInt iHimgIdx;
+
+    /**
+     * Detail image index
+     */
+    TInt iDimgIdx;
+
+    /**
+     * Item index
+     */
+    TInt iIdx;
+};
+
+
+/** Array of List Box Items */
+typedef RPointerArray<CSwtLbItem> RSwtLbItems;
+
+
+/**
+ * CSwtListBox
+ * @lib eswt
+ */
+NONSHARABLE_CLASS(CSwtListBox)
+        : public CAknControl
+        , public ASwtScrollableBase
+        , public MSwtListBox
+        , public MSwtListObserver
+        , public MEikListBoxObserver
+{
+// Types
+private:
+    /** List box properties */
+    struct TSwtLbProp
+    {
+        TInt iListType;
+        TInt iSelectionType;
+        TInt iDiconVisible;
+    };
+
+// Own methods
+public:
+    /**
+     * Two phase constructor
+     * @param aDisplay  parent display
+     * @param aPeer     java peer of this class
+     * @param aParent   composite parent
+     * @param aStyle    control style
+     * @return pointer to an object of this class
+     */
+    static CSwtListBox* NewL(MSwtDisplay& aDisplay, TSwtPeer aPeer,
+                             MSwtComposite& aParent, TInt aStyle);
+
+protected:
+    /**
+     * First phase constructor.
+     * @param aDisplay  parent display
+     * @param aPeer     java peer of this class
+     * @param aParent   composite parent
+     * @param aStyle    control style
+     */
+    CSwtListBox(MSwtDisplay& aDisplay, TSwtPeer aPeer,
+                MSwtComposite& aParent, TInt aStyle);
+
+    /**
+     * Destructor
+     */
+    virtual ~CSwtListBox();
+
+    /**
+     * Second phase constructor
+     */
+    void ConstructL();
+
+// From CCoeControl
+public:
+    TInt CountComponentControls() const;
+    CCoeControl* ComponentControl(TInt aIdx) const;
+    void MakeVisible(TBool aVisible);
+    void SetDimmed(TBool aDimmed);
+    TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType);
+    void HandleResourceChange(TInt aType);
+
+protected:
+    void SizeChanged();
+    void PositionChanged();
+    void FocusChanged(TDrawNow aDrawNow);
+    TTypeUid::Ptr MopSupplyObject(TTypeUid aId);
+    
+private:
+    void Draw(const TRect& aRect) const;
+
+// From ASwtControlBase
+protected:
+    HBufC* MSKLabelL() const;
+
+// From ASwtScrollableBase
+protected:
+    CEikScrollBarFrame* SbFrame() const;
+
+// From MSwtControl
+public:
+    CCoeControl& CoeControl();
+    const CCoeControl& CoeControl() const;
+    TSize ComputeSizeL(TInt aWhint, TInt aHhint);
+    void ProcessKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType);
+    void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+    TBool IsKeyUsed(TUint aKeyCode) const;
+    TBool MSKSelCmdEnabled() const;
+    TRgb GetForeground() const;
+    void SetForegroundL(const MSwtColor* aColor);
+    void SetBackgroundL(const MSwtColor* aColor);
+    TBool IsLongTapAnimationCandidate(const TPointerEvent& aPointerEvent) const;
+
+// From MSwtListBox
+public:
+    MSwtScrollable* Scrollable();
+    void SetLayoutStyleL(TInt aLayoutStyle);
+    void DeselectItemsL(const TInt* aIndices, TInt aCount);
+    void DeselectItemL(TInt aIdx);
+    void DeselectRangeL(TInt aStart, TInt aEnd);
+    void DeselectAllL();
+    TInt GetFocusIndex() const;
+    TInt GetSelectionCount() const;
+    const CArrayFix<TInt>* GetSelectionIndices() const;
+    void RefreshItemL(TInt aIdx, const CSwtListBoxItem* aItem);
+    void RefreshListL(const RSwtListBoxItemsArray& aItemsArray);
+    void SelectItemL(TInt aIdx, TBool aScroll);
+    void SelectRangeL(TInt aStart, TInt aEnd);
+    void SelectAllL();
+    void SetDataModelL(const RSwtListBoxItemsArray& aItemsArray);
+    void SetHeadingFontL(const MSwtFont* aFont);
+    void ShowSelection();
+    void SetFocusIndex(TInt aIndex);
+
+// From MSwtListObserver
+public:
+    void HandleSizeChangedL();
+    MSwtUiUtils& Utils() const;
+
+// From MEikScrollBarObserver
+public:
+    void HandleScrollEventL(CEikScrollBar* aScrollBar, TEikScrollEvent aEventType);
+
+// From MEikListBoxObserver
+public:
+    void HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType);
+
+// New methods
+private:
+    /**
+     * Calculate the listbox properties.
+     * @param aLayoutStyle listbox layout style
+     * @param aStyle control style
+     * @return properties structure
+     */
+    TSwtLbProp ListProperties(TInt aLayoutStyle, TInt aStyle) const;
+
+    /**
+     * Create a certain type of list box
+     * @param aListType one of the listbox types defined in SwtListBoxLists.h
+     * @return pointer to the created listbox
+     */
+    CEikTextListBox* CreateListL(TInt aListType);
+
+    /**
+     * Create the scrollbars for a listbox.
+     * @param aList listbox pointer
+     */
+    void CreateScrollBarsL(CEikTextListBox* aList) const;
+
+    /**
+     * Create a listbox image array.
+     * @param aMultiSelImgs if ETrue adds checkbox icons to the image array.
+     * @return image array
+     */
+    CArrayPtr<CGulIcon>* CreateListImgArrL(TBool aMultiSelImgs) const;
+
+    /**
+     * Create a list selection image.
+     * @param aSelected state of the selection image (on/off).
+     * @return pointer to created image.
+     */
+    CGulIcon* CreateListSelImgL(TBool aSelected) const;
+
+    /**
+     * Create or update the selection images in the list image array.
+     * @param aImgArr the list image array.
+     */
+    void CreateListSelImgsL(CArrayPtr<CGulIcon>* aImgArr) const;
+
+    /**
+     * Insert item into list.
+     * @param aItem item data.
+     */
+    void InsertListItemL(CSwtLbItem* aItem);
+
+    /**
+     * Create an image ready to be set to the list's image array.
+     * @param aSwtImg swt image pointer.
+     * @param aDetailIcon are we creating a detail icon or heading icon
+     * @param aBitmapResSize size of the created bitmap is stored here
+     * @return list image pointer.
+     */
+    CGulIcon* CreateListImgL(const MSwtImage* aSwtImg, const TBool aDetailIcon,
+                             TSize& aBitmapResSize) const;
+
+    /**
+     * Insert a list image into the list (list image array)
+     * @param aImg the image to be inserted.
+     * @return position where the image was inserted.
+     */
+    TInt InsertListImgL(CGulIcon* aImg);
+
+    /**
+     * Create a formatted string ready to be set to the list's string array
+     * based on the image indexes and strings of an item.
+     * @param aItem item data.
+     * @return formatted string.
+     */
+    HBufC* CreateListTxtL(const CSwtLbItem* aItem) const;
+
+    /**
+     * Insert a formatted item string into the list (list strings array)
+     * @param aTxt the string to be inserted.
+     * @param aIdx position where the string should be inserted.
+     */
+    void InsertListTxtL(const TDesC& aTxt, TInt aIdx);
+
+    /**
+     * Remove list item.
+     * @param aIdx index of the item in the item array.
+     */
+    void DeleteListItem(TInt aIdx);
+
+    /**
+     * Remove all list items.
+     */
+    void DeleteAllListItems();
+
+    /**
+     * Remove list image.
+     * @param aIdx index of the image in the image array.
+     */
+    void DeleteListImg(TInt aIdx);
+
+    /**
+     * Remove list item string.
+     * @param aIdx index of the string in the string array.
+     */
+    void DeleteListTxt(TInt aIdx);
+
+    /**
+     * Select one item.
+     * @param aIdx position of the item in the item array
+     * @param aSelected new state of selection
+     */
+    void SelectListItemL(TInt aIdx, TBool aSelected, TBool aScroll);
+
+    /**
+     * Select a range of items.
+     * @param aStart first item in range.
+     * @param aEnd last item in range.
+     * @param aSelected new state of selection
+     */
+    void SelectListItemsL(TInt aStart, TInt aEnd, TBool aSelected);
+
+    /**
+     * Select all items.
+     * @param aSelected new state of selection
+     */
+    void SelectListItemsL(TBool aSelected);
+
+    /**
+     * Get current state of list selection.
+     * @param aCurrSelItems resulting array of selected items.
+     */
+    void GetUserSelectionL(CArrayFix<TInt>* aCurrSelItems);
+
+    /**
+     * Set custom foreground color to the list. If the color is invalid,
+     * the default color is set instead.
+     */
+    void UpdateListColor();
+
+    /**
+     * Update MSK. To be called after selection changed.
+     */
+    void UpdateListMskL();
+
+    /**
+     * Minimum width for which an item can display entirely its contents.
+     * Very expensive to call. Goes trough all items and counts the maximum
+     * string lengths. Asumes that the Avkon lists will always use the same
+     * layouts and calculates the width based on these layouts.
+     * @return minimum with for items
+     */
+    TInt MinimumListItemWidth() const;
+
+    /**
+     * Removes the tabs in a string and replaces them with spaces.
+     * @param aString string to be processed
+     */
+    void TabsToSpaces(HBufC* aString) const;
+
+    /*
+     * Sets maximum icon sizes according to LAF.
+     */
+    void SetMaximumIconSizes();
+
+    /*
+     * Scales list images so that their size does not exceed the maximum
+     * icon size from LAF.
+     * @param aNewMaxDetailSize New maximum detail icon size.
+     * @param aNewMaxHeadingSize New maximum heading icon size.
+     */
+    void UpdateImageSizes(const TSize& aNewMaxDetailSize,
+                          const TSize& aNewMaxHeadingSize);
+
+    /*
+     * Scale an image so that it's size does not exceed maximum size
+     * @param aImage Source image.
+     * @param aIcon Update scaled image to aIcon.
+     * @param aOldMaxSize Previous maximum size for images.
+     * @param aNewMaxSize New maximum size for images.
+     * @return Scaled size.
+     */
+    TSize ScaleImage(const MSwtImage* aImage, CGulIcon* aIcon,
+                     const TSize& aOldMaxSize, const TSize& aNewMaxSize);
+
+    /*
+     * Remove sub-references from all images in all items.
+     */
+    void RemoveSubRefs();
+
+#ifdef RD_JAVA_ADVANCED_TACTILE_FEEDBACK
+public:
+    void DoControlSpecificFeedback(
+        const TBool& aFirstTap,
+        const TBool& aTappedToChildRect,
+        const TPointerEvent& aPointerEvent) const;
+#endif //RD_JAVA_ADVANCED_TACTILE_FEEDBACK
+
+// Data
+private:
+    /**
+     * Contained listbox.
+     * Own
+     */
+    CEikTextListBox* iList;
+
+    /**
+     * Cell array of the current list box
+     */
+    RArray<TInt> iCells;
+
+    /**
+     * Items array.
+     * Own
+     */
+    RSwtLbItems iItems;
+
+    /**
+     * Listbox image array.
+     * Own.
+     */
+    CArrayPtr<CGulIcon>* iImgs;
+
+    /**
+     * Listbox string array.
+     * Own.
+     */
+    CDesCArray* iTxts;
+
+    /**
+     * Listbox properties.
+     * Own.
+     */
+    TSwtLbProp iProps;
+
+    /**
+     * Previously selected items (temporary)
+     * Own
+     */
+    CArrayFix<TInt>* iPrevSelItems;
+
+    /**
+     * Foreground color.
+     * Own
+     */
+    const MSwtColor* iColor;
+
+    /**
+     * Default foreground color.
+     */
+    TRgb iDefColor;
+
+    /**
+     * Used to hide initial flickering.
+     */
+    TBool iRestoreRedraw;
+
+    /**
+     * Maximum icon sizes for the current layout.
+     */
+    TSize iMaxDetailIconSize;
+    TSize iMaxHeadingIconSize;
+
+    /**
+     * Deliver all pointer event to the scrollbar when this on.
+     */
+    TBool iVScrollBarGrabsPointerEvents;
+
+    /**
+     * Stores last known focus index. Use only during paint and key handlers.
+     */
+    TInt iPrevFocusIndex;
+    
+    /**
+     * View visible rect at last draw
+     */
+    mutable TRect iLastViewVisibleRect;
+};
+
+#endif // SWTLISTBOX_H