diff -r 000000000000 -r 2f259fa3e83a uifw/EikStd/coctlinc/aknstyluspopupmenucontent.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/EikStd/coctlinc/aknstyluspopupmenucontent.h Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,360 @@ +/* +* Copyright (c) 2005-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: Content that is shown inside a stylus popup menu. +* +*/ + + +#ifndef CAKNSTYLUSPOPUPMENUCONTENT_H +#define CAKNSTYLUSPOPUPMENUCONTENT_H + +#include +#include + +class CAknStylusPopUpMenuItem; +class CAknStylusPopUpMenuExtension; +class CAknStylusPopUpMenuPhysicsHandler; + +/** + * Class providing content for the stylus popup menu. + * + * @lib eikcoctl.lib + * @since S60 v5.0 + */ +NONSHARABLE_CLASS( CAknStylusPopUpMenuContent ) : public CAknControl, + public MCoeForegroundObserver, + public MEikScrollBarObserver + + { +private: + enum THighlightType { ENoHighlight, EDrawHighlight, ERemoveHighlight }; + enum TScrollType { ENoScroll, EScrollUp, EScrollDown }; + +public: + + static CAknStylusPopUpMenuContent* NewL( CAknStylusPopUpMenu& aPopUpMenu ); + + static CAknStylusPopUpMenuContent* NewLC( CAknStylusPopUpMenu& aPopUpMenu ); + + ~CAknStylusPopUpMenuContent(); + + /** + * Adds a new menu item. + * + * @param aItem Menu item to be added. + * @param aCommandId Command ID of the menu item. + */ + void AddMenuItemL( const TDesC& aItem, const TInt aCommandId ); + + /** + * Removes a menu item. + * + * @param aIndex Index of the menu item. + */ + void RemoveMenuItem( const TInt aIndex ); + + /** + * Hides / shows a menu item. + * + * @param aIndex Index of the menu item. + * @param aDimmed ETrue to hide and EFalse to show + */ + void SetItemDimmed( const TInt aIndex, const TBool aDimmed ); + + /** + * Method to get the command id of currently selected item. + * + * @return Command id. + */ + TInt CurrentCommandId() const; + + /** + * Draws highlight again when animation frame is ready. Called by + * extension. + */ + void RepaintHighlight() const; + + /** + * Returns current item's rect + * @return current item's highlightrect + */ + TRect HighlightRect() const; + + /** + * Removes all items. + */ + void Clear(); + +// from base class CCoeControl + + /** + * Returns the minimum size of the control. + * + * @return Minimum size. + */ + TSize MinimumSize(); + + /** + * Handles changes to the control's resources. + * + * @aParam aType Type of resource change. + */ + void HandleResourceChange( TInt aType ); + + /** + * Handles pointer events. + * + * @param aPointerEvent The pointer event. + */ + void HandlePointerEventL( const TPointerEvent& aPointerEvent ); + + /** + * Makes item visible or hides it + * + * @param aVisible if to be shown + */ + void MakeVisible( TBool aVisible ); + + /** + * Gets the number of controls contained in a compound control. + * + * @return The number of component controls contained by this control. + */ + TInt CountComponentControls() const; + + /** + * Gets the specified component of a compound control. + * + * @param aIndex The index of the control to get + * @return The component control with an index of aIndex. + */ + CCoeControl* ComponentControl( TInt aIndex ) const; + + +// from base class MCoeControlObserver + + /** + * Not used, but implementation is required by + * MCoeForegroundObserver + */ + void HandleGainingForeground(); + + /** + * When foreground is lost, stylus popupmenu is closed, + * TSW Error AJUA-79ELVM. + */ + void HandleLosingForeground(); + + + // Functions related to Physics handling + +public: + + /** + * Updates view so that aTopmostItem is topmost item. + * Uses also offset from physics handler to locate view smoothly. + * + * @aParam aTopmostItem Topmost item + */ + void UpdateView( TInt aTopmostItem ); + + /** + * Returns index of item that contains given position. + * + * @return index of item that contains given position + */ + TInt ContainingItem( const TPoint& aPosition ); + + /** + * Sets highlight to given item + * + * @aParam aItem Item to be highlight + */ + void SetHighlight( TInt aItem ); + + /** + * Return currently highlighted item's index. + * + * @return Highlighted item's index or -1 if no item has highlight. + */ + TInt CurrentItem() const; + + /** + * Selects given item + * + * @aParam aItem Item to be selected + */ + void SelectItem( TInt aItem ); + +private: + + /** + * Initializes physics. + */ + void InitPhysicsL(); + + /** + * Returns offset. Used to draw partial items. + * + * @return offset + */ + TInt Offset() const; + + /** + * Returns height of whole list content (excluding hidden items). + * + * @return world height + */ + TInt WorldHeight() const; + +private: + + /** + * Default constructor + */ + CAknStylusPopUpMenuContent( CAknStylusPopUpMenu& aPopUpMenu ); + + /** + * 2nd phase constructor + */ + void ConstructL(); + + /** + * Moves the highlight to a newly selected menu item identified + * by @c aNewSelectedItem. Redraws only the newly selected item and the currently + * selected item if possible. + * + * @param aNewSelectedItem The newly selected menu item index. + */ + void MoveHighlightTo( TInt aNewSelectedItem ); + + /** + * Draws items. Draws higlight for the items + * + * @param aGc The graphics context + * @param aItem the item for which the highlight is drawn + * @param aHighlight if the item has highlight or not + */ + void DrawItem( CWindowGc& aGc, TInt aItem, THighlightType aHighlight ) const; + + /** + * Starts highlight animation + * + * @return KErrNone if successful, error code if not + */ + TInt StartAnimation(); + + /** + * Updates scroll bar + */ + void UpdateScrollBar(); + + /** + * Calculates which items are shown and sets rects for them + * + * @param aScroll TScrollType type of scroll + * @return Index of the last shown item + */ + TInt CalculateShownItems( TScrollType aScroll ); + + +// from base class CCoeControl + + /** + * Sets new rect for the items + */ + void SizeChanged(); + + /** + * Draw a control called by window server. + * + * @param aRect The region of the control to be redrawn. + * Co-ordinates are relative to the control's origin (top left corner). + */ + void Draw( const TRect& aRect ) const; + + + /** + * Get's list rect from layout data + * + * @param aParent The region of the parent control + * @param aLineLayout The component which to get from layout data + * + * @return list rect + */ + TRect ListRectFromLayout( const TRect& aParent, + const TAknWindowLineLayout& aLineLayout ) const; + + /** + * Get's rect from layout data according to layout data + * + * @param aParent The region of the parent control + * @param aParent The component which to get from layout data + * + * @return layout rect + */ + TRect RectFromLayout( const TRect& aParent, + const TAknWindowLineLayout& aLineLayout ) const; + + +// from MEikScrollBarObserver + + /** + * Handles events from scrollbar + * + * @param aScrollBar Pointer to scrollbar + * @param aEventType Scrollbar event + */ + void HandleScrollEventL(CEikScrollBar* aScrollBar,TEikScrollEvent aEventType); + +private: // data + + /** + * Array which holds pointers to menu items. + */ + RPointerArray iItems; + + /** + * Current item + */ + TInt iCurrentItem; + + /** + * Stylus PopUp menu extension which handles highlight animation + * own + */ + CAknStylusPopUpMenuExtension* iExtension; + + /** + * The scroll bar used by this control + * own + */ + CEikScrollBarFrame* iSBFrame; + + /** + * First visible item on the list + */ + TInt iFirstItem; + + CAknStylusPopUpMenu& iPopUpMenu; + + /** + * Physics handler. + * own. + */ + CAknStylusPopUpMenuPhysicsHandler* iPhysicsHandler; + }; + +#endif // CAKNSTYLUSPOPUPMENUCONTENT_H +