profilesservices/MediaFileList/Inc/mediafiledialog.h
branchRCL_3
changeset 54 7e0eff37aedb
child 67 940cad2b4a51
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/profilesservices/MediaFileList/Inc/mediafiledialog.h	Wed Sep 01 12:20:44 2010 +0100
@@ -0,0 +1,506 @@
+/*
+* Copyright (c) 2007 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 of mediafiledialog. UI control of mediafilelist
+*
+*/
+
+
+
+
+#ifndef MEDIALFILEDIALOG_H
+#define MEDIALFILEDIALOG_H
+
+
+//  INCLUDES
+#include "mediafiledialogutils.h"
+#include "mediafilepreview.h"
+#include "mediafilehandler.h"
+#include "mediafiledialogstate.h"
+#include "mediafilewaitnote.h"
+
+
+#include <e32base.h>
+#include <aknlists.h>
+#include <AknDialog.h>
+#include <AknInfoPopupNoteController.h> // CAknInfoPopupNoteController
+#include <eikedwin.h>
+#include <aknsfld.h>
+#include <peninputsrveventhandler.h>
+#include <peninputclient.h>
+
+
+// CONSTANTS
+
+// CLASS DECLARATION
+class CMFDialogTest;
+class CMFProtectionHandler;
+class CAknInputBlock;
+class CVideoPreviewDialog;
+
+
+
+/**
+* CMFListHandlerObserver
+* 
+* CMFListHandler uses CMFListHandlerObserver to get listbox item texts.
+*/
+NONSHARABLE_CLASS (CMFListHandlerObserver)
+    {
+    public:
+        virtual TPtrC ConstructListboxItem( TInt aListIndex ) = 0;
+        virtual TInt ListboxItemCount() = 0;
+    };
+
+
+/**
+* CMFListHandler
+* 
+* This class is used as listbox model's item array. Listbox uses it to draw 
+* list items. CMFListHandler gets list item texts from CMediaFileHandler
+* (metadata query result). This way there is no need to copy all list items
+* into listbox model.  
+*/
+NONSHARABLE_CLASS (CMFListHandler) : public MDesCArray
+    {
+    public:
+	    static CMFListHandler* NewL();
+	    ~CMFListHandler();
+    private:	
+	    void ConstructL(void);
+        CMFListHandler();
+
+    public:  // from MDesCArray
+	    TInt MdcaCount() const;
+	    TPtrC16 MdcaPoint(TInt aIndex) const;
+
+    public:
+  	    void SetObserver( CMFListHandlerObserver* aObserver );
+	    static void Panic( TInt aReason );
+	    
+    private:
+	    CMFListHandlerObserver* iObserver;  // does not own
+    };
+
+
+
+
+
+
+/**
+* CMediaFileDialog
+*
+* CMediaFileDialog provides UI for selecting/previewing media files.
+*/
+NONSHARABLE_CLASS (CMediaFileDialog) :  public CAknDialog, 
+                                        public MEikListBoxObserver,
+                                        public MCoeForegroundObserver,
+                                        public CMFListHandlerObserver,
+                                        public MMediaFileHandlerObserver,
+                                        public MMFActiveCallerObserver,
+                                        public MPreviewHandlerObserver,
+                                        public MMediaFileWaitNoteObserver,
+                                        public MAdaptiveSearchTextObserver,  // not used
+                                        public MPenUiActivationHandler
+
+    {
+    
+#ifdef _DEBUG     
+    friend class CMFDialogTest;
+#endif    
+    
+    enum TListOperationType
+        {
+        EAttrSelect,
+        EAttrOpen,
+        EAttrClicked,
+        EAttrDoubleClicked
+        };
+
+    enum TDelayedOperationType
+        {
+        EAttrPreview,
+        EAttrSearch,
+        EAttrChangeCba
+        };
+
+
+    public:// Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+		static CMediaFileDialog* NewL();
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CMediaFileDialog();
+    
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CMediaFileDialog();
+	
+        /**
+        * By default Symbian OS constructor is private.
+        */
+        void ConstructL();
+
+	public:
+		TBool ShowDialogL( TDes* aFileName, TInt* aNullItem,
+		                   TInt* aInfo, TDes* aDesInfo );
+		
+		void SetAttrL( TInt aAttr, TInt aValue );
+		void SetAttrL( TInt aAttr, const TDesC& aValue );
+		void SetAttrL( TInt aAttr, TAny* aValue );
+        void SetNullItemL( const TDesC& aText, const TDesC& aMediaFile,
+	                       TInt aMediaFileType, TInt aIconId );
+		
+	private:
+        /**
+        * From MEikListBoxObserver, called by framework.
+        * @param aListBox.
+        * @param aEventType.
+		* @return None
+        */
+		void HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType );
+
+        /**
+        * From the base class.
+		* Called by framework before the dialog is shown.
+        * @param None
+		* @return None
+        */
+        void PreLayoutDynInitL();
+
+        /**
+        * From the base class.
+		* Called by framework before exiting the dialog.
+        * @param aButtonId Button id.
+		* @return ETrue to exit\ EFalse to not to exit.
+        */
+        TBool OkToExitL( TInt aButtonId );
+
+        /**
+        * From the base class.
+		* Called by framework for key event handling.
+        * @param aKeyEvent.
+		* @param aType.
+		* @return Return code.
+        */
+		TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+        /**
+        * From the base class.
+		* Called by framework when dialog is activated.
+        * @param None.
+		* @return None.
+        */
+		void ActivateL();
+
+		/**
+        * From the base class.
+		* Called by framework before menu is shown.
+        * @param aResourceId Menu resource id.
+		* @param aMenuPane Pointer to the menu.
+        * @return None.
+        */
+		void DynInitMenuPaneL( TInt aResourceID, CEikMenuPane* aMenuPane );
+
+		/**
+		* From the base class.
+		* Handles menu events.
+		* @param  aCommandId Command id.
+		* @return None.
+		*/
+		void ProcessCommandL( TInt aCommandId );
+		
+		/**
+		* From base class.
+		* Called when UI layout changes. 
+		* @param aType.
+    	* @return None.
+		*/
+        void HandleResourceChange( TInt aType );
+        
+        /** SetSizeAndPosition
+        * From CAknDialog.
+        * Sets dialog's size to whole main pane.
+        * @param aSize ignored
+        */
+        void SetSizeAndPosition( const TSize &aSize );
+        
+        SEikControlInfo CreateCustomControlL( TInt aControlType );
+        
+        virtual CCoeControl* ComponentControl( TInt aIndex ) const;
+        virtual TInt CountComponentControls() const;
+        
+
+    private:
+		TBool DoHandleOKL( TInt aAttr );
+		TBool HandleOKL( TInt aAttr );
+		TBool DoHandleBackL();
+		TBool HandleBackL();
+        void SearchL();
+        void DoSearchL();
+        static TInt StartRomScaning( TAny* aInstance );
+        void StartRomScan();
+
+    private:
+        void ResetDialogL( TInt aError);
+		void QueryL( TInt aFolderId, TBool aDatabaseChanged = EFalse );
+		void GetSelectedItemFileName( TInt aListboxIndex, TDes& aFileName );
+		TInt CurrentItemListIndex();
+		void SetIconsL();
+		CAknSearchField* FindBox() const;
+		void ResetFindBoxL();
+		void FindBoxCursorMoveL( TInt aType );
+		void ShowContextMenuL( TInt aResource );
+		void PreviewL( TInt aMediaType );
+		void PreviewVideoL( const TDesC& aFileName );
+		void PreviewNullItemL( TInt aFolderId );
+		void StartPreviewWithDelay();
+		void CancelPreview();
+		void StartSearchWithDelay();
+		TBool IsVideoFile( TInt aCurrentIndex );
+		TBool IsValidVideoFileL( TInt aCurrentIndex, TInt aIntention );
+		TInt MediaTypeIcon( TInt aListboxIndex );
+		TInt StorageTypeIcon( TInt aListboxIndex );
+		void GetListItemText( TInt aListboxIndex, TDes& aText );
+		
+    private:
+		void CheckListboxIndex();
+		void HandleMediaFileChanged();
+		
+    private:
+		void UpdateListBoxL( TBool aRestFindBox = ETrue );
+		void DoUpdateListBoxL( TBool aRestFindBox );
+		void UpdateCbaL( TInt aAttr );
+    	TInt MapAttribute( TInt aFolderId );
+		
+		void ShowErrorNoteL( TInt aError );
+    	void ShowPreviewErrorNoteL( TInt aError, TInt aMediaType );
+		void DeleteMenuItem( CEikMenuPane* aMenuPane, TInt aCommandId );
+		CGulIcon* IconL(TAknsItemID aId, const TDesC& aFileName, TInt aFileIndex,
+			TInt aFileMaskIndex);
+		CGulIcon* IconL(TAknsItemID aId, const TDesC& aFileName, TInt aFileIndex,
+			TInt aFileMaskIndex, TAknsQsnIconColorsIndex colorIndex);
+		static TInt CloseDialog( TAny *aObj );
+		void CloseDialogWithDelayL();
+		
+    private:
+        void ShowWaitNoteL( TBool aDatabaseChanged );
+		void ShowPopupNoteL( const TDesC& aText );
+		void ShowDetailsPopupL();
+		void GetPopupText( CMediaFileData* aData, TDes& aText );
+		TBool MatchFound( const TDesC& aAttribute, const TDesC& aText );
+		
+        /**
+        * Filters the invalid files from media file handler.
+        * @return None.
+        */
+		void FilterInvalidFiles();
+
+    private:
+		static void Panic( TInt aReason );
+
+    private:  // from CMFListHandlerObserver
+        TPtrC ConstructListboxItem( TInt aListboxIndex );
+        TInt ListboxItemCount();
+        
+    private:   // from MPreviewHandlerObserver
+        void HandlePreviewEventL( TInt aEvent, TInt aError );
+
+    private:   // from MMediaFileHandlerObserver
+        void HandleMFEventL( TInt aEvent, TInt aError );
+        
+    private:   // from MMFActiveCallerObserver
+        void HandleActiveCallL( TInt aCallId );
+        
+    private:  //from MCoeControlObserver
+        void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType );
+        
+    private:  // from MCoeForegroundObserver
+        void HandleGainingForeground();
+        void HandleLosingForeground();
+        
+    private:  // from MAdaptiveSearchTextObserver
+        void AdaptiveSearchTextChanged( CAknSearchField* aSearchField );
+        
+    private:  // from MPenUiActivationHandler
+        void OnPeninputUiDeactivated();
+        void OnPeninputUiActivated();
+        
+    private:  // MMediaFileWaitNoteObserver
+        void HandleWaitNoteL( TInt aButtonId );
+    
+#ifdef _DEBUG
+    private: // test code
+        CMFDialogTest* iTest;
+#endif
+   
+    private:
+		// listbox
+		CAknSingleGraphicStyleListBox* iListBox;
+
+		// for title and icon handling
+		CStatusPaneHandler* iStatusPaneHandler;
+
+		// long buffer for string handling
+		TBuf<KBufSize256> iBuf;
+		
+		// long buffer for string handling
+		TBuf<KBufSize256> iPopupText;
+		
+		// long buffers for listbox items
+		TBuf<KBufSize128> iListboxItemText1;
+		TBuf<KBufSize256> iListboxItemText2;
+		
+		// text from search field
+		TBuf<KBufSize128> iSearchText;
+	
+		// long buffers for icon file names
+		TFileName iIconFileName;
+		
+		// list box model item array
+		CMFListHandler* iMFListHandler;
+		
+		// dialog state
+		CMediaFileDialogState* iState;
+		
+		// metadata engine wrapper
+		CMediaFileHandler* iMediaFileHandler;
+		
+		// search box
+		CAknSearchField* iFindCtrl;
+		
+		// for generating active object calls
+		CMFActiveCaller* iCaller;
+		CMFActiveCaller* iSearchCaller;
+		
+		// for previewing video files
+		CMFVideoPreviewHandler* iVideoPreviewHandler;
+		
+		// for previewing audio files
+		CMFAudioPreviewHandler* iAudioPreviewHandler;
+        
+		// popup note
+        CAknInfoPopupNoteController* iPopupNote;
+
+		// cancel note in case database query takes more than 2 seconds
+		CMediaFileWaitNote* iWaitNote;
+	
+		// needed for finding out whether search field is in pen input mode
+		RPeninputServer iPeninputServer;
+		
+		// for file protection information (drm etc)
+		CMFProtectionHandler* iProtectionHandler;
+		
+		// for closing dialog
+		CIdle* iIdle;
+		
+		TBool ifilevalid;
+        // is dialog in foreground (visible)
+        TBool iForeGround;
+        
+        // dll resource file id
+        TInt iResourceFileId;
+        
+        // is metadata databse open
+        TBool iDatabaseOpen;
+        
+        // is pen input active
+        TBool iPeninputActive;
+
+        // dialog attribute values
+        HBufC* iNullItemFileNameOne;
+        HBufC* iNullItemFileNameTwo;
+        TInt iNullItemFileTypeOne;
+        TInt iNullItemFileTypeTwo;
+        TBuf<KBufSize128> iDialogTitle;
+        
+        CAknInputBlock* iInputBlock;
+		
+		// dialog output parameters
+		
+		// selected media file
+	    TDes* iFileName;
+	    // selected null item
+	    TInt*iNullItem;
+	    // extra parameter for later use
+	    TInt* iInfo;
+	    // extra parameter for later use
+	    TDes* iDesInfo;
+	    //is double clicked the item of the listbox
+	    TBool iIsDoubleClicked;
+	    TBool iFileisvalid;
+	    // Video preview dialogue, model dialog
+	    CVideoPreviewDialog* iVideoPreviewDlg;
+    };
+
+
+
+/**
+* CFindControl
+*
+* Search field functionality (CFindControl) is copied from
+* AknSelectionLis (s60/mw/classicui/uifw/AvKon/src/AknSelectionList.cpp).
+* Example code can also be found in 
+* s60/app/imppapplications/wvuing/wvuiave/AppSrc/CCAContactSelectionDialog.cpp
+*/
+NONSHARABLE_CLASS (CFindControl) : public CCoeControl 
+    {
+public:
+    CAknSearchField *iFind;
+    ~CFindControl() { delete iFind; }
+    void Draw(const TRect &) const
+        {
+        // this removes flicker from CEikDialog's Draw().
+        }
+    void SizeChanged()
+        {
+        TRect mainPane;
+        AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPane );
+        
+        TAknLayoutRect listRect;
+    
+        listRect.LayoutRect( mainPane, AknLayout::list_gen_pane(0) );
+
+        TRect r( listRect.Rect() );
+        iPosition = TPoint( r.iTl );
+        iSize.SetSize( r.Width(), r.Height() );
+        }
+
+    TSize MinimumSize()
+        {
+        if ( iFind )
+            {
+            if ( iFind->Size() != TSize( 0, 0 ) )
+                {
+                return iFind->Size();
+                }
+            }
+            
+        return iSize;
+        }
+    };
+
+
+
+
+#endif      // MEDIALFILEDIALOG_H
+            
+// End of File