idlehomescreen/widgetmanager/inc/wmlistbox.h
branchRCL_3
changeset 83 5456b4e8b3a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlehomescreen/widgetmanager/inc/wmlistbox.h	Wed Sep 01 12:32:46 2010 +0100
@@ -0,0 +1,386 @@
+/*
+* Copyright (c) 2009 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:
+* Declares widget listbox for WidgetManager
+*
+*/
+
+#ifndef ___WMLISTBOX_H__
+#define ___WMLISTBOX_H__
+
+// INCLUDES
+#include <eiklbi.h>
+#include <eiktxlbx.h>
+#include <eiktxlbm.h>
+#include <eikfrlb.h>
+#include <eiktxlbm.h>
+#include <aknlists.h>
+
+#include <touchfeedback.h>
+#include <touchlogicalfeedback.h>
+#include <aknlongtapdetector.h> 
+#include "wmwidgetdataobserver.h"
+#include "wmwidgetdata.h"
+#include "wmwidgetorderdata.h"
+
+// FORWARD DECLARATIONS
+class CWmListBox;
+class CWmPlugin;
+class CListBoxView;
+class CFormattedCellListBoxData;
+class CAknLongTapDetector;
+class CWmListModel;
+class CWmWidgetData;
+class CAknStylusPopUpMenu;
+class MEikMenuObserver;
+class CWmListItemDrawer;
+
+// CLASS DECLARATIONS
+
+/**
+ * CWmListItemDrawer
+ */
+NONSHARABLE_CLASS( CWmListItemDrawer ): public CFormattedCellListBoxItemDrawer
+    {
+public:
+    /** Two-phased constructor. */
+    static CWmListItemDrawer* NewL(
+                CWmPlugin& aWmPlugin,
+                MTextListBoxModel* aTextListBoxModel,
+                const CFont* aFont,
+                CFormattedCellListBoxData* aFormattedCellData,
+                CWmListBox* aListBox  );
+
+    /** Destructor. */
+    ~CWmListItemDrawer();
+    
+    /** Default logo image. */
+    const CFbsBitmap* DefaultLogoImage();
+    /** Default logo mask. */
+    const CFbsBitmap* DefaultLogoMask();
+
+    /**
+     * sets item height according to layout 
+     */
+    void UpdateItemHeight();
+
+public:
+    /**
+     * from CFormattedCellListBoxItemDrawer:
+     * draws a single list box item
+     */
+    void DrawItem(
+                TInt aItemIndex, TPoint aItemRectPos, 
+                TBool aItemIsSelected, TBool aItemIsCurrent, 
+                TBool aViewIsEmphasized, TBool aViewIsDimmed ) const;
+    
+private:
+    /** Constructor for performing 1st stage construction */
+    CWmListItemDrawer( 
+                CWmPlugin& aWmPlugin,
+                MTextListBoxModel* aTextListBoxModel,  
+                const CFont* aFont,  
+                CFormattedCellListBoxData* aFormattedCellData,
+                CWmListBox* aListBox );
+
+    /** 2nd phase constructor */
+    void ConstructL();
+    
+private: // data members
+    /** 
+     * the plugin root (not owned) 
+     */
+    CWmPlugin& iWmPlugin;
+
+    /** 
+     * pointer to the list box data (not owned) 
+     */
+    CFormattedCellListBoxData* iCellData;
+
+    /** 
+     * pointer to the listbox (not owned) 
+     */
+    CWmListBox* iListBox;
+    
+    /** 
+     * default logo (when widget does not have one) bitmap 
+     */
+    CFbsBitmap*         iDefaultLogoImage;
+    
+    /** 
+     * default logo (when widget does not have one) mask 
+     */
+    CFbsBitmap*         iDefaultLogoImageMask;
+    
+    };
+
+
+// CLASS DECLARATIONS
+/**
+ * CWmListBox
+ */
+NONSHARABLE_CLASS( CWmListBox ): public CEikFormattedCellListBox,
+                      public MWmWidgetDataObserver
+    {
+public:
+    
+    /**
+     * Two-phased constructor.
+     */
+    static CWmListBox* NewL(
+            CWmPlugin& aWmPlugin,
+            const TRect& aRect,
+            const CCoeControl* aParent,  
+            TInt aFlags = 0 );
+
+    /** Destructor. */
+    ~CWmListBox();
+
+public: // API for manipulating list content
+    
+    /** Default Logo. */
+    const CFbsBitmap* DefaultLogo();
+    /** Default Logo mask. */
+    const CFbsBitmap* DefaultMask();
+
+    /** 
+     * Findbox visibility
+     * 
+     * @param aVisibility sets find pane visibility
+     */
+    inline void SetFindPaneIsVisible( TBool aVisibility );
+    
+    /** 
+     * Currently selected item index 
+     * 
+     * @return return currently selected item 
+     */
+    TInt CurrentListBoxItemIndex();
+    
+    /** 
+     * real index for listbox item if findbox is active 
+     * 
+     * @return return index from original list for currently selected item
+     */
+    TInt RealIndex( TInt aIndex, TBool aIgnoreSearchIndex = EFalse );
+    
+    /** 
+     * number of items in the widget data array (also items on the list) 
+     * 
+     * @return count of widget data array
+     */
+    inline TInt WidgetDataCount();
+    
+    /** 
+     * currently selected item
+     * @return the selected item, or NULL if nothing selected
+     */
+    CWmWidgetData* WidgetData();
+    
+    /** 
+     * gets an item by index 
+     * 
+     * @param aItemIndex index for item to return
+     * @param aIgnoreSearchIndex if true will get widget from full list
+     * even when search is open
+     */
+    CWmWidgetData& WidgetData( TInt aItemIndex, 
+            TBool aIgnoreSearchIndex = EFalse );
+
+    /**
+     * gets the constant widget data array
+     */
+    inline const RWidgetDataValues& WidgetDataArray();
+
+    /** 
+     * inserts widget data to the model. Takes ownership of the object.
+     * The widget data will appear to correct location in natural order:
+     * - in previously saved position, if it has been viewed before
+     *   (widget data must have a pointer to persistent widget order)
+     * - in case this is a new widget, it will appear topmost
+     * - in case there is no persistent widgets order or it is empty,
+     *   the widget is added in alphabetical order
+     * 
+     * NOTE: caller must call HandleItemAdditionL() for the listbox after
+     * adding all widget datas to update the listbox correctly!
+     * 
+     * @param aWidget Data data to add
+     * @param aRedraw listbox update flag 
+     */
+    void AddWidgetDataL( CWmWidgetData* aWidgetData, TBool aRedraw = ETrue );
+    
+    /** 
+     * removes widget data from given index in the model
+     * The method reorganises the list model and size.
+     * Drawing is still needed to update the appearance.
+     * 
+     * @param aItemIndex index to remove
+     * */
+    void RemoveWidgetData( TInt aItemIndex, TBool aIgnoreSearchIndex = EFalse );
+    
+    /** 
+     * requests to redraw item in given index position 
+     * 
+     * @param aItemIndex index to redraw
+     */
+    void RedrawItem( TInt aItemIndex );
+
+    /** sort order of widgets in the list */
+    enum TSortOrder
+        {
+        /** sort list as it was on last run */
+        EStoredOrder,
+        /** sort alphabetically */
+        EAlphabetical,
+        /** show latest installed first */
+        ELatestFirst
+        };
+
+    /** 
+     * Sorts the listbox's visible array 
+     * 
+     * @param aOrder sort order
+     */
+    void DoSortToVisibleArray( TSortOrder aOrder );
+    
+    /**
+     * Responds to layout switched.
+     */
+    void HandleLayoutChanged();
+
+    /**
+     * Returns size of logo 
+     * 
+     * @return Size of logo rect
+     */
+    TSize LogoSize();
+
+    /**
+     * gets the constant widget order data array
+     */
+    inline const ROrderArray& OrderDataArray();
+    
+    /** 
+     * Sorts the order array
+     * 
+     * @param aOrder sort order
+     */
+    void DoSortToOrderData( TSortOrder aOrder );
+    
+    /**
+     * Adds order data to array
+     */
+    void AddOrderDataL( CWmWidgetOrderData* aOrderData );
+    
+    /**
+     * Returns orderdata object by index
+     */
+    CWmWidgetOrderData* OrderData( TInt aItemIndex );
+    
+    /**
+     * Returns true if findpane is in use
+     */
+    TBool IsFindPaneIsVisible();
+    
+private: // from CEikTextListBox
+    /**
+     * Creates the item drawer.
+     * 
+     * @see CEikTextListBox::CreateItemDrawerL
+     */
+    void CreateItemDrawerL();
+
+protected: // from base class CCoeControl
+    
+    /**
+     * Sets the control's extent, specifying a rectangle.
+     * 
+     * @see CCoeControl::SizeChanged
+     */
+    void SizeChanged();
+
+private: // from base class CCoeControl
+
+    /*
+     * Draws the control.
+     * 
+     * @see CCoeControl::Draw
+     */
+    void Draw( const TRect& aRect ) const;
+    
+private:
+    /** Constructor for performing 1st stage construction */
+    CWmListBox( CWmPlugin& aWmPlugin );
+
+    /** 2nd phase constructor */
+    void ConstructL(
+            const TRect& aRect,
+            const CCoeControl* aParent,
+            TInt aFlags );
+    
+private:
+    /** 
+     * linear order for sorting, depending on the sort type being used 
+     */
+    TLinearOrder<CWmWidgetData> SortOrder( TSortOrder aOrder );
+    
+    /** 
+     * linear order for sorting, depending on the sort type being used 
+     */
+    TLinearOrder<CWmWidgetOrderData> SortOrderToOrderData( TSortOrder aOrder );
+    
+protected: // from MWmWidgetDataObserver
+
+    /** 
+     * widget needs redrawing 
+     * 
+     * @param aWidgetData item to redraw
+     */
+    void HandleWidgetDataChanged( CWmWidgetData* aWidgetData );
+
+private:
+
+    /** 
+     * the plugin root (not owned) 
+     */
+    CWmPlugin&          iWmPlugin;
+
+    /** 
+     * array of widget data objects (the list model) 
+     */
+    RWidgetDataValues   iVisibleWidgetArray;
+
+    /** 
+     * the currently active item ADD button's rectangle, for push recognition 
+     */
+    TRect               iButtonRect;
+
+    /** 
+     * state of list box find pane 
+     */
+    TBool               iFindPaneIsVisible;
+    
+    /** size of logo rect in list item */
+    TSize               iLogoSize;
+    
+    /** 
+     * array of widget order objects
+     */
+    ROrderArray         iOrderDataArray;
+    };
+#include "wmlistbox.inl"
+
+#endif ___WMLISTBOX_H__
+
+// End of File