menufw/menufwui/mmwidgets/inc/mmlistbox.h
changeset 0 f72a12da539e
child 4 4d54b72983ae
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/menufw/menufwui/mmwidgets/inc/mmlistbox.h	Thu Dec 17 08:40:49 2009 +0200
@@ -0,0 +1,389 @@
+/*
+* Copyright (c) 2007 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:  CMmListBox
+*  Version     : %version: MM_22.1.14 % << Don't touch! Updated by Synergy at check-out.
+*
+*/
+
+
+#ifndef C_MMLISTBOX_H
+#define C_MMLISTBOX_H
+
+#include <e32std.h>
+#include <e32base.h>
+#include <aknlists.h>
+#include <e32cmn.h> 
+
+class CMmListBoxModel;
+class CMmListBoxItemDrawer;
+class CMmMarqueeAdapter;
+class CMmWidgetContainer;
+class CMmTemplateLibrary;
+
+/**
+ *  CMmListBox
+ *
+ *  @code
+ *  @endcode
+ *  @lib mmwidgets
+ *  @since S60 v3.0
+ *  @ingroup group_mmwidgets
+ */
+NONSHARABLE_CLASS( CMmListBox ) : public CEikFormattedCellListBoxTypedef
+	{
+public:
+    /**
+     * Two-phased constructor.
+     * 
+     * @since S60 v3.0
+     * @param aParent Parent control.
+     * @param aFlags Flags.
+     * @param aTemplateLibrary Template library for drawer. 
+     * @return List box.
+     */
+    static CMmListBox* NewL( const CCoeControl* aParent, TInt aFlags,
+        CMmTemplateLibrary* aTemplateLibrary );
+    
+    /**
+     * Two-phased constructor.
+     * 
+     * @since S60 v3.0
+     * @param aParent Parent control.
+     * @param aFlags Flags.
+     * @param aTemplateLibrary Template library for drawer. 
+     * @return List box.
+     */
+    static CMmListBox* NewLC( const CCoeControl* aParent, TInt aFlags,
+        CMmTemplateLibrary* aTemplateLibrary );
+	
+    /**
+	 * Destructor.
+	 * 
+	 * @since S60 v3.0
+	 */
+	virtual ~CMmListBox();
+   
+	/**
+     * Gets the listbox model.
+     *
+     * @since S60 v3.0
+     * @return Listbox model.
+     */
+    CMmListBoxModel * MmModel(); 
+    
+    /**
+     * Sets the listbox model.
+     *
+     * @since S60 v3.0
+     * @param aMmModel The model to be set.
+     */
+    void SetMmModel( CMmListBoxModel* aMmModel );
+
+   /**
+    * Creates the view class instance.
+    *
+    * @since S60 v3.0
+    * @return Listbox view.
+    */
+   CListBoxView* MakeViewClassInstanceL();
+   
+   /** 
+    * Creates the item drawer for listbox.
+    * 
+    * @param aTemplateLibrary Template library for drawer. 
+    * @since S60 v3.0
+    */
+   void CreateItemDrawerL( CMmTemplateLibrary* aTemplateLibrary );
+   
+   /** 
+    * Sets the flag.
+    * 
+    * @since S60 v3.0
+    * @param aFlag Avkon list flag
+    */
+   void SetListFlag( TInt aFlag );
+   
+   /** 
+    * Clears the flag.
+    * 
+    * @since S60 v3.0
+    * @param aFlag Avkon list flag
+    */
+   void ClearListFlag( TInt aFlag );
+      
+
+public: // from base class CCoeControl.
+
+   /**
+    * From CCoeControl.     
+    * Handles pointer events.
+    * 
+    * @since S60 v3.0
+    * @param aPointerEvent Pointer event.
+    */
+   void HandlePointerEventL( const TPointerEvent& aPointerEvent ); 
+   
+   /**
+    * From base class.
+    *
+    * @since S60 v3.0
+    * @param aKeyEvent Key event.
+    * @param aType Event code.
+    */
+   TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, 
+           TEventCode aType );
+   
+   /**
+    * Adjusts the given rectangle.
+    *
+    * @since S60 v3.0
+    * @param aRect Rectangle to be adjusted.
+    * @return Error code.
+    */
+   TInt AdjustRectHeightToWholeNumberOfItems( TRect& aRect ) const;
+   
+   /**
+    * Sets item drawer and view background context.
+    *
+    * @since S60 v3.0
+    * @param aBgContext Background context.
+    */
+   void SetItemDrawerAndViewBgContext( 
+           CAknsBasicBackgroundControlContext * aBgContext );
+ 
+   /**
+    * Updates scrollbar.
+    *
+    * @since S60 v3.0
+    */
+   void UpdateScrollBarsL();
+   
+   /**
+    * Special version of Update scrollbar that never calls DrawNow()
+    */
+   void UpdateScrollBarsNoRedrawL();
+   
+   /**
+    * Checks if all items fit in view rectangle.
+    *
+    * @since S60 v3.0
+    * @return Do all items fit in view rectangle.
+    */
+   TBool AllItemsFitInViewRect();
+   
+   /**
+    * Handles scrollbar visibility change.
+    *
+    * @since S60 v3.0
+    * @return Is redraw needed.
+    */
+   TBool HandleScrollbarVisibilityChangeL();
+   
+   /**
+    * Sets marquee adapter.
+    *
+    * @since S60 v3.0
+    * @param aAdapter Marquee adapter.
+    */
+   void SetMarqueeAdapter( CMmMarqueeAdapter* aAdapter );
+   
+   /**
+    * Notifies that marquee is being drawn.
+    *
+    * @since S60 v3.0
+    * @param aIsMarqueeBeingDrawn Is marquee being drawn.
+    */
+   void SetMarqueeDrawing( TBool aIsMarqueeBeingDrawn );
+   
+   /**
+    * Handles item removal. redraws view, updates scrollbar.
+    *
+    * @since S60 v3.0
+    */
+   void HandleItemRemovalL();
+   
+   /**
+    * Redraws items in view if it is necessary.
+    *
+    * @since S60 v3.0
+    * @param aPreviousCurrent Previously current item index.
+    * @param aCurrent Current item index.
+    * 
+    * @return true if anything was drawn.
+    */
+	TBool RedrawIfNecessary( TInt aPreviousCurrent, TInt aCurrent );
+	
+	/**
+	 * Overridden from base class to allow for drawing scrollbar
+	 * background in mirrored layout.
+	 * 
+	 * @param aRect clipping rect
+	 */
+	void Draw(const TRect& aRect) const;
+	
+	/**
+     * Draws the listbox view.
+     *
+     * @since S60 v5.0
+     */
+	void DrawView();
+    
+    /**
+     * Set the vertical item offset;
+     * @param aOffset The offset to set to the widget.
+     * 
+     * @since S60 v5.0
+     */
+    void SetVerticalItemOffset( TInt aOffset );
+
+    /**
+     * Gets the current widget vertical item offset.
+     * 
+     * @since S60 v5.0
+     * @return The current widget vertical item offset.
+     */
+    TInt VerticalItemOffset() const;
+    
+    /**
+     * Simply sets the item height members in widget and view.
+     */
+    void SetItemHeight( TInt aItemHeight );
+    
+    /**
+     * Updates scrollbar thumbs.
+     */
+    void UpdateScrollBarThumbs();
+    
+    /**
+     * Counts the number of component controls which this component owns.
+     */ 
+    TInt CountComponentControls() const;
+    
+    /**
+     * Disables/enables child component (scrollbar) drawing.
+     */
+    void SetDisableChildComponentDrawing( TBool aDisable );
+    
+private:
+    /**
+     * Default constructor.
+     * 
+     * @since S60 v3.0
+     */
+	CMmListBox();
+	
+    /**
+     * 2nd phase constructor.
+     * 
+     * @since S60 v3.0
+     * @param aParent Parent control.
+     * @param aFlags Flags.
+     * @param aTemplateLibrary Template library for drawer. 
+     */
+	void ConstructL( const CCoeControl* aParent, TInt aFlags,
+        CMmTemplateLibrary* aTemplateLibrary );
+    
+    /**
+     * Handles pointer events when edit mode is enabled.
+     * 
+     * This method is only called during edit mode. It selectively passes
+     * only some of the pointer events to CAknGrid::HandlePointerEventL
+     * in order to disable flicking and panning.
+     * 
+     * @param aPointerEvent pointer event
+     */
+    void HandlePointerEventInEditModeL( const TPointerEvent& aPointerEvent );
+    
+    /**
+     * Scrolls the view if pointer is close to the top/bottom edge.
+     * 
+     * This method is used only when edit mode is active. In a way it
+     * brings back the focus based scrolling behavior that was present
+     * in CAknGrid before ODE scrolling was introduced.
+     */
+    void HandleScrollingInEditMode( const TPointerEvent& aPointerEvent );
+    
+    /**
+     * Checks if pointer position is within the scroll-triggering area.
+     * 
+     * @param aPointerEvent pointer event
+     * @return true if pointer above the top scrolling threshold.
+     */
+    TBool IsPointerInTopScrollingThreshold(
+            const TPointerEvent& aPointerEvent ) const;
+
+    /**
+     * Checks if pointer position is within the scroll-triggering area.
+     * 
+     * @param aPointerEvent pointer event
+     * @return true if pointer below the bottom scrolling threshold.
+     */
+    TBool IsPointerInBottomScrollingThreshold(
+            const TPointerEvent& aPointerEvent ) const;
+    
+    /**
+     * Scrolls the view if the pointer is near top/bottom edge of the screen.
+     * 
+     * Assumes that current item index is the index of the item under the
+     * pointer. The time value returned is based on the distance of the pointer
+     * from the top/bottom edge of the grid view (this makes the scrolling speed
+     * dependent of how close the pointer is to the edge).
+     * If there is no need to continue scrolling because the beginning/end of
+     * the list has already been reached, 0 is returned.
+     * 
+     * @param aPointerEvent pointer event
+     * @return time to wait before calling this method again (in microseconds)
+     *         or 0 if already at the beginning/end of the list
+     */
+    TInt ScrollIfNeeded( const TPointerEvent& aPointerEvent );
+    
+    /**
+     * Ensures that elements are drawn correctly when mirrored layout is
+     * used and scrollbar is visible by shifting ViewRect to the right.
+     */
+    void FixViewForMirroredLayout();
+    
+    /**
+     * Redraws the background under the vertical scrollbar in mirrored layout.
+     * 
+     * The reason such method is needed is that view rectangle is shifted
+     * to the right in mirrored layout and does not cover the scrollbar
+     * area. In normal (non-mirrored) mode this method does nothing.
+     */
+    void RedrawScrollbarBackground() const;
+    
+private: // Data
+    /**
+     * Item drawer.
+     */
+    CMmListBoxItemDrawer* iMmDrawer;
+    
+    /**
+     * Multimedia Menu model.
+     */
+	CMmListBoxModel* iMmModel;
+
+    /**
+     * marquee adapter.
+     */
+	CMmMarqueeAdapter* iMarqueeAdapter;
+
+    /**
+     * Blocks scrollbar drawing. When this flag is set scrollbars components
+     * are blocked in the CountComponentControls() method;   
+     */
+	TBool iDisableChildComponentDrawing;
+	};
+	
+#endif // MMLISTBOX_H