upnpframework/upnpcommonui/inc/upnpbrowsedialog.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:52:00 +0200
changeset 0 7f85d04be362
permissions -rw-r--r--
Revision: 200947 Kit: 200951

/*
* Copyright (c) 2005-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:  Header file for the UPnPSelectionDialog class implementation
*
*/


#ifndef __UPNP_BROWSE_DIALOG_H__
#define __UPNP_BROWSE_DIALOG_H__

// INCLUDES
// System
#include <AknProgressDialog.h>

// upnpframework / avcontroller api
#include "upnpavbrowsingsessionobserver.h"
#include "upnpavrenderingsessionobserver.h"

// commonui internal
#include "upnpdeviceobserver.h"

// FORWARD DECLARATIONS
class CUPnPMusicAdapter;
class CUPnPLocalPlayer;
class CUPnPBrowseCacheItem;
class CAknIconArray;
class CUPnPCommonUI;
class CUpnpImagePlayer;
class CUPnPBrowsePlaylistFiller;
class CUPnPPeriodic;

/**
* Browse dialog class of Common UI library
*/
class CUPnPBrowseDialog : public CAknDialog,
                          public MUPnPAVBrowsingSessionObserver,
                          public MProgressDialogCallback,
                          public MUPnPDeviceObserver
                          
    {

    public:  // Constructors and destructor

        /**
        * Two-phased constructor.
        */
        IMPORT_C static CUPnPBrowseDialog* NewL(
                                            TInt aMenuResource,
                                            MUPnPAVController& aAVControl,
                                            const CUpnpAVDevice& aDevice,
                                            CUPnPCommonUI& aCommonUI );

        /**
        * Destructor.
        */
        IMPORT_C virtual ~CUPnPBrowseDialog();

    public: // Methods from MUPnPAVBrowsingSessionObserver

        /**
         * Returns a browse result received from a Media Server.
         *         
         * @since Series 60 3.1
         * @param aBrowseResponse browse response xml document
         * @param aError system wide error code
         * @param aMatches number of returned items
         * @param aTotalCount total number of objects on container
         * @param aUpdateId update id number
         * @return None
         */
        void BrowseResponse(
                        const TDesC8& aBrowseResponse,
                        TInt aError,
                        TInt aMatches,
                        TInt aTotalCount,
                        const TDesC8& aUpdateId
                        );

        /**
         * Returns a search result received from a Media Server.
         *
         * @param aSearchResponse search response xml document
         * @param aError system wide error code
         * @param aMatches number of returned items
         * @param aTotalCount total number of resulted items
         * @param aUpdateId update id number
         * @return None
         */
        void SearchResponse( 
                        const TDesC8& /*aSearchResponse*/,
                         TInt /*aError*/,
                         TInt /*aMatches*/,
                         TInt /*aTotalCount*/,
                         const TDesC8& /*aUpdateId*/
                         ){};

        /**
         * Notifies that the create container operation is complete.
         *
         * @since Series 60 3.1
         * @param TInt, status information
         * @param aObjectId (const TDesC8&) object ID of the new container
         */
        void CreateContainerResponse( TInt /*aError*/,
                        const TDesC8& /*aObjectId = KNullDesC8*/ ){};

        /**
         * Notifies that the requested UPnP Object deletion is complete.
         *
         * @since Series 60 3.1
         * @param TInt, status information
         * @return None
         */
        void DeleteObjectResponse( TInt /*aError*/ ){};

         /**
         * Returns search capabilities of the requested Media Server.
         *
         * @since Series 60 3.1
         * @param TInt, status information
         * @param HBufC8&, the search capabilities string
         * @return None
         */
        void SearchCapabilitiesResponse( TInt /*aError*/,
            const TDesC8& /*aSearchCapabilities*/  ){};
        
        
        /**
         * Notifies that the Media Server we have a session with has
         * disappeared. Session is now unusable and must be closed. 
         *
         * @since Series 60 3.1
         * @param aReason reason code
         * @return None
         */ 
        void MediaServerDisappeared( TUPnPDeviceDisconnectedReason aReason );
        
        /**
         * Notifies that the Local Media Server has been put on sharing state
         *
         * @since Series 60 3.1
         * @param aReason reason code
         * @return None
         */
        void ReserveLocalMSServicesCompleted( TInt /*aError*/ ){};
        
   protected: // from CoeControl
   
        /**
        * Gets the control's help context. 
        * @param TCoeHelpContext, context of desired help
        * @return none
        */
        void GetHelpContext(TCoeHelpContext& aContext) const;
   
    public: // From MProgressDialogCallback

        /**
         * Callback function for progress bar.
         *
         * @since Series 60 3.1
         * @param aButtonId, id of the button pressed
         * @return None
         */
        void DialogDismissedL( TInt aButtonId );

    public: // New functions

        /**
        * Sends the browse request to UPnP AV Controller. When result set
        * arrives, UPnP AV Controller will call the "BrowseResponse" call
        * back method.
        *
        * @param TInt index of the iBrowseArray object, if -1 is given,
        *             the root container will be browsed.
        * @return None
        */
        void SendBrowseRequestL( TInt aIndex );

        /**
         * Callback method for the iImageControlTimer.
         *
         * @since Series 60 3.1
         * @param aDlg current dialog which to be called
         * @return Tint
         */
        static TInt ImageControlTimerCallbackL(TAny* aDlg);


    protected:  // Functions from base classes

        /**
        * From CAknDialog, handles menu commands
        * @param aCommandId, command to be handled
        * @return none
        */
        void ProcessCommandL( TInt aCommandId );

        /**
        * From CAknDialog, handles key events.
        * @param TKeyEvent, Event to handled.
        * @param TEventCode, Type of the key event.
        * @return TKeyResponse, response code (EKeyWasConsumed, 
        *         EKeyWasNotConsumed).
        */
        TKeyResponse  OfferKeyEventL (const TKeyEvent &aKeyEvent,
                                      TEventCode aType);

        /**
        * From CAknDialog, handles layout initialization
        */
        void PreLayoutDynInitL();

       /**
        * Menu observer interface. From MEikMenuObserver
        * @since Series 60 3.1
        * @param aResourceId resource ID identifying the menu pane to 
        * initialise.
        * @param aMenuPane The in-memory representation of the menu pane
        * @return none
        */
        void DynInitMenuPaneL (TInt aResourceId, CEikMenuPane *aMenuPane);

        /**
        * From CAknDialog, handles focus changes of the dialog
        * @param aButtonId, pressed button id
        * @return True if ready to close dialog, False otherwise
        */
        TBool OkToExitL( TInt aButtonId );
        
        /**
        * From CoeControl
        */
        void HandleResourceChange(TInt aType);

        
    public: // Methods from MUPnPDeviceObserver
    
        /**
         * Notifies that the target renderer disappeared
         *
         * @since Series 60 3.1
         * @param aError exit reason
         * @return None
         */
        void DeviceDisappeared( TInt aError );
        
    private:    // New Functions

        /**
        * Loads a possibly skinned icon and adds it to icon array
        * @since Series 60 3.1
        * @param CAknIconArray, array of icons
        * @param MAknsSkinInstance, skin instance
        * @param TDesC, reference to icon file
        * @param TAknsItemID, skinned icon id
        * @param TInt, bitmap id
        * @param TInt, bitmap mask id
        */
        void AppendIconToArrayL( CAknIconArray* aArray,
                                 MAknsSkinInstance* aSkin,
                                 const TDesC& aMbmFile,
                                 const TAknsItemID& aID,
                                 TInt aBitmapId,
                                 TInt aMaskId);

        /**
        * Marks one item
        * @since Series 60 3.1
        * @param aItemIndex (TInt) index of item that should be marked
        * @return None
        */
        void MarkItemL( TInt aItemIndex );

        /**
        * Unmarks one item
        * @since Series 60 3.1
        * @param aItemIndex (TInt) index of item that should be unmarked
        * @return None
        */
        void UnmarkItem( TInt aItemIndex );

        /**
        * Marks all items. Does not mark any containers.
        * @since Series 60 3.1
        * @return None
        */
        void MarkAllItemsL();

        /**
        * Unmarks all items
        * @since Series 60 3.1
        * @return None
        */
        void UnmarkAllItems();

        /**
        * Unmarks one item
        * @since Series 60 3.1
        * @param aItemIndex (TInt) index of item that should be unmarked
        * @return None
        */
        void UnMarkItemL( TInt aItemIndex );

        /**
        * Plays music file
        * @since Series 60 3.1
        * @param none
        * @return none
        */
        void PlayL(TBool aLocal);

        /**
        * Show image, video and music on external media renderer
        * @since Series 60 3.1
        * @param none
        * @return none
        */
        void ShowPlayExtL();

        /**
        * Displays wait note
        * @since Series 60 3.1
        * @param TInt, note resource
        */
        void DisplayWaitNoteL( TInt aResource );


        /**
        * Dismisses wait note
        * @since Series 60 3.2.3
        */
        void DismissWaitNoteL();
        
        /**
        * Called when target device responds to browse query
        * @since Series 60 3.1
        * @param TInt, query status
        * @param aTotalCount TInt total number of objects
        * @param RPointerArray&, returned item array
        * @return None
        */
        void BrowseResponseL( 
                    TInt aError,
                    TInt aTotalCount,
                    const RPointerArray<CUpnpObject>& aResultArray );

        
        
        
        /**
        * updates selected items array
        * @since Series 60 3.1
        * @param None
        * @return None
        */
        void SelectedArrayCheckL(void);
        
         /**
         * updates command button area
         * @since Series 60 3.23
         * @param aMark use for two states, item marked or no marked
         * @param aTempCounter is the number of the current item in the list.
         * @return None
         */
         void UpdateCommandButtonAreaL( TBool aMark, TInt aTempCounter );

         /**
         * updates command button area
         * @since Series 60 3.23
         * @param aMark use for two states, item marked or no marked
         * @param aTempCounter is the number of the current item in the list.
         * @return None
         */
         void UpdateCommandButtonArea( TBool aMark, TInt aTempCounter );
         
    private:

        /**
        * C++ default constructor.
        */
        CUPnPBrowseDialog( MUPnPAVController& aAVControl,
                           CUPnPCommonUI& aCommonUI,
                           const CUpnpAVDevice& aDevice );

        /**
        * By default Symbian 2nd phase constructor is private.
        */
        void ConstructL( TInt aMenuResource );

        /**
        * Loads listbox items
        * @since Series 60 3.1
        * @return none
        */
        void LoadListItemsL( void );

        /**
        * Delete old list items
        * @since Series 60 3.1
        * @return none
        */
        void DeleteListItemsL( void );

        /**
        * Clears dialog title
        * @since Series 60 3.1
        * @return none
        */
        void ClearTitleL();

        /**
        * Updates navi pane text
        * @since Series 60 3.1
        * @return none
        */
        void UpdateNaviPaneTextL();

        /**
         * Check if the container with the specified container Id exists
         * @since Series 60 3.1
         * @param aCheckContainerId the container Id to be checked
         * @return the found result
         */
        TInt CacheCheck( const TDesC8& aCheckContainerId );
        
        /**
         * Update the cache if any new container is found
         * @since Series 60 3.1
         * @param aContainerId the container Id to be checked
         * @param aNewItem check if the container is new or not
         * @return the found result
         */
        void CacheItemUpdateL( const TDesC8& aContainerId, TBool aNewItem );
        
        /**
         * Send dummy browse response
         * @since Series 60 3.1
         * @param aCacheIndex the index in the cache array
         *
         * @return none
         */
        void SendDummyBrowseResponseL( TInt aCacheIndex );
        
        /**
        * Starts ImageControl
        * @since Series 60 3.1
        * @param None
        * @return none
        */
        void StartImageControlL();
        
        /**
        * Stops ImageControl
        * @since Series 60 3.1
        * @param None
        * @return None
        */
        void StopImageControlL();
        
        /**
        * Updates softkeys 
        * @since Series 60 3.1
        * @param aResourceId (TInt) softkey resource
        * @return None
        */
        void UpdateSoftkeysL( TInt aResourceId );
        
        /**
        * Starts imageControl timer
        * @since Series 60 3.1
        * @param None
        * @return None
        */
        void StartImageControlTimer( void );
        
        /**
        * Shows current image
        * @since Series 60 3.1
        * @param aShowImage (TBool) shows current image and draws showing 
        *  icon
        * @return None
        */
        void ShowCurrentImageL( TBool aShowImage );
        
        /**
        * Shows current video
        * @since Series 60 3.1
        * @param none
        * @return none
        */
        void ShowVideoDialogExtL( );
        
        /**
        * Handel copy
        * @since Series 60 3.1
        * @param None
        *                     
        * @return none
        */
        void HandleCopyL();
        
        /**
        * Create a playlist filler representing current music selection
        * for starting music playback
        * @since Series 60 3.1
        * @param none
        *                     
        * @return CUPnPPlayListFiller filler instance
        */
        CUPnPPlayListFiller* CreateFillerLC();
         
        /**
         * Handle different errors returned from other dialogs
         * @since Series 60 3.1
         * @param exiting reason
         * @return none
         */
        void HandleErrorL( TInt aError ); 
        
        /**
        * Check if any audio item is marked
        * @since Series 60 3.1
        * @param None
        * @return ETrue if at least one audio item is marked
        */
        TBool IsAudioItemMarked( void );  
 
    private:    // Data

        //listbox
        CEikColumnListBox*          iListBox; //not owned
        //browse result array
        RPointerArray<CUpnpObject>  iResultArray; //item inside not owned
        //navi pane
        CAknNavigationDecorator*    iNaviDecorator; //owned
        // navi pane
        CAknNavigationControlContainer* iNaviPane; //not owned
        //AV controller
        MUPnPAVBrowsingSession*     iBrowseSession; //owned
        
        CUPnPCommonUI&              iCommonUI; //not owned
        
        MUPnPAVController&          iAVControl; //not owned
        //parent container
        RPointerArray<HBufC8>       iParentId;  //owned
        // parent name
        RPointerArray<HBufC8>       iParentName; //owned
        //common UI
           
        //wait dialog
        CAknWaitDialog*             iWaitNoteDialog; //owned    
        //temporary browse result array
        RPointerArray<CUpnpObject>  iTempArray; // items inside not owned
        //browse direction
        TInt                        iBrowseFlag;
        
        // stores selected item index
        TInt                        iSelectedItem;
        
        //exit timer
        TBool                       iFirstResultArray;
        TInt                        iCurrentItem;
        TBool                       iAllObjectsReceived;

        TInt                        iPrevHighlighteditem;
        TInt                        iUppermostItem;
        TInt                        iBrowseDirection;
        
        TBool                       iDummyBrowseResponse;
        HBufC8*                     iCurrentFolderId; //owned
        TBool                       iBrowseRequestSent;

        RPointerArray<CUPnPBrowseCacheItem>        iBrowseCacheItems; //owned

        CPeriodic*                  iPeriodic; //owned       

        //Array for selected items
        RPointerArray<CUpnpObject>  iSelectedItemsArray; //owned
        //Flag to tell if the image control view is active
        TBool                       iImageControlActive;        
        //ImageControl periodic timer
        CUPnPPeriodic*              iImageControlTimer; //owned
        
        CUpnpImagePlayer*           iImagePlayer; //owned
        
        CUPnPLocalPlayer*           iLocalPlayer; //owned
        
        CUpnpAVDevice*              iTargetDevice; //owned
        
        const CUpnpAVDevice&        iSourceDevice; //not owned
        
        // title pane
        CAknTitlePane*              iTitlePane; //not owned
        
        //Flag to tell if shift and Ok was pressed the same time
        TBool                       iShiftAndOkPressed;
        
        TInt                        iLastImageItemIndex;
        
        TInt                        iChildDialogOpen;
        
        //flag to either media server disappears or media renderer disappear
        TBool                       iMSDisappear;
        
        TInt                        iTotalCount;
        
        CUPnPCommonUI::TUPnPAction               iAction;
        
        TInt                        iCopyIndex;
        
        TBool                       iRoot;
        
        TBool                       iIsMusicItem;
        
        TBool                       iAllObjectsReceviedInOneBrowse;
        
        TInt                        iNumObjectReceviedInOnBrowse;
        
        /**
         * for music playing, this is to prevent user to pop up renderer
         * selection and select renderer multiple times
         */
        TBool                       iMusicPlay;
        
        TInt                        iError;
        
        // is PreLayoutDynInitL done. Used when exiting dialog
        TBool                       iDlgPreLayoutDone;
        
        // Flag to tell if the the Hash (#) key is Holding down
        TBool                       iHashKeyFlag;
        
        // Flag to tell if need repeat browse request to get all objects 
        // which an original browse request desired
        TBool iNeedRepeatRequest;
        
        // Flag to tell if the browse request is original browse request.
        TBool iOriginalBrowseRequest;
        
        // Current number of objects receved from original browse request
        TInt iCurrentRecevedObjectIndex;
        
        // Count of objects which an original browse request desired
        TInt iNeedRecevedObjectCount;
        
        // Server return count of objects in first browse request
        TInt iServerReturnObjectCount;
        
        // If wait note is cancel before the browse dialog is displayed,
        // set a value for leave.
        TInt iErrorForCancel;	
        
        // Flag to tell if the copying is onging, ETrue: Ongoing
        TBool                       iCopying;
        
        // Flag to tell if the application should be closed, ETrue: should be closed
        TBool                       iApplicationClose;
    };

#endif // __UPNP_BROWSE_DIALOG_H__

// End of file