--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/classicui_plat/ganes_api/inc/ganes/HgScroller.h Wed Sep 01 12:16:19 2010 +0100
@@ -0,0 +1,523 @@
+/*
+* 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:
+*
+*/
+
+
+#ifndef HGSCROLLER_H_
+#define HGSCROLLER_H_
+
+// INCLUDES
+#include <coecntrl.h>
+#include <coemain.h>
+
+#include <aknphysicsobserveriface.h>
+#include <aknlongtapdetector.h>
+#include <akncollection.h>
+#include <ganes/HgBufferOwnerIface.h>
+#include <ganes/HgScrollbarObserverIface.h>
+
+// FORWARD DECLARATIONS
+class CAknPhysics;
+class MHgScrollBufferObserver;
+class MHgSelectionObserver;
+class MHgMarkingObserver;
+class CHgItem;
+class CHgScrollbar;
+class CGulIcon;
+class CHgScrollBufferManager;
+class THgPopupDrawer;
+class CHgIndicatorManager;
+class CHgDrawUtils;
+class CHgKeyUtils;
+class CHgTextFind;
+class CAknItemActionMenu;
+class CFont;
+
+// CLASS DECLARATION
+class CHgScroller :
+ public CCoeControl,
+ public MHgBufferOwner,
+ public MHgScrollbarObserver,
+ public MCoeForegroundObserver,
+ public MAknPhysicsObserver,
+ public MAknLongTapDetectorCallBack,
+ public MAknCollection
+ {
+public:
+
+ // Flags that define possible scroller modes
+ enum THgScrollerMode
+ {
+ EHgScrollerSelectionMode = 0x0001,
+ EHgScrollerSearchWithQWERTY = 0x0002,
+ EHgScrollerKeyMarkingDisabled = 0x0004,
+ EHgScrollerScreenFreeze = 0x0008,
+ EHgScrollerForceDoubleClick = 0x0010,
+ EHgScrollerFlatStatusPane = 0x0020
+ };
+
+ // Scrollbar types
+ enum THgScrollBarType
+ {
+ EHgScrollerScrollBar = 0,
+ EHgScrollerLetterStrip,
+ EHgScrollerTimeStrip,
+ EHgScrollerLetterStripLite
+ };
+
+public: // Destructor.
+ IMPORT_C virtual ~CHgScroller();
+
+public: // CCoeControl
+ void Draw(const TRect& aRect ) const;
+ void SizeChanged();
+ void HandlePointerEventL( const TPointerEvent& aEvent );
+ TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+ virtual TCoeInputCapabilities InputCapabilities() const;
+ virtual void FocusChanged(TDrawNow aDrawNow);
+ virtual void HandleResourceChange(TInt aType);
+
+protected: // MAknPhysicsObserver
+ void ViewPositionChanged( const TPoint& aNewPosition,
+ TBool aDrawNow,
+ TUint aFlags );
+ void PhysicEmulationEnded();
+ TPoint ViewPosition() const;
+
+private: // MHgBufferOwner
+ void Release(TInt aReleaseStart, TInt aReleaseEnd);
+
+private: // MHgScrollbarObserver
+ void ScrollBarPositionChanged( const TPoint& aNewPosition );
+ void HandleNaviStripChar( const TChar& aChar );
+
+protected: // MAknLongTapDetectorCallBack
+ void HandleLongTapEventL( const TPoint& aPenEventLocation,
+ const TPoint& aPenEventScreenLocation);
+
+protected: // MAknCollection
+ TUint CollectionState() const;
+ void ItemActionMenuClosed();
+ TInt CollectionExtension( TUint aExtensionId, TAny*& a0, TAny* a1 );
+
+public: // NEW FUNCTIONS
+ /**
+ * Re-inits the grid display area. DSA version.
+ *
+ * @param aRect New display rect
+ * @param aSession Window server session for DSA
+ */
+ IMPORT_C void InitScreenL( const TRect& aRect, RWsSession& aSession );
+
+ /**
+ * Re-inits the grid display area. Non-DSA version.
+ *
+ * @param aRect New display rect
+ */
+ IMPORT_C void InitScreenL( const TRect& aRect );
+
+ /**
+ * Refreshes screen.
+ * @param aIndex Index that was modified.
+ */
+ IMPORT_C void RefreshScreen( TInt aIndex );
+
+ /**
+ * Gives the first index on the screen.
+ *
+ * Note: The index is not guaranteed to be in the range of the scroller items.
+ * Index can be negative if the scroller is scrolled to the way up or
+ * over the count - 1 if scrolled way down.
+ *
+ * @return The index of the first item on the screen.
+ */
+ IMPORT_C TInt FirstIndexOnScreen();
+
+ /**
+ * Sets the first index on the screen.
+ *
+ * @param aFirstIndexOnScreen The index of the first item on the screen.
+ */
+ IMPORT_C void SetFirstIndexOnScreen( TInt aFirstIndexOnScreen );
+
+ /**
+ * How many items fit on one screen.
+ * @return Item count.
+ */
+ IMPORT_C TInt ItemsOnScreen();
+
+ /**
+ * Get item at specified index.
+ *
+ * @param aIndex Index of the item that is returned
+ * @return Reference to item.
+ */
+ IMPORT_C CHgItem& ItemL( TInt aIndex );
+
+ /**
+ * Resets item at the index position. Old item is deleted.
+ *
+ * @param aItem New item. Ownership transferred.
+ * @param aIndex The index of the item.
+ */
+ IMPORT_C void SetItem(CHgItem* aItem, TInt aIndex);
+
+ /**
+ * Adds Item.
+ *
+ * @param aItem New item. Ownership transferred.
+ */
+ IMPORT_C void AddItem(CHgItem* aItem);
+
+ /**
+ * Inserts item at index postion.
+ *
+ * @param aItem New item. Ownership transferred.
+ * @param aIndex The index of the item.
+ */
+ IMPORT_C void InsertItem(CHgItem* aItem, TInt aIndex);
+
+ /**
+ * Removes item at index position. Removed item is deleted.
+ *
+ * @param aIndex The index of the item.
+ */
+ IMPORT_C void RemoveItem(TInt aIndex);
+
+ /**
+ * @return Selected index (KErrNotFound if nothing is selected)
+ */
+ IMPORT_C TInt SelectedIndex();
+
+ /**
+ * Sets selected index.
+ * @param aIndex new selected index. Selection is also made visible.
+ */
+ IMPORT_C void SetSelectedIndex( TInt aIndex );
+
+ /**
+ * Marks item at index position.
+ * @param aIndex Index of the item that is marked.
+ */
+ IMPORT_C void Mark( TInt aIndex );
+
+ /**
+ * Unmarks item at index position.
+ * @param aIndex Index of the item that is unmarked.
+ */
+ IMPORT_C void UnMark( TInt aIndex );
+
+ /**
+ * Marks all items.
+ */
+ IMPORT_C void MarkAll();
+
+ /**
+ * Unmarks all items.
+ */
+ IMPORT_C void UnMarkAll();
+
+ /**
+ * Gets all marked item indexes.
+ * @param aIndexes On return contains the indexes of marked items.
+ */
+ IMPORT_C void GetMarkedItemsL( RArray<TInt>& aIndexes );
+
+ /**
+ * Enables Buffering.
+ * @param aObserver Buffer change observer.
+ * @param aBufferSize The size of the buffer.
+ * @param aBufferTreshold The minimum change needed for buffer to be modified.
+ */
+ IMPORT_C void EnableScrollBufferL( MHgScrollBufferObserver& aObserver,
+ TInt aBufferSize,
+ TInt aBufferTreshold );
+
+ /**
+ * Sets selection observer.
+ * @param aObserver Selection observer.
+ */
+ IMPORT_C void SetSelectionObserver( MHgSelectionObserver& aObserver );
+
+ /**
+ * Sets marking observer.
+ * @param aObserver marking observer.
+ */
+ IMPORT_C void SetMarkingObserver( MHgMarkingObserver& aObserver );
+
+ /**
+ * Removes all items and presents empty text
+ * */
+ IMPORT_C void Reset();
+
+ /**
+ * Resizes Grid/List.
+ * @param aItemCount New Count of items.
+ */
+ IMPORT_C void ResizeL( TInt aItemCount );
+
+ /**
+ * Set text that is displayed when there are no items in the view.
+ * @param aEmptyText Empty text.
+ */
+ IMPORT_C void SetEmptyTextL( const TDesC& aEmptyText );
+
+ /**
+ * Fetch item count.
+ * @return Total number of items.
+ */
+ IMPORT_C TInt ItemCount() const;
+
+ /**
+ * Set scrollbar type.
+ * @param aType ScrollBar type
+ */
+ IMPORT_C void SetScrollBarTypeL( THgScrollBarType aType );
+
+ /**
+ * Set mode flags. Possible values are defined in THgScrollerMode.
+ * @param aFlags flags to bet set.
+ */
+ IMPORT_C void SetFlags( TInt aFlags );
+
+ /**
+ * Clear mode flags. Possible values are defined in THgScrollerMode.
+ * @param aFlags flags to be cleared.
+ */
+ IMPORT_C void ClearFlags( TInt aFlags );
+
+ /**
+ * Get flags. Possible values are defined in THgScrollerMode.
+ * @return Current flags.
+ */
+ IMPORT_C TInt Flags();
+
+ /**
+ * Highlights item based on the descriptor given.
+ * @param aHighlightText Text to be searched.
+ * @return Was aHighlightText found.
+ */
+ IMPORT_C TBool HightlightItem( const TDesC& aHighlightText );
+
+ /**
+ * Sets new default icon.
+ * @param aDefaultIcon New default icon to be used in scroller.
+ */
+ IMPORT_C void SetDefaultIconL( CGulIcon* aDefaultIcon );
+
+ /**
+ * Disables Scrollbuffer.
+ */
+ IMPORT_C void DisableScrollBuffer();
+
+ /**
+ *
+ */
+ IMPORT_C void SetMenuProviderL( MObjectProvider* aMenuProvider );
+
+ // Selection modes. Used in internal key marking implemention.
+ enum TSelectionMode
+ {
+ ENoSelection = 0,
+ ESelectionPossible,
+ ESelectionMark,
+ ESelectionUnMark
+ };
+
+ /**
+ * Set selection mode. Used in internal key marking implemention.
+ * @param aMode New selection mode.
+ */
+ void SetSelectionMode( TSelectionMode aMode );
+
+ /**
+ * Get current selection mode. Used in internal key marking implemention.
+ * @return Current selection mode.
+ */
+ TSelectionMode SelectionMode() const;
+
+protected: // Pure Virtual Functions
+ virtual TInt GetSelected( TPoint aPosition ) const = 0;
+ virtual void HandleSizeChanged() = 0;
+ virtual void InitItemsL() = 0;
+ virtual TSize TotalSize() const = 0;
+ virtual void DoDraw( const TRect& aRect ) const = 0;
+ virtual TBool DoHandleKeyEvent( const TKeyEvent& aKeyEvent ) = 0;
+ virtual void FitSelectionToView() = 0;
+ virtual TInt CurrentIndex() = 0;
+ virtual TBool IsDisplayed( TInt aIndex ) = 0;
+ virtual void FitTopItemToView( TInt aIndex ) = 0;
+ virtual void HandleScrollbarVisibilityChange(TBool aVisible) = 0;
+
+protected: // Constructors
+ CHgScroller( TInt aItemCount,
+ CGulIcon* aDefaultIcon );
+
+ void ConstructL (const TRect& aRect, RWsSession* aSession );
+
+protected:
+ void InitPhysicsL();
+ virtual void HandleViewPositionChanged( TBool aUpdateScrollbar = ETrue );
+ void InitDrawBuffer() const;
+ void SelectionChanged();
+ void FitRowToView( TInt aRow );
+ TBool HasHighlight() const;
+ static TInt MarqueeCallback( TAny* aSelf );
+
+private:
+ TKeyResponse HandleKeyEvent(const TKeyEvent& aKeyEvent);
+
+ void HandleItemCountChanged();
+ void HandleSelectionL();
+
+ TBool HandleScrollbarEventL( const TPointerEvent& aEvent );
+ void HandleDownEventL( const TPointerEvent& aEvent );
+ void HandleDragEventL( const TPointerEvent& aEvent );
+ void HandleUpEventL( const TPointerEvent& aEvent );
+
+ void KeyEventDown();
+ void KeyEventUp();
+
+ void InitGraphicsL();
+ void InitScrollbarL();
+
+ void HandleGainingForeground();
+ void HandleLosingForeground();
+
+ /**
+ * Launches the highlight timer.
+ */
+ void LaunchHighlightTimer();
+
+ /**
+ * Callback method for highlight timer.
+ *
+ * @param aPtr Pointer to an instance of CHgScroller class.
+ *
+ * @return System wide error code.
+ */
+ static TInt HighlightTimerCallback( TAny* aPtr );
+
+ /**
+ * Sets highlight to focused item.
+ */
+ void SetHighlightL();
+
+ /**
+ * Callback method for key scrolling timer.
+ *
+ * @param aPtr Pointer to an instance of CHgScroller class.
+ *
+ * @return System wide error code.
+ */
+ static TInt KeyScrollingTimerCallback( TAny* aPtr );
+
+ /**
+ * Move view based on key scolling mode.
+ */
+ void DoKeyScrolling();
+
+ /**
+ * Sets item highlight and stops the scrolling timer.
+ */
+ void StopKeyScrolling();
+
+ void ReleasePopupFont();
+
+protected:
+ CAknPhysics* iPhysics; // Physics engine. Own
+ CHgScrollBufferManager* iManager; // Own
+ CHgScrollbar* iScrollbar; // Scrollbar. Own
+ CHgIndicatorManager* iIndicatorManager; // Utility for drawing indicators. Own
+ CHgDrawUtils* iDrawUtils; // Drawing utility. Own
+ CHgTextFind* iTextFind; // Text find utility to communicate with FEP. Own
+ CAknLongTapDetector* iDetector; // Longtap detector for single click. Own
+ CAknItemActionMenu* iActionMenu; // Item action menu for single click. Not Own
+ CFont* iPopupFont; // font to be used with popup drawer
+
+ // Observers
+ MHgSelectionObserver* iSelectionObserver; // Not Own
+ MHgMarkingObserver* iMarkingObserver; // Not Own
+
+ // Arrays
+ RPointerArray<CHgItem> iItems; // Items
+
+ // For dragging
+ TPoint iStart; // Drag start position
+ TTime iStartTime; // Drag start time
+ TPoint iPrev; // Previous pointer event position.
+
+ // The Rest.
+ CGulIcon* iDefaultIcon; // Default item icon
+
+ TPoint iViewPosition; // Current view position
+
+ TBool iLandscapeScrolling; // Scrolling landscape?
+
+ TInt iWidth; // The width of the view
+ TInt iHeight; // The height of the view
+ TInt iRowHeight; // Row height (square images)
+ TInt iItemCount; // Total number of items
+ TInt iItemsOnScreen;
+
+ TInt iCurrentRow; // The number of the first row that is drawn
+ TInt iSelectedIndex; // The index of the selected item
+
+ TInt iKeyRepeats; // How many key repeasts have been received
+
+ TSize iImageSize; // Image Size
+ TSize iIndicatorSize; // Size of the indicator in list or grid
+
+ enum TKeyScrollingState
+ {
+ ENoKeyScrolling = 0,
+ EKeyScrollingUp,
+ EKeyScrollingDown,
+ EKeyScrollingLeft,
+ EKeyScrollingRight
+ } iKeyScrollingState; // State of the key scrolling
+
+ TInt iFlags; // Possible mode flags
+
+ HBufC* iEmptyText; // text for empty list or grid.
+
+ THgPopupDrawer* iPopupDrawer;
+ TBool iPanning;
+ TBool iShowHighlight;
+
+ THgScrollBarType iScrollBarType; // Scrollbar type
+
+ RBuf iUpperCaseTitle; // Used in search for uppercase conversion
+ RBuf iPopupText1;
+ RBuf iPopupText2;
+
+ TBool iResetViewPosition; // ETrue on the first time run, and when iViewPosition must be reset.
+ TBool iPointerDown;
+
+ CPeriodic* iHighlightTimer; // Higlight timer, own.
+ TBool iSelectionToFocusedItem; // Is focused item clicked
+ TInt iFocusedIndex; // highlight timer updates this value
+
+ CHgKeyUtils* iKeyUtils; // MSK key handler, own
+
+ TSelectionMode iSelectionMode;
+
+ CPeriodic* iKeyScrollingTimer; // Timer for key scrolling, own.
+ TInt iOldWinPos;
+
+ };
+
+#endif /*HGSCROLLER_H_*/