diff -r 000000000000 -r f72a12da539e menufw/menufwui/mmwidgets/inc/mmlistbox.h --- /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 +#include +#include +#include + +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