diff -r 000000000000 -r 7f85d04be362 upnpframework/upnpcommonui/inc/upnpbrowsedialog.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/upnpframework/upnpcommonui/inc/upnpbrowsedialog.h Thu Dec 17 08:52:00 2009 +0200 @@ -0,0 +1,674 @@ +/* +* 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 + +// 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& 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 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 iParentId; //owned + // parent name + RPointerArray iParentName; //owned + //common UI + + //wait dialog + CAknWaitDialog* iWaitNoteDialog; //owned + //temporary browse result array + RPointerArray 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 iBrowseCacheItems; //owned + + CPeriodic* iPeriodic; //owned + + //Array for selected items + RPointerArray 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