chxavfileui.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:6k
源码类别:

Symbian

开发平台:

C/C++

  1. /************************************************************************
  2.  * chxavfileui.h
  3.  * -------------
  4.  *
  5.  * Synopsis:
  6.  * 
  7.  *
  8.  * Target:
  9.  * Symbian OS
  10.  *
  11.  *
  12.  * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
  13.  *
  14.  ************************************************************************/
  15. #ifndef _chxavfileui_h_
  16. #define _chxavfileui_h_
  17. // Symbian includes...
  18. // Helix includes...
  19. #include "hxstring.h"
  20. // Includes from this project...
  21. #include "chxavnamedisplaytrait.h"
  22. #include "chxavfilestore.h"
  23. #include "chxavrefptr.h"
  24. #include "chxavwaitnote.h"
  25. // forward decl
  26. class CHXAvPlayerUI;
  27. // class CHXAvFileUI
  28. class CHXAvFileUI
  29. : public CHXBody
  30. , private CHXAvNameDisplayTrait
  31. , public FileStoreOperationObserver
  32. {
  33. public:
  34. // ctor and dtor
  35.     CHXAvFileUI(bool bHideExtensions = true);
  36.     virtual ~CHXAvFileUI();
  37.     void ConstructL(CHXAvPlayerUI* playerUI, const CHXAvFileStorePtr& spStore);
  38.     void SetHideExtensions(bool bHide);
  39.     CHXAvFileStorePtr GetStore();
  40.    
  41.     const TDesC& GetLastNewItemName() const;
  42. // ui interactions for file
  43.     TInt DoNewFolderL(TInt resIdPrompt);
  44.     TInt DoMoveItemL(TInt idxItem, 
  45.     TInt resIdPrompt);
  46.     TInt DoMoveItemsL(const CArrayFix<TInt>& items, 
  47.     TInt resIdPrompt);
  48.     TInt DoDeleteItemL(TInt idxItem);
  49.     TInt DoDeleteItemsL(const CArrayFix<TInt>& items);
  50.     TInt DoRenameL(TInt idxItem, TInt resIdPrompt);
  51.     TInt DoCreateLinkL(const CHXString& url, const TDesC& defaultName);
  52.     TInt DoSavePlaylistL(const TDesC& fullPathSource, const TDesC& defaultName);
  53.     TInt DoSaveClipL(const TDesC& fullPathSource, const TDesC& defaultName);
  54. #if(0)
  55.     TInt DoCopyItemL(TInt idxItem, 
  56.     TInt resIdPrompt);
  57.     TInt DoCopyItemsL(const CArrayFix<TInt>& items, 
  58.     TInt resIdPrompt);
  59. #endif
  60.   
  61. protected:
  62. // FileStoreOperationObserver
  63.     void OnFileOpStart(FileStoreOperationObserver::OperationType type, const TDesC& source, const TDesC& target);
  64.     bool OnFileOpTick(FileStoreOperationObserver::OperationType type, const TDesC& source, const TDesC& target, TInt64 cbCopied);
  65.     void OnFileOpEnd(FileStoreOperationObserver::OperationType type, TInt err, const TDesC& source, const TDesC& target);
  66. // for CopyFileL()
  67. struct CopyFileResourceIds
  68. {
  69.     TInt idPromptTargetName;
  70.     TInt idPromptTargetPath;
  71.     TInt idPromptTargetPathSelectButtonText;
  72.     TInt idInfoNowCopying;
  73.     TInt idInfoConfirmCopy;
  74.     TInt idInfoCopyFailed;
  75. };
  76. protected:
  77. // implementation helpers
  78.     enum QueryTargetNameFlags
  79.     {
  80.         fWantFolder = 0x01,
  81.         fSuggestUniqueDefaultName = 0x02,
  82.         fDisallowFileOverwrite = 0x04
  83.         //fCancelIfSameName = 0x08
  84.     };
  85.     enum QueryTargetNameResult
  86.     {
  87.         qtrPathTooLong,
  88.         qtrAbort,
  89.         qtrUnique,
  90.         qtrOverwrite
  91.     };
  92.     
  93.     TInt DoCopyFileL(const TDesC& fullPathSource, const CopyFileResourceIds& resIds, const TDesC& targetName);
  94.     TInt DoCopyFileL(const TDesC& pathDest,  const TDesC& fullPathSource, const CopyFileResourceIds& resIds, const TDesC& targetName);
  95.     TInt DoCopyFileHelperL(const TDesC& pathDest, 
  96. const TDesC& fullPathSource,
  97.                                 const CopyFileResourceIds& resIds,bool bAllowOverwrite);
  98.     bool DoGetTargetFolderPathL(TInt resIdPrompt, TInt resIdSelectButton);
  99.     TInt DoMoveItemL(const TDesC& pathDest, TInt idxItem);
  100.     TInt DoMoveItemsL(const TDesC& pathDest, const CArrayFix<TInt>& items);
  101.     TInt DoCreateLinkL(const TDesC& folder, const CHXString& url, const TDesC& defaultName);
  102.     QueryTargetNameResult QueryTargetNameL(const TDesC& prompt,const TDesC& pathDest, const TDesC& defaultName,TUint flags);
  103.     TFileName* AllocSuggestedFileNameL(const TDesC& pathDest, const TDesC& defaultName, TUint flags );
  104.     void HandleDiskFullCase(TInt err);
  105. protected:
  106. // disallow copy
  107.     CHXAvFileUI& operator=(const CHXAvFileUI& other);
  108.     CHXAvFileUI(const CHXAvFileUI& other);
  109. // implementation helpers
  110.     TPtrC NameFromIndex(TInt idxItem);
  111.     TInt MoveItemHelperL(const TDesC& pathDest, TInt idxItem);
  112.     TInt DoOverwriteMoveItemHelperL(const TDesC& pathDest, TInt idxItem);
  113.     TInt DoPromptMoveItemHelperL(const TDesC& pathDest, TInt idxItem);
  114.     void InitNameBufWithSuggestionL(const TDesC& pathDest, const TDesC& fileName, TUint flags);
  115.     void EnableWaitNoteCancelButtonL(bool bEnable);
  116.     void UserCancelPendingFileOp();
  117. private:
  118.      
  119.     CCoeEnv* m_pCone;
  120.     CHXAvPlayerUI* m_playerUI;
  121.     CHXAvFileStorePtr m_spStore;
  122.     // working buffers
  123.     TFileName m_targetFolderPath;
  124.     TFileName m_nameBuf;
  125.     refptr<HBufC>       m_spLastUniqueName;
  126.     CHXAvWaitNotePtr    m_spWaitNote;
  127.     bool    m_bIsCancelOpPending;
  128. };
  129. typedef CHXSmartPtr<CHXAvFileUI> CHXAvFileUIPtr;
  130. ////////////////////////////////////////////////////////////
  131. //
  132. inline
  133. void CHXAvFileUI::SetHideExtensions(bool bHide)
  134. {
  135.     CHXAvNameDisplayTrait::SetHideExtensions(bHide);
  136. }
  137. ////////////////////////////////////////////////////////////
  138. //
  139. inline
  140. CHXAvFileStorePtr CHXAvFileUI::GetStore()
  141. {
  142.     return m_spStore;
  143. }
  144. ////////////////////////////////////////////////////////////
  145. // after certain operations this contains the user-supplied
  146. // folder/file name applying to the operation
  147. //
  148. // name includes extension if relevant, e.g., 'foo.rm'
  149. //
  150. // *** only valid after rename or create folder
  151. //
  152. // name is full significant name (without path)
  153. //
  154. // e.g.:  'foo.rm', 'myfolder'
  155. // 
  156. // XXXLCM consider fixing rename, new folder and do away with this
  157. //
  158. inline
  159. const TDesC& CHXAvFileUI::GetLastNewItemName() const
  160. {
  161.     return *m_spLastUniqueName;
  162. }
  163. #endif //_chxavfileui_h_