--- a/classicui_plat/ganes_api/inc/ganes/HgVgMediaWall.h Thu Jul 29 14:21:56 2010 +0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,781 +0,0 @@
-/*
-* 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 HGVGMEDIAWALL_H_
-#define HGVGMEDIAWALL_H_
-
-// INCLUDES
-#include <coecntrl.h>
-#include <coemain.h>
-#include <EGL/egl.h>
-#include <VG/openvg.h>
-#include <ganes/HgBufferOwnerIface.h>
-#include <ganes/HgScrollbarObserverIface.h>
-#include <akntouchgesturefw.h>
-
-// FORWARD DECLARATIONS
-class MHgScrollBufferObserver;
-class MHgSelectionObserver;
-class CHgVgItem;
-class CGulIcon;
-class CHgScrollBufferManager;
-class CHgVgScrollBar;
-class CHgVgMediaWallRenderer;
-class CHgVgSkinRenderer;
-class CHgVgTimer;
-class CHgVgPopup;
-class CHgVgButton;
-class MHgVgMediaWallObserver;
-class CHgVgLabel;
-class CHgVgEGL;
-class THgVgSpring;
-class CAlfCompositionSource;
-class CFbsBitmap;
-
-// CLASS DECLARATION
-class CHgVgMediaWall :
- public CCoeControl,
- public MHgBufferOwner,
- public MHgScrollbarObserver,
- public MCoeForegroundObserver,
- public AknTouchGestureFw::MAknTouchGestureFwObserver
- {
-public:
-
- /**
- * Style of the media wall to use.
- */
- enum THgVgMediaWallStyle
- {
- EHgVgMediaWallStyleCoverflowFullScreen,
- EHgVgMediaWallStyleCoverflowTBonePortrait,
- EHgVgMediaWallStyleCoverflowTBoneLandscape,
- EHgVgMediaWallStyleGrid,
- EHgVgMediaWallStyleUnknown
- };
-
- /**
- * Media walls current animation state.
- */
- enum THgVgAnimationState
- {
- EHgVgMediaWallAnimationStateIdle,
- EHgVgMediaWallAnimationStateTransition,
- EHgVgMediaWallAnimationStateFastTransition,
- EHgVgMediaWallAnimationStateOpening,
- EHgVgMediaWallAnimationStateClosing,
- EHgVgMediaWallAnimationStateItemOpened
- };
-
- /**
- * Media walls selection animation type.
- * Default behaviour is EHgSelectionAnimationFlipToFront.
- */
- enum THgVgOpeningAnimationType
- {
- EHgVgOpeningAnimationNone, // no animation takes place when item is tapped
- EHgVgOpeningAnimationFlipToFront, // flips the opened item by flip angle and fits to set opened item rect.
- EHgVgOpeningAnimationZoomToFront, // zooms the opened item to set opened item rect.
- EHgVgOpeningAnimationZoomIn // zooms the item to the back of the camera.
- };
-
- /**
- * Event types, CHgVgMediaWall may send through MHgVgMediaWallObserver interface.
- */
- enum THgVgMediaWallEvent
- {
- EHgVgMediaWallEventRequestHideSoftkeys,
- EHgVgMediaWallEventRequestShowSoftkeys
- };
-
- /**
- * Flags that define possible mediawall modes
- */
- enum THgVgMediaWallMode
- {
- EHgVgMediaWallDrawToWindowGC = 0x0001
- };
-
-public:
-
- /**
- * Creates new HgVgMediaWall.
- *
- * @param aRect Rect that the control draws onto.
- * @param aItemCount Total count of items in the mediawall.
- * @param aStyle style of the mediawall.
- * @param aEnableScrollBar ETrue to enable scrollbar.
- * @param aDefaultIcon Default icon to be used.
- *
- * @return HgVGMediaWall-object
- */
- IMPORT_C static CHgVgMediaWall* NewL ( const TRect& aRect,
- TInt aItemCount,
- THgVgMediaWallStyle aStyle,
- TBool aEnableScrollBar,
- MObjectProvider* aParent,
- CGulIcon* aDefaultIcon = NULL);
-
- // Destructor.
- IMPORT_C virtual ~CHgVgMediaWall();
-
-public: // CCoeControl
-
- void Draw(const TRect& aRect ) const;
- void SizeChanged();
- void HandlePointerEventL( const TPointerEvent& aEvent );
- TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
- void FocusChanged(TDrawNow aDrawNow);
- void HandleResourceChange(TInt aType);
-
-private: // MHgBufferOwner
- void Release(TInt aReleaseStart, TInt aReleaseEnd);
-
-private: // MHgScrollbarObserver
-
- void ScrollBarPositionChanged( const TPoint& aNewPosition );
-
- void HandleNaviStripChar( const TChar& aChar );
-
-public: //MCoeForegroundObserver
- void HandleGainingForeground();
- void HandleLosingForeground();
-
-private: // MAknTouchGestureFwObserver
-
- void HandleTouchGestureL( AknTouchGestureFw::MAknTouchGestureFwEvent& aEvent );
-
-public: // NEW FUNCTIONS
- /**
- * Re-inits rendering for new window rectangle.
- *
- * @param aRect New display rect
- */
- IMPORT_C void InitScreenL( const TRect& aRect );
-
- /**
- * Refreshes screen.
- */
- 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();
-
- /**
- * 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 CHgVgItem& 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(CHgVgItem* aItem, TInt aIndex);
-
- /**
- * Adds Item.
- *
- * @param aItem New item. Ownership transferred.
- */
- IMPORT_C void AddItem(CHgVgItem* aItem);
-
- /**
- * Inserts item at index postion.
- *
- * @param aItem New item. Ownership transferred.
- * @param aIndex The index of the item.
- */
- IMPORT_C void InsertItem(CHgVgItem* 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);
-
- /**
- * Returns index of currently selected item in MediaWall.
- * In the case of EHgVgMediaWallStyleStyleGrid this method can only
- * return indices of the items at top row. The index of the item picked
- * by user is on grids case only passed through MHgSelectionObserver interface.
- *
- * @return Selected index (KErrNotFound if nothing is selected)
- */
- IMPORT_C TInt SelectedIndex();
-
- /**
- * Sets selected index. Positions the mediwall into this index.
- * In case of a grid. The mediawall is positioned into row = aIndex / RowCount.
- * @param aIndex new selected index. Selection is also made visible.
- */
- IMPORT_C void SetSelectedIndex( TInt aIndex );
-
- /**
- * 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 );
-
- /**
- * 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;
-
- /**
- * 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();
-
- /**
- * Changes mediawalls style.
- *
- * @param aStyle style.
- * @param aRect new window rectangle.
- * @param aReuseSurface flag to indicate whether or not OpenVG surface should be reconstructed.
- */
- IMPORT_C void ChangeStyleL( THgVgMediaWallStyle aStyle, const TRect& aRect, TBool aReuseSurface );
-
- /**
- * Sets button observer. Client can use this to register it self to be
- * notified when the user for example, presses hide softkeys button.
- *
- * @param aObserver observer.
- */
- IMPORT_C void SetObserver(MHgVgMediaWallObserver* aObserver);
-
- /**
- * Sets type of selection animation to perform, when an item
- * is opened.
- * Default behaviour is EHgSelectionAnimationFlipToFront.
- *
- * @param aType type of opening animation.
- */
- IMPORT_C void SetOpeningAnimationType(THgVgOpeningAnimationType aType);
-
- /**
- * Gets current MediaWall style.
- *
- * @return THgVgMediaWallStyle.
- */
- IMPORT_C THgVgMediaWallStyle Style() const;
-
- /**
- * Gets current opening animation type
- *
- * @return THgVgOpeningAnimationType.
- */
- IMPORT_C THgVgOpeningAnimationType OpeningAnimationType() const;
-
- /**
- * Starts opening animation to selected direction. After animation is complete,
- * Open event is sent to selection observer.
- *
- * @param aOpening if this is true, the selected item is opened, otherwise closed.
- */
- IMPORT_C void StartOpeningAnimationL(TBool aOpening);
-
- /**
- * Set mode flags. Possible values are defined in THgVgMediaWallMode.
- * @param aFlags flags to bet set.
- */
- IMPORT_C void SetFlags( TInt aFlags );
-
- /**
- * Clear mode flags. Possible values are defined in THgVgMediaWallMode.
- * @param aFlags flags to be cleared.
- */
- IMPORT_C void ClearFlags( TInt aFlags );
-
- /**
- * Get flags. Possible values are defined in THgVgMediaWallMode.
- * @return Current flags.
- */
- IMPORT_C TInt Flags();
-
- /**
- * Sets item at index as selected and opened item. HandleOpenL not called for observers.
- * If index is out of range, does nothing. Using this function sets item at index
- * to the state where it is when it was selected and opened by the user.
- * One can use for example. StartOpeningAnimationL to togle animation backwards from
- * this state to normal. This can be useful for example. when returning from a
- * a different view and there is a need to pop the item back to the wall from front.
- *
- * @param aIndex of the item to open.
- */
- IMPORT_C void SetItemToOpenedState(TInt aIndex);
-
- /**
- * Sets the rectangle where item fit at the end of opening animation.
- *
- * @param aRect target rectangle where opened item is fitted at the end of opening animation.
- */
- IMPORT_C void SetOpenedItemRect(const TRect& aRect);
-
-protected: // Constructors
-
- CHgVgMediaWall( TInt aItemCount,
- CGulIcon* aDefaultIcon, THgVgMediaWallStyle aStyle,
- TBool aEnableScrollBar );
-
- void ConstructL (const TRect& aRect, MObjectProvider* aParent );
-
-private:
-
- /**
- * Handles viewposition change.
- */
- void HandleViewPositionChanged(TBool aDontUpdateObserver=EFalse);
-
- /**
- * Initializes items.
- */
- void InitItemsL();
-
-
- /**
- *
- */
- void HandleKeyDown();
-
- /**
- * Handles key events.
- *
- * @param aKeyEvent TKeyEvent-object.
- */
- TKeyResponse HandleKeyEvent(const TKeyEvent& aKeyEvent);
-
- /**
- *
- */
- void HandleKeyUp();
-
- /**
- *
- */
- void StopKeyScrolling();
-
- /**
- *
- */
- void DoKeyScrolling();
-
- /**
- *
- */
- static TInt KeyScrollingTimerCallback( TAny* aPtr );
-
- /**
- * Handles items count change.
- */
- void HandleItemCountChanged();
-
- /**
- * Initializes default icon and
- * creates VGImage for it.
- */
- void InitDefaultIconL();
-
- /**
- * Draws using OpenVG
- */
- void DrawOpenVG() const;
-
- /**
- * Called by callback to do actual animation.
- */
- void DoAnimation();
-
- /**
- * Does transition animation, called by DoAnimation.
- */
- void DoTransitionAnimation();
-
- /**
- * Does selection animation
- */
- void DoSelectionAnimation();
-
- /**
- * Callback method for animation
- *
- * @param aPtr Pointer to an instance of CHgVgMediaWall class.
- *
- * @return System wide error code.
- */
- static TInt AnimationTimerCallback( TAny* aPtr );
-
- /**
- * Updates bitmaps used to render album and artist titles.
- */
- void UpdateLabelsAndPopup();
-
- /**
- * Draws album and artist titles.
- */
- void DrawTitles(TReal aAlpha);
-
-
- /**
- * Initializes scroll bar.
- */
- void InitScrollBarL(TBool aResize);
-
- /**
- * Initializes skin rendering.
- */
- void InitSkinRendererL();
-
- /**
- * Initializes whole rendering functionality.
- */
- void InitRenderingL(TBool aRecreateSurface);
-
- /**
- * Frees videomemory used by items.
- */
- void FreeItemsImages();
-
- /**
- * Reloads images to items.
- */
- void ReloadItemsImages();
-
- /**
- *
- */
- void HandleTapEventL(const TPoint& aPosition);
-
- /**
- *
- */
- void HandleFlick(const TPoint& aSpeed);
-
- /**
- *
- */
- void HandleDragging(const AknTouchGestureFw::MAknTouchGestureFwDragEvent& aEvent);
-
- /**
- *
- */
- TInt GetStepsFromSpeed(TInt aSpeed) const;
-
- /**
- *
- */
- void StartAnimationTimer();
-
- /**
- *
- */
- TReal GetAsPercentageOfScreenWidth(TInt aPixels) const;
-
- /**
- *
- */
- TReal GetAsPercentageOfScreenHeight(TInt aPixels) const;
-
- /**
- *
- */
- void DrawScene();
-
- /**
- *
- */
- void HandleDragStart(const AknTouchGestureFw::MAknTouchGestureFwDragEvent& aEvent);
-
- /**
- *
- */
- void HandleDragOn(const AknTouchGestureFw::MAknTouchGestureFwDragEvent& aEvent);
-
- /**
- *
- */
- void HandleDragStop(const AknTouchGestureFw::MAknTouchGestureFwDragEvent& aEvent);
-
- /**
- *
- */
- void HandleTransitionAnimationStop();
-
- /**
- *
- */
- void DrawLetterStripAndTitles();
-
- /**
- *
- */
- void DrawButtonsAndScrollbar();
-
- /**
- *
- */
- void InitButtonsL();
-
- /**
- *
- */
- CGulIcon* CreateIconL(TInt aId1, TInt aId2, const TSize& aSize);
-
- /**
- *
- */
- TBool HandleButtons(const TPointerEvent& aEvent);
-
- /**
- *
- */
- TInt MaxViewPosition() const;
-
-
- /**
- *
- */
- TBool BeginSelection(TInt aIndex);
-
- /**
- *
- */
- void EndSelection();
-
- /**
- *
- */
- void DoStartOpeningAnimationL();
-
- /**
- *
- */
- void StartAnimationToPosition(TReal aX, TBool aUpdateScrollBar);
-
- /**
- *
- */
- void StartAnimationToPosition(TReal aX, TReal aY, TBool aUpdateScrollBar);
-
- /**
- *
- */
- CFbsBitmap* DrawToBitmap();
-
- /**
- *
- */
- void DestroyRendering();
-
- /**
- *
- */
- TBool DrawAll();
-
- /**
- *
- */
- void InitMediaWallFullScreenLandscapeL();
-
- /**
- *
- */
- void InitMediaWallTBonePortraitL();
-
- /**
- *
- */
- void InitMediaWallGridLandscapeL();
-
- /**
- *
- */
- void InitLabelsL(TInt aLayoutVariant);
-
- /**
- *
- */
- void InitPopupL(TInt aLayoutVariant);
-
-protected:
- CHgScrollBufferManager* iManager; // Own
-
- HBufC* iEmptyText; // text for empty list or grid.
-
- // Observers
- MHgSelectionObserver* iSelectionObserver; // Not Own
-
- // Arrays
- RPointerArray<CHgVgItem> iItems; // Items
-
- // For dragging
- TTime iPrevTime; // Previous pointer position time.
-
- TInt iItemCount; // Total number of items
-
- TInt iItemsOnScreen; // Max items on screen.
-
- TInt iSelectedIndex; // The index of the selected item
-
- CGulIcon* iDefaultIcon; // Default item icon, owns
-
- THgVgAnimationState iAnimationState; // current animation state
- TInt64 iAnimationDuration; // total length of the animation
- TTime iAnimationStartTime; // starting time of the animation
- TReal iAnimationAlpha; // value going from 0-1 during animation
- CHgVgTimer* iAnimationTimer;
-
- TBool iScrollBarEnabled;
- CHgVgScrollBar* iScrollBar; // Scrollbar, owns
- TBool iScrollBarHit;
- TBool iUpdateScrollBar;
-
- CHgVgMediaWallRenderer* iRenderer; // Renderer for current media wall style, owns
-
- CHgVgSkinRenderer* iSkinRenderer; // Renderer for drawing skin, owns.
-
- THgVgMediaWallStyle iMediaWallStyle; // Style of mediawall.
-
- //TTime iKeyPressStartTime;
-
- AknTouchGestureFw::CAknTouchGestureFw* iTouchFw; // touch gesture fw, own.
-
- TReal iViewPositionAtDragStart;
-
- CHgVgPopup* iLetterPopup; // letter popup show when using scrollbar, own.
-
- CHgVgButton* iHideSKButton; // button for hiding softkeys, own.
-
- MHgVgMediaWallObserver* iMediaWallObserver;
-
- TRect iRect;
-
- THgVgOpeningAnimationType iOpeningAnimationType;
-
- TInt iPreviousPointerDelta;
-
- TBool iIsForeground;
- TBool iUsingDefaultIcon;
-
- TBool iButtonsHit;
-
- TBool iPointerDown;
-
- CHgVgLabel* iArtistLabel; // label for artist text, own.
- CHgVgLabel* iAlbumLabel; // label for album text, own.
- CHgVgLabel* iEmptyLabel; // label for empty text, own.
-
- enum TKeyScrollingState
- {
- ENoKeyScrolling = 0,
- EKeyScrollingUp,
- EKeyScrollingDown,
- EKeyScrollingLeft,
- EKeyScrollingRight
- } iKeyScrollingState; // State of the key scrolling
-
- TInt iKeyRepeats;
- CPeriodic* iKeyScrollingTimer; // Timer for key scrolling, own.
-
- CHgVgEGL* iEGL; // encapsulated egl stuff, own.
-
- TInt iRowCount; // number of rows in grid style
-
- TReal iCameraRotationFactor; // max amount of camera rotation in radians
- TReal iCameraZoomFactor; // max amount of zoom out
- TReal iSpringVelocityToAnimationFactor; // factor used to convert spring velocity to animation alpha
-
- RBuf iPopupText1; // text1 shown in popup
- RBuf iPopupText2; // text2 shown in popup
-
- TBool iSelectionMode; // used to indicate when user is selectin items in grid style
-
- THgVgSpring* iSpring; // spring physics simulator, own.
-
- TInt iBufferPosition;
-
- CHgVgItem* iTempItem;
-
- TInt iPickedGridItem; // item picked from grid
-
- TInt iPrevGridItem; // prev item selected from grid
- TInt iSelGridItem; // selected it from grid
-
- TReal iItemsToMoveOnFullScreenDrag;
-
- TInt iFlags;
-
- CAlfCompositionSource* iCompositionSource;
-
- CFbsBitmap* iSurfaceBitmap;
- };
-
-
-#endif /*HGVGMEDIAWALL_H_*/