--- /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