--- /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 <AknControl.h>
+#include <aknstyluspopupmenu.h>
+
+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<CAknStylusPopUpMenuItem> 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
+