diff -r 000000000000 -r ff3acec5bc43 mpxplugins/viewplugins/views/commoncontainer/inc/mpxcommoncontainerhgimp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpxplugins/viewplugins/views/commoncontainer/inc/mpxcommoncontainerhgimp.h Thu Dec 17 08:45:05 2009 +0200 @@ -0,0 +1,701 @@ +/* +* Copyright (c) 2006 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: MPX common container definition for hg lib. +* +*/ + + + +#ifndef CMPXCOMMONCONTAINERHGIMP_H +#define CMPXCOMMONCONTAINERHGIMP_H + + +// INCLUDES +#include +#include +#include +#include +#include +#include + +#include +#include "mpxcommoncontainer.h" + + +// FORWARD DECLARATIONS +class MEikCommandObserver; +class CEikMenuPane; +class MEikListBoxObserver; +class CAknIconArray; +class CMPXCommonListBoxArrayBase; +class CMPXMediaArray; +class CAknSearchField; +class MCoeControlObserver; +class CMPXCommonContainerMediaHelper; +class CMPXCommonContainerTextureManager2; +class CMPXCommonUiHelper; +class CHgScroller; +class CHgScrollerWithTitle; +class CAknsBasicBackgroundControlContext; + +//Albumart request queue +struct TAlbumArtRequest + { + TInt iIndex; + HBufC* iAlbumArtUri; + TSglQueLink iLink; + }; + + +// CLASS DECLARATION + +/** + * Container class for Hg common container. + * The view class should implement the following virtual function + * from MEikCommandObserver + * + * virtual void ProcessCommandL(TInt aCommandId); + * + * common container uses this to pass commands back to the view class + * the commands supported are defined in mpxcommoncontainer.hrh + * + * view container class owns this class to access List widget commands, receive + * CoeControl events and GetHelpContext(). The view container class should + * implement the following virtual functions from MViewContainer + * + * virtual void HandleKeyEvent(); + * virtual void HandleHelpContent(); + * + * common container uses this to pass CoeControl events back to the view + * container class. + * + * view class should handle the following commands in ProcessCommandL + * from MEikCommandObserver: + * + * EMPXCmdCommonDelete // delete key pressed + * EMPXCmdCommonResourceChange // resource change + * EMPXCmdCommonEnterKey // enter key pressed + * + * @lib mpxcommoncontainer.lib + * @since S60 v3.1 + */ +NONSHARABLE_CLASS( CMPXCommonContainerHgImp ) + : public CCoeControl + , public MCoeControlObserver + , public MMPXCommonContainer + , public MHgScrollBufferObserver + , public MHgSelectionObserver + , public MThumbnailManagerObserver + { +public: + + /** + * default C++ constructor. + */ + CMPXCommonContainerHgImp(); + + /** + * Destructor. + */ + virtual ~CMPXCommonContainerHgImp(); + + +// from base class MMPXCommonContainer + + /** + * Return Coe Control + * + * @since 3.2 + */ + CCoeControl* CoeControl(); + + /** + * Set View Container + * + * @since 3.2 + */ + void SetViewContainer( MMPXViewContainer* aViewContainer ); + + /** + * Set command observer for container + * + * @since 3.2 + */ + void SetCommandObserver( MEikCommandObserver* aCommandObserver ); + + /** + * Set list box observer for container + * + * @since 3.2 + */ + void SetListBoxObserver( MEikListBoxObserver* aObserver ); + + /** + * Set layout for all elements and set sizes for icons. + * + * @since 3.1 + */ + void UpdateLayout(); + + /** + * Returns list box array, ownership not transfered + * + * @since 3.1 + * @return A pointer to the list box array + */ + CMPXCommonListBoxArrayBase* ListBoxArray() const; + + /** + * Sets up the listbox array, ownership not transferred + */ + void SetListBoxArrayL( CMPXCommonListBoxArrayBase* aListBoxArray ); + + /** + * Return number of listbox items shown in the current listbox. + * + * @since 3.1 + * @return The number of items shown in the list box + */ + TInt CurrentListItemCount() const; + + /** + * Return total number of listbox items in the listbox. + * + * @since 3.1 + * @return Total items in the list box + */ + TInt TotalListItemCount() const; + + /** + * Gets top listbox item index (relative to the original listbox). + * @return Top listbox item index + * + * @since 3.1 + */ + TInt TopLbxItemIndex() const; + + /** + * Gets bottom listbox item index (relative to the original listbox). + * @return Bottom listbox item index + * + * @since 3.1 + */ + TInt BottomLbxItemIndex() const; + + /** + * Gets current listbox item index (relative to the original listbox). + * @return Current listbox item index + * + * @since 3.1 + */ + TInt CurrentLbxItemIndex() const; + + /** + * Get current selected listbox items indices (relative to the original + * listbox). Ownership not transferred. + * + * @since 3.1 + * @return Current listbox item indices + */ + const CArrayFix* CurrentSelectionIndicesL() const; + + /** + * Sewt current selected listbox items indices + * + * @since 3.1 + * @param aIndices Array of selection indices, ownership not transfered + */ + void SetCurrentSelectionIndicesL( CArrayFix* aIndices ) const; + + /** + * Set top listbox item index. + * + * @since 3.1 + * @param aIndex Actual listbox index. + */ + void SetLbxTopItemIndex( TInt aIndex ); + + /** + * Set current listbox item index. + * + * @since 3.1 + * @param aIndex Actual listbox index. + */ + void SetLbxCurrentItemIndex( TInt aIndex ); + + /** + * Set current listbox item index and highlight it. + * + * @since 3.1 + * @param aIndex Actual listbox index. + */ + void SetLbxCurrentItemIndexAndDraw( TInt aIndex ); + + /** + * Clear listbox selection. + * + * @since 3.1 + */ + void ClearLbxSelection(); + + /** + * Sets list box backround text. This text is visible if the list box + * has no items. + * + * @param aText The text for the empty list box background. + * @since 3.2 + */ + void SetLbxEmptyTextL( const TDesC& aText ); + + /** + * Draws list box item index + * + * @since 3.2 + */ + void DrawLbxItem( TInt aIndex ); + + /** + * Set Find box's focus. + * + * @since 3.1 + * @param aFocus ETrue if set focus on FindBox. Otherwise, EFalse. + */ + void SetFindBoxFocus( TBool aFocus ); + + /** + * Handle listbox item addition. + * + * @since 3.1 + */ + void HandleLbxItemAdditionL(); + + /** + * Handle listbox item addition, preserving the current display index. + * + * @since 3.1 + */ + void HandleLbxItemAdditionPreserveIndexL(); + + /** + * Handle listbox item removal. + * + * @since 3.1 + */ + void HandleLbxItemRemovalL(); + + /** + * Show/hide find box + * + * @since 3.1 + * @param aIsVisible ETrue to set findbox visible. Otherwise, EFalse + */ + void SetFindBoxVisibilityL( TBool aIsVisible ); + + /** + * Determine find box visibility + * + * @since 3.1 + * @return ETrue if find box is currently visible, EFalse otherwise + */ + TBool FindBoxVisibility(); + + /** + * Restore the PopupCBA of find box + */ + void RestoreFindBoxPopupCBA(); + + /** + * Calculate the top index of the visible items + * + * @since 3.1 + * @param aBottomIndex the bottom index of the visible items + * @return top index + */ + TInt CalculateTopIndex( TInt aBottomIndex ); + + /** + * Creates the container + * + * @since 3.1 + * @param aRect the rectangle that defines the control's extent. + */ + void ConstructContainerL( TMPXCommonContainerCollectionType /*aCollectionTyp*/ ); + + /** + * Enable/disable find box + * + * @since 3.1 + * @aEnable ETrue to enable find box, EFalse to disable + */ + void EnableFindBox( TBool aEnable ); + + /** + * Enable/disable marking + * + * @since 3.1 + * @aEnable ETrue to enable marking, EFalse to disable + */ + void EnableMarking( TBool aEnable ); + + /** + * Custom handling of commands for markable lists. + */ + void HandleMarkableListProcessCommandL( TInt aCommand ); + + /** + * Custom handling of menu pane for markable lists + */ + void HandleMarkableListDynInitMenuPane( + TInt aResourceId, + CEikMenuPane* aMenuPane ); + + /** + * Handle listbox array events + * + * @param aEvent list box event + */ + void HandleListBoxArrayEventL( + MMPXCommonListBoxArrayObserver::TMPXCommonListBoxArrayEvents aEvent ); + + /** + * Handles key events. + * + * @param aKeyEvent The key event. + * @param aType The type of key event. + */ + TKeyResponse HandleKeyEventL( + const TKeyEvent& aKeyEvent, + TEventCode aType ); + + /** + * Activate the container + */ + void ActivateContainerL(); + +// from base class CCoeControl + + /** + * From CCoeControl. + * Handles key events. + * + * @param aKeyEvent The key event. + * @param aType The type of key event. + */ + TKeyResponse OfferKeyEventL( + const TKeyEvent& aKeyEvent, + TEventCode aType ); + + /** + * From CCoeControl. + * Gets the control's help context. + * + * @param aContext The control's help context. + */ + void GetHelpContext( TCoeHelpContext& aContext ) const; + + /** + * From CoeControl. + * Handles a change to the control's resources. + * + * @param aType A message UID value. + */ + void HandleResourceChange( TInt aType ); + + /** + * From CoeControl. + * Draw this application's view to the screen + * + * @param aRect the rectangle of this view that needs updating + */ + void Draw( const TRect& aRect ) const; + + /** + * From CoeControl. + * Get the control input capabilities + */ + TCoeInputCapabilities InputCapabilities() const; + +// from base class MCoeControlObserver + + /** + * From MCoeControlObserver, Acts upon changes in the hosted control's state. + * This class's implementation is trivial and should be able to be safely + * re-implemented in directly client-derived classes. For non-base setting + * page classes, a call to the base class should be made. + * @param aControl Control that caused the event. (not used in default implementation) + * @param aEventType Type of the event. + */ + void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType); + + +// from base class MHgScrollBufferObserver + + /** + * from MHgScrollBufferObserver + * Buffer position changed. + * The items between the aBufferStart and aBufferEnd should be loaded as soon as possible. + * + * @param aBufferStart The index of the first item in buffer. + * @param aBufferEnd The index of the last item in buffer. + * @param aDirection report direction of scrolling + */ + void Request(TInt aBufferStart, TInt aBufferEnd, THgScrollDirection aDirection); + +// from base class MHgBufferOwner + + /** + * from MHgBufferOwner + * + * + */ + void Release(TInt aReleaseStart, TInt aReleaseEnd); + + +// from base class MHgSelectionObserver + + /** + * Handle selection. + * + * @param aIndex Selected item index. + */ + void HandleSelectL( TInt aIndex ); + + /** + * Handle opening. + * + * @param aIndex Opened item index. + */ + void HandleOpenL( TInt aIndex ); + +public: // from base class MThumbnailManagerObserver + + /** + * From MThumbnailManagerObserver + * Preview thumbnail generation or loading is complete. + * + * @param aThumbnail An object representing the resulting thumbnail. + * @param aId Request ID for the operation + */ + void ThumbnailPreviewReady( MThumbnailData& aThumbnail, TThumbnailRequestId aId ); + + /** + * From MThumbnailManagerObserver + * Final thumbnail bitmap generation or loading is complete. + * + * @param aError Error code. + * @param aThumbnail An object representing the resulting thumbnail. + * @param aId Request ID for the operation. + */ + void ThumbnailReady( TInt aError, MThumbnailData& aThumbnail, TThumbnailRequestId aId ); + + TTypeUid::Ptr MopSupplyObject(TTypeUid aId); + + +private: + + /** + * Create list box + */ + void CreateListBoxL( TInt count ); + + /** + * Create list box with Title + */ + void CreateListBoxWithTitleL( TInt count ); + + + /** + * Creates icon array, populates iIconArray to be used by listbox + */ + void CreateIconArrayL(); + + /** + * Sets default icon for HgList + */ + void SetDefaultIconL(); + + /** + * Sets default icon for list item + */ + void SetDefaultIconL(TInt aIndex); + + /* + * Adds detail to the list item at the specified index + */ + void AddDetailToDisplayedItemL( CHgItem* aVisualItem, CMPXMedia* aMedia, TInt aIndex); + void AddThumbnailToDisplayedItemL( CHgItem* aVisualItem, CMPXMedia* aMedia, TInt aIndex); + void SetTitleL( CHgItem* aVisualItem, CMPXMedia* aMedia ); + void SetDetailCountL( CHgItem* aVisualItem, CMPXMedia* aMedia ); + void SetDetailArtistL( CHgItem* aVisualItem, CMPXMedia* aMedia ); + void SetDetailAlbumL( CHgItem* aVisualItem, CMPXMedia* aMedia ); + void SetDetailDurationL( CHgItem* aVisualItem, CMPXMedia* aMedia ); + void UpdateTimeIndicatorsL( TDes& aBuf, TInt aDuration ); + void SetDetailIndicatorL( CHgItem* aVisualItem, TInt aIndex ); + void SetDetailIconL( CHgItem* aVisualItem, TInt aIndex ); + void SetDetailThumbnailL( CMPXMedia* aMedia, TInt aIndex = 0 ); + + /** + * Set the collection context + */ + void SetCollectionContextL(); + + void ProvideDataL( TInt aStart, TInt aEnd ); + + void SetScrollbarType(); + + void CancelTNRequest(); + + /** + * Save the selected album item + * + */ + void SaveSelectedAlbumItemL(); + + /** + * Write the album name, artist name and album art in media data to file + * + * @param aMedia the selected media data in Album view + */ + void WriteToStreamFileL( const CMPXMedia* aMedia ); + + /** + * Read the album name, artist name and album art from file + * + * @param aMedia the media data will be returned + */ + void ReadFromStreamFileL( CMPXMedia* aMedia ); + + /** + * Refresh list as needed + */ + void RefreshL(TInt aIndex); + + /** + * Refresh list as needed + */ + void RefreshNoThumbnailL(TInt aIndex); + + /** + * Clean AlbumArt request Queue + */ + void CleanAlbumArtReqQueue(); + + /** + * Handle requests in visible area + * @param aBufferStart the starting buffer index + * @param aBufferEnd the ending buffer index + */ + void ProvideDataIntersectL(TInt aBufferStart, TInt aBufferEnd); + + /** + * Refresh list as needed + * @param aBufferStart the starting buffer index + * @param aBufferEnd the ending buffer index + */ + void ProvideDataDifferenceL(TInt aBufferStart, TInt aBufferEnd); + void ProvideDataWithoutThumbnailsL(const CMPXMediaArray& aMediaArray, TInt aStartIndex = 0); + +private: // data + + /** + * Context of collection view. It's the exact location within collection navigation + * based on category type + category. + */ + enum TContext + { + EContextUnknown, + EContextGroupCollection, + EContextGroupArtist, + EContextGroupAlbum, + EContextGroupPlaylist, + EContextGroupSong, + EContextGroupPodcast, + EContextGroupGenre, + EContextGroupComposer, + EContextItemArtist, + EContextItemAlbum, + EContextItemPlaylist, + EContextItemSong, + EContextItemPodcast, + EContextItemGenre, + EContextItemComposer + }; + + enum TDefaultIcon + { + EMPXDefaultIconNotSet = -1, + EMPXDefaultIconArtist, + EMPXDefaultIconAlbum, + EMPXDefaultIconPlaylist, + EMPXDefaultIconSongs, + EMPXDefaultIconPodcasts, + EMPXDefaultIconGenre, + EMPXDefaultIconComposer, + EMPXDefaultTitleIconPodcasts, + EMPXDefaultIconEmpty + }; + + MMPXViewContainer* iViewContainer; // Not owned + MEikCommandObserver* iView; // Not owned + MEikListBoxObserver* iListBoxObserver; // Not owned + CMPXCommonListBoxArrayBase* iListBoxArray; // Owned + CArrayFixFlat* iListSelections; // Owned + CAknIconArray* iIconArray; // Owned + + CMPXCommonContainerTextureManager2* iTextureManager;// Owned + CMPXCommonUiHelper* iCommonUiHelper; // Owned + + CHgScroller* iListWidget; // Owned + CHgScroller* iPrevListWidget; // Owned + CHgScrollerWithTitle* iScrollerWithTitle; + CThumbnailManager* iThumbnailManager; // Owned + + TContext iContext; + TContext iPrevContext; + TInt iResourceOffset; // Must be freed + TBool iIsMarkingEnabled; + TInt iTopIndex; + TInt iBottomIndex; + TSize iImageSize; + CAknsBasicBackgroundControlContext* iBgContext; // Owned + + typedef RHashMap RThumbnailReqHashMap; + RThumbnailReqHashMap iThumbnailReqHashMap; + + HBufC* iEpisodeTitle; + HBufC* iAlbumTitle; + HBufC* iSongTitle; + + TBool iPodcastContext; + TBool iTitleSet; + TDefaultIcon iCurrentDefaultIcon; + TFileName iSelectedAlbumItemFileName; + CMPXMedia* iSelectedMediaInAlbumView; + // Queue for Albumart asynchronous requests + TSglQue iRequestQueue; + TAlbumArtRequest* iAlbumArtRequest; + TInt iRequestCount; + TInt iQueueCounter; + + THgScrollDirection iDirection; + RArray iThumbnailReqMap; + TInt iLastValidMediaItemIndex; + TInt iRequestStart; + TInt iRequestEnd; + + }; + +#endif // CMPXCOMMONCONTAINERHGIMP_H + +// End of File