source-engine/utils/FileSystemOpenDialog/FileSystemOpenDlg.h

147 lines
3.7 KiB
C
Raw Permalink Normal View History

2020-04-23 00:56:21 +08:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
#if !defined(AFX_FILESYSTEMOPENDLG_H__01CFDE04_321F_4F1E_94ED_933B2B32C193__INCLUDED_)
#define AFX_FILESYSTEMOPENDLG_H__01CFDE04_321F_4F1E_94ED_933B2B32C193__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// FileSystemOpenDlg.h : header file
//
#include "utlvector.h"
#include "resource.h"
#include "filesystem.h"
/////////////////////////////////////////////////////////////////////////////
// CFileSystemOpenDlg dialog
class CWindowAnchor
{
public:
CWnd *m_pWnd;
int m_Side; //0=left, 1=top, 2=right, 3=bottom
int m_ParentSide; //which side to anchor to parent
int m_OriginalDist; //original distance from the parent side
};
class CFileInfo
{
public:
CFileInfo();
~CFileInfo();
bool m_bIsDir;
CString m_Name;
CBitmap *m_pBitmap;
};
class CFileSystemOpenDlg : public CDialog
{
friend class CFileSystemOpenDialogWrapper;
// Construction
public:
CFileSystemOpenDlg(CreateInterfaceFn factory, CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CFileSystemOpenDlg)
enum { IDD = IDD_FILESYSTEM_OPENDIALOG };
CEdit m_FilenameLabel;
CEdit m_FilenameControl;
CEdit m_LookInLabel;
CListCtrl m_FileList;
//}}AFX_DATA
void AddFileMask( const char *pMask );
void SetInitialDir( const char *pDir, const char *pPathID = NULL );
void SetFilterMdlAndJpgFiles( bool bFilter );
CString GetFilename() const; // Get the filename they chose.
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CFileSystemOpenDlg)
public:
virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
private:
enum GetEntriesMode_t
{
GETENTRIES_FILES_ONLY,
GETENTRIES_DIRECTORIES_ONLY
};
void GetEntries( const char *pMask, CUtlVector<CString> &entries, GetEntriesMode_t mode );
void PopulateListControl();
int SetupLabelImage( CFileInfo *pInfo, CString name, bool bIsDir );
void AddAnchor( int iDlgItem, int iSide, int anchorSide );
void ProcessAnchor( CWindowAnchor *pAnchor );
// Implementation
protected:
const char* GetPathID();
friend int CALLBACK FileListSortCallback( LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort );
friend class CFilenameShortcut;
CUtlVector<CWindowAnchor> m_Anchors;
enum
{
PREVIEW_IMAGE_SIZE=96
};
IFileSystem *m_pFileSystem;
// These are indexed by the lParam or userdata of each item in m_FileList.
CUtlVector<CFileInfo> m_FileInfos;
int m_iLabel_Folder;
int m_iLabel_Mdl;
int m_iLabel_File;
CBitmap m_BitmapMdl;
CBitmap m_BitmapFile;
CBitmap m_BitmapFolder;
CImageList m_ImageList;
CString m_CurrentDir;
CString m_Filename;
CString m_PathIDString;
CUtlVector<CString> m_FileMasks;
// If this is true, then we get rid of .mdl files if there is a corresponding .jpg file.
bool m_bFilterMdlAndJpgFiles;
// Generated message map functions
//{{AFX_MSG(CFileSystemOpenDlg)
virtual void OnOK();
virtual BOOL OnInitDialog();
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnDblclkFileList(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnUpButton();
afx_msg void OnItemchangedFileList(NMHDR* pNMHDR, LRESULT* pResult);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_FILESYSTEMOPENDLG_H__01CFDE04_321F_4F1E_94ED_933B2B32C193__INCLUDED_)