mpxplugins/viewplugins/views/commoncontainer/inc/mpxcommoncontainerhitchcockimp.h
changeset 0 ff3acec5bc43
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpxplugins/viewplugins/views/commoncontainer/inc/mpxcommoncontainerhitchcockimp.h	Thu Dec 17 08:45:05 2009 +0200
@@ -0,0 +1,681 @@
+/*
+* 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 Hitchcock platform.
+*
+*/
+
+
+
+#ifndef CMPXCOMMONCONTAINERHITCHCOCKIMP_H
+#define CMPXCOMMONCONTAINERHITCHCOCKIMP_H
+
+
+// INCLUDES
+#include <alf/alfenv.h>
+#include <alf/ialfwidgeteventhandler.h>
+#include <mul/mulevent.h>
+#include <mul/mulvisualitem.h>      // For Visual Item
+#include <mul/imulmodelprovider.h>
+
+#include <thumbnailmanager.h>
+#include <thumbnailmanagerobserver.h>
+
+#include <mpxattribute.h>
+#include "mpxcommoncontainer.h"
+#include "mpxcommoncontainersearchfieldwrapper.h"
+
+// FORWARD DECLARATIONS
+namespace Alf
+    {
+    class IMulListWidget;
+    class IMulModel;
+    class IAlfViewWidget;
+    class MulVisualItem;
+    }
+class CAlfEnv;
+class MEikCommandObserver;
+class CEikMenuPane;
+class MEikListBoxObserver;
+class CAknIconArray;
+class CMPXCommonListBoxArrayBase;
+class CMPXMediaArray;
+class CAknSearchField;
+class MCoeControlObserver;
+class CMPXCommonContainerMediaHelper;
+class CMPXCommonContainerTextureManager;
+class CMPXCommonUiHelper;
+class CMPXCommonContainerFilteredList;
+
+// CLASS DECLARATION
+
+/**
+ *  Container class for Hitchcok 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( CMPXCommonContainerHitchcockImp )
+    : public CCoeControl
+    , public MCoeControlObserver
+    , public MMPXCommonContainer
+    , public IAlfWidgetEventHandler
+    , public Alf::IMulModelProvider
+    , public MThumbnailManagerObserver
+    , public MMPXCommonContainerSearchFieldObserver
+    {
+public:
+
+    /**
+     * default C++ constructor.
+     */
+    CMPXCommonContainerHitchcockImp();
+    
+    /**
+     * Destructor.
+     */
+    virtual ~CMPXCommonContainerHitchcockImp();
+
+
+// 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<TInt>* CurrentSelectionIndicesL() const;
+    
+    /**
+     * Sewt current selected listbox items indices
+     *
+     * @since 3.1
+     * @param aIndices Array of selection indices, ownership not transfered
+     */
+    void SetCurrentSelectionIndicesL( CArrayFix<TInt>* 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 aCollectionType collection type
+     */
+    void ConstructContainerL( TMPXCommonContainerCollectionType aCollectionType );
+
+    /**
+     * 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();
+
+    /**
+     * Deactivate the container
+     */
+    void DeactivateContainerL();
+
+    /**
+     * Checks whether the container is active
+     */
+    TBool IsContainerActive();
+
+// 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 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 IAlfWidgetEventHandler
+
+    /**
+     * From IAlfWidgetEventHandler
+     * Indicates whether event is accepted
+     *
+     * @param aControl widget control
+     * @param aEvent the ALF event
+     */
+    bool accept( CAlfWidgetControl& aControl, const TAlfEvent& aEvent ) const;
+
+    /**
+     * From IAlfWidgetEventHandler
+     * Sets the active states of the event handler
+     *
+     * @param aStates active states
+     */
+    void setActiveStates( unsigned int aStates );
+
+    /**
+     * From IAlfWidgetEventHandler
+     * Performs the appropriate action for the ALF event
+     *
+     * @param aControl widget control
+     * @param aEvent the ALF event.
+     * @return TRUE if event consumed
+     */
+    AlfEventStatus offerEvent( CAlfWidgetControl& aControl, const TAlfEvent& aEvent );
+
+    /**
+     * From IAlfWidgetEventHandler
+     * Make event handler interface using the specified type
+     * @param aType
+     */
+    IAlfInterfaceBase* makeInterface( const IfId& aType );
+
+    /**
+     * From IAlfWidgetEventHandler
+     * Sets the event handler data
+     *
+     * @param aData event handler initialization data
+     */
+    void setEventHandlerData(const AlfWidgetEventHandlerInitData& aData);
+
+    /**
+     * From IAlfWidgetEventHandler
+     * Returns pointer to the event handler data
+     */
+    AlfWidgetEventHandlerInitData* eventHandlerData();
+
+    /**
+     * From IAlfWidgetEventHandler
+     * Returns the type of EventHandler.
+     * @see IAlfWidgetEventHandler::AlfEventHandlerType
+     *
+     * @return The type of event handler.
+     */
+    AlfEventHandlerType eventHandlerType();
+
+    /**
+     * From IAlfWidgetEventHandler
+     * Returns information about the phase in the event handling cycle in
+     * which the event hadler will be executed.
+     * @see IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase
+     *
+     * @return Event handler execution phase.
+     */
+    AlfEventHandlerExecutionPhase eventExecutionPhase();
+
+public: // from base class IMulModelProvider
+
+    void ProvideData( int aStartIndex, int aCount, MulDataPath aPath );
+
+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 );
+
+public: // from base class MMPXCommonContainerSearchFieldObserver
+
+    /**
+     * From MMPXCommonContainerSearchFieldObserver
+     * Call when filtering word changes. Causes filtering to be updated.
+     * Calling with zero-length filtering word stops filtering.
+     *
+     * @param aWord New filtering word.
+     */
+    void NewFilteringWordL( const TDesC& aWord );
+
+private:
+
+    /**
+     * Create list box
+     */
+    void CreateListBoxL();
+
+    /**
+     * Constructs Find box.
+     *
+     * @param aIsFindPopup ETrue if findbox is a popup type.
+     *                     EFalse if finsbox is a fixed type.
+     */
+    void ConstructFindBoxL( TBool aIsFindPopup );
+
+    /**
+     * Creates icon array, populates iIconArray to be used by listbox
+     */
+    void CreateIconArrayL();
+
+    /**
+     * Creates the display item from the media
+     */
+    MulVisualItem* CreateDisplayedItemL( TInt aIndex );
+
+    /**
+     * Adds detail to the list item at the specified index
+     */
+    void AddDetailToDisplayedItemL( MulVisualItem* aVisualItem, CMPXMedia* aMedia, TInt aIndex );
+
+    void SetTitleL( MulVisualItem* aVisualItem, CMPXMedia* aMedia );
+    void SetDetailCountL( MulVisualItem* aVisualItem, CMPXMedia* aMedia );
+    void SetDetailArtistL( MulVisualItem* aVisualItem, CMPXMedia* aMedia );
+    void SetDetailAlbumL( MulVisualItem* aVisualItem, CMPXMedia* aMedia );
+    void SetDetailDurationL( MulVisualItem* aVisualItem, CMPXMedia* aMedia );
+    void UpdateTimeIndicatorsL( TDes& aBuf, TInt aDuration );
+    void SetDetailIndicatorL( MulVisualItem* aVisualItem, TInt aIndex );
+    void SetDetailIconL( MulVisualItem* aVisualItem, TInt aIndex );
+    void SetDetailThumbnailL( MulVisualItem* aVisualItem, CMPXMedia* aMedia, TInt aIndex );
+
+    /**
+     * Set the collection context
+     */
+    void SetCollectionContextL();
+
+    /**
+     * Opens search field.
+     */
+    void ActivateSearchFieldL();
+
+    /**
+     * Closes search field, if open.
+     */
+    void DeactivateSearchField();
+
+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
+        };
+
+    struct TThumnailReq
+        {
+        TThumbnailRequestId iReqId;
+        TInt                iIndex;
+        };
+
+    MMPXViewContainer*          iViewContainer;         // Not owned
+    MEikCommandObserver*        iView;                  // Not owned
+    MEikListBoxObserver*        iListBoxObserver;       // Not owned
+    CMPXCommonListBoxArrayBase* iListBoxArray;          // Owned
+    CArrayFixFlat<TInt>*        iListSelections;        // Owned
+    CAknIconArray*              iIconArray;             // Owned
+
+//    CAknSearchField*            iFindBox;  // Owned
+
+    CMPXCommonContainerTextureManager*  iTextureManager;// Owned
+	CMPXCommonUiHelper*         iCommonUiHelper;        // Owned
+
+    CAlfEnv*                    iEnv;                   // Not owned
+    IMulListWidget*             iListWidget;            // Not owned
+    IMulModel*                  iWidgetModel;           // Not owned
+    IAlfViewWidget*             iViewWidget;            // Not owned
+
+    CThumbnailManager*          iThumbnailManager;      // Owned
+    RArray<TThumnailReq>        iThumbnailReqArray;     // Owned
+
+    CMPXCommonContainerSearchFieldWrapper* iSearchFieldWrapper;  // Owned
+    CMPXCommonContainerFilteredList* iFilteredList;     // Owned
+
+    TContext                    iContext;
+    TInt                        iResourceOffset;        // Must be freed
+
+    TBool                       iIsFindPopup;
+    TBool                       iIsFindEnabled;
+    TBool                       iIsMarkingEnabled;
+
+	TInt						iTopIndex;
+	TInt						iBottomIndex;
+	TInt						iIconHeight;
+	TInt						iIconWidth;
+	TInt						iIndicatorHeight;
+	TInt						iIndicatorWidth;
+
+    TBool                       iAlfEnvCreated;
+    TMPXCommonContainerCollectionType  iCollectionType;
+    TBool                       iContainerActive;
+    };
+
+#endif  // CMPXCOMMONCONTAINERHITCHCOCKIMP_H
+
+// End of File