Files
FC1/Editor/CustomFileDialog.h
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

219 lines
6.5 KiB
C++

////////////////////////////////////////////////////////////////////////////
//
// 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<CXTComboBoxEx> 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<ISound> 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<FileInfo> m_files;
CString m_currentDir;
CString m_currentFile;
// List of multiple selected files.
std::vector<CString> m_selectedFiles;
//////////////////////////////////////////////////////////////////////////
// File Filter.
//////////////////////////////////////////////////////////////////////////
struct FileFilter
{
CString description;
std::vector<CString> filters; // Actual array of filters.
};
std::vector<FileFilter> m_fileFilters;
// Current filter.
int m_currentFilter;
CString m_overrideFilter;
std::vector<CString> 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<ShortcutInfo> Shortcuts;
Shortcuts m_shortcuts[EFILE_TYPE_LAST];
//////////////////////////////////////////////////////////////////////////
// Maps extenstions to icons.
std::map<CString,UINT> m_extToIcons;
//////////////////////////////////////////////////////////////////////////
// History.
//////////////////////////////////////////////////////////////////////////
static bool m_bPreviewOn;
};
#endif // __customfiledialog_h__