//////////////////////////////////////////////////////////////////////////// // // Crytek Engine Source File. // Copyright (C), Crytek Studios, 2002. // ------------------------------------------------------------------------- // File name: customfiledialog.h // Version: v1.00 // Created: 3/9/2003 by Timur. // Compilers: Visual Studio.NET // Description: Custom Dialog for opening files. // ------------------------------------------------------------------------- // History: // //////////////////////////////////////////////////////////////////////////// #ifndef __customfiledialog_h__ #define __customfiledialog_h__ #pragma once #include "XTToolkit.h" #include "Controls\CustomComboBoxEx.h" #include "Controls\PreviewModelCtrl.h" #include "Util\FileUtil.h" // forward declaration. struct ISound; ////////////////////////////////////////////////////////////////////////// class CFilesListCtrl : public CXTListCtrl { protected: virtual BOOL PreTranslateMessage(MSG* pMsg); afx_msg UINT OnGetDlgCode(); DECLARE_MESSAGE_MAP() }; ////////////////////////////////////////////////////////////////////////// /*! CCustomFileDialog Custom file selection dialog. */ class CCustomFileDialog : public CXTResizeDialog { DECLARE_DYNAMIC(CCustomFileDialog) public: /*! FileOpenDialogParams structure specify parameters for CutsomFileDialog. */ struct OpenParams { ECustomFileType filetype; //! Type of file to open. CString filter; //! Filter for opening files. CString initialDir; //! Directory to start in, leave empty for default. CString initialFile; //! Select initial file. bool bMultiSelection;//! Allow to select miltiple files. OpenParams() { filetype = EFILE_TYPE_ANY; bMultiSelection = false; } }; CCustomFileDialog( OpenParams &fp,CWnd* pParent = NULL); // standard constructor virtual ~CCustomFileDialog(); // Get selected filename (Not include path); CString GetFileName() const; CString GetFilePath() const; // Get number of selected files. int GetSelectedCount() const; CString GetSelectedFile( int nIndex ) const; // Dialog Data enum { IDD = IDD_FILE_BROWSER }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support DECLARE_MESSAGE_MAP() virtual BOOL OnInitDialog(); virtual void OnOK(); virtual void OnCancel(); ////////////////////////////////////////////////////////////////////////// // METHODS. ////////////////////////////////////////////////////////////////////////// void FillFiles(); bool ScanDirectory( const CString &dir ); void AddFilteredFiles( const CString &searchFilter ); void SetCurrentDir( const CString &dir,bool bRememberPrevious=true ); void SetCurrentFile( const CString &file ); void SelectItem( int item ); void RefreshDirectory(); void ParseFilter( const CString &filter ); void ActivateItem( int ); void PreviewItem( int item ); void PreviewOff(); void LoadHistory(); void SaveHistory(); void FillLookinControl(); void InitShortcuts(); ////////////////////////////////////////////////////////////////////////// // MESSAGE HANDLERS. ////////////////////////////////////////////////////////////////////////// afx_msg void OnBnClickedBack(); afx_msg void OnNMDblclkFilelist(NMHDR *pNMHDR, LRESULT *pResult); afx_msg void OnLvnItemChangedFilelist(NMHDR *pNMHDR, LRESULT *pResult); afx_msg void OnBnClickedUp(); afx_msg void OnCbnSelendokHistory(); afx_msg void OnCbnSelendokFilestype(); afx_msg void OnCbnSelendokFilename(); afx_msg void OnLvnKeydownFilelist(NMHDR *pNMHDR, LRESULT *pResult); afx_msg void OnCbnSelendokLookin(); afx_msg void OnCbenEndeditFilename(NMHDR *pNMHDR, LRESULT *pResult); afx_msg LRESULT OnOutbarNotify( WPARAM lParam, LPARAM wParam); afx_msg void OnBnClickedPreviewOn(); ////////////////////////////////////////////////////////////////////////// // CONTROLS. ////////////////////////////////////////////////////////////////////////// CComboBox m_historyCtrl; CXTComboBoxEx m_lookinCtrl; CFilesListCtrl m_fileListCtrl; CXTOutlookBar m_shortcutsCtrl; CCustomComboBoxEx m_filenameCtrl; CComboBox m_filesTypeCtrl; CCustomButton m_btnBack; CCustomButton m_btnUp; CStatic m_fileInfoCtrl; CImageList m_imageListFiles; CButton m_previewOn; ////////////////////////////////////////////////////////////////////////// // Preview ////////////////////////////////////////////////////////////////////////// CPreviewModelCtrl m_previewCtrl; CStatic m_previewImageCtrl; CBitmap m_previewBitmap; CRect m_rcPreview; _smart_ptr m_pSound; ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // VARIABLES. ////////////////////////////////////////////////////////////////////////// OpenParams &m_fp; ICryPak *m_pIPak; // Current directory description. struct FileInfo { CString filename; unsigned attrib; time_t time_create; /* -1 for FAT file systems */ time_t time_access; /* -1 for FAT file systems */ time_t time_write; _fsize_t size; }; static bool FileInfoCompare( const FileInfo &f1,const FileInfo &f2 ); std::vector m_files; CString m_currentDir; CString m_currentFile; // List of multiple selected files. std::vector m_selectedFiles; ////////////////////////////////////////////////////////////////////////// // File Filter. ////////////////////////////////////////////////////////////////////////// struct FileFilter { CString description; std::vector filters; // Actual array of filters. }; std::vector m_fileFilters; // Current filter. int m_currentFilter; CString m_overrideFilter; std::vector m_directoryStack; ////////////////////////////////////////////////////////////////////////// // Shortcuts. ////////////////////////////////////////////////////////////////////////// struct ShortcutInfo { CString directory; CString name; UINT nIconID; ShortcutInfo() { nIconID = 0; }; ShortcutInfo( const char *sName,const char *sDir,UINT nIcon ) { name = sName; directory = sDir; nIconID = nIcon; } }; typedef std::vector Shortcuts; Shortcuts m_shortcuts[EFILE_TYPE_LAST]; ////////////////////////////////////////////////////////////////////////// // Maps extenstions to icons. std::map m_extToIcons; ////////////////////////////////////////////////////////////////////////// // History. ////////////////////////////////////////////////////////////////////////// static bool m_bPreviewOn; }; #endif // __customfiledialog_h__