|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Declaration of FileOpenDialog class, a generic open/save as file dialog
//
// $NoKeywords: $
//===========================================================================//
#ifndef FILEOPENDIALOG_H
#define FILEOPENDIALOG_H
#ifdef _WIN32
#pragma once
#endif
#include "vgui_controls/Frame.h"
namespace vgui {
class FileCompletionEdit; // local
class InputDialog;
//-----------------------------------------------------------------------------
// Purpose: generic open/save as file dialog
//-----------------------------------------------------------------------------
enum FileOpenDialogType_t { FOD_SAVE = 0, FOD_OPEN, FOD_SELECT_DIRECTORY, };
class FileOpenDialog : public vgui::Frame { DECLARE_CLASS_SIMPLE( FileOpenDialog, Frame );
public: // NOTE: Backward compat constructor
FileOpenDialog( Panel *parent, const char *title, bool bOpenFile, KeyValues *pContextKeyValues = 0 );
// The context keyvalues are added to all messages sent by this dialog if they are specified
FileOpenDialog( Panel *parent, const char *title, FileOpenDialogType_t type, KeyValues *pContextKeyValues = 0 ); ~FileOpenDialog();
// Set the directory the file search starts in
void SetStartDirectory(const char *dir);
// Sets the start directory context (and resets the start directory in the process)
// NOTE: If you specify a startdir context, then if you've already opened
// a file with that same start dir context before, it will start in the
// same directory it ended up in.
void SetStartDirectoryContext( const char *pContext, const char *pDefaultDir );
// Add filters for the drop down combo box
// The filter info, if specified, gets sent back to the app in the FileSelected message
void AddFilter( const char *filter, const char *filterName, bool bActive, const char *pFilterInfo = NULL );
// Activate the dialog
// NOTE: The argument is there for backward compat
void DoModal( bool bUnused = false );
// Get the directory this is currently in
void GetCurrentDirectory( char *buf, int bufSize );
// Get the last selected file name
void GetSelectedFileName( char *buf, int bufSize );
/*
messages sent: "FileSelected" "fullpath" // specifies the fullpath of the file
"filterinfo" // Returns the filter info associated with the active filter
"FileSelectionCancelled" */
protected: virtual void OnCommand( const char *command ); virtual void ApplySchemeSettings(IScheme *pScheme); virtual void OnClose(); virtual void OnKeyCodeTyped(KeyCode code);
// handles the open button being pressed
// checks on what has changed and acts accordingly
MESSAGE_FUNC( OnOpen, "OnOpen" ); MESSAGE_FUNC( OnSelectFolder, "SelectFolder" ); MESSAGE_FUNC( OnFolderUp, "OnFolderUp" ); MESSAGE_FUNC( OnNewFolder, "OnNewFolder" ); MESSAGE_FUNC( OnOpenInExplorer, "OpenInExplorer" );
MESSAGE_FUNC( PopulateFileList, "PopulateFileList" ); MESSAGE_FUNC( PopulateDriveList, "PopulateDriveList" ); MESSAGE_FUNC( PopulateFileNameCompletion, "PopulateFileNameCompletion" );
// moves the directory structure up
virtual void MoveUpFolder();
// validates that the current path is valid
virtual void ValidatePath();
// handles an item in the list being selected
MESSAGE_FUNC( OnItemSelected, "ItemSelected" ); MESSAGE_FUNC( OnListItemSelected, "ListItemSelected" ) { OnItemSelected(); }
// changes directories in response to selecting drives from the combo box
MESSAGE_FUNC_PARAMS( OnTextChanged, "TextChanged", kv );
MESSAGE_FUNC( OnInputCanceled, "InputCanceled" ); MESSAGE_FUNC_PARAMS( OnInputCompleted, "InputCompleted", data );
private: // Necessary because we have 2 constructors
void Init( const char *title, KeyValues *pContextKeyValues );
// Does the specified extension match something in the filter list?
bool ExtensionMatchesFilter( const char *pExt );
// Choose the first non *.* filter in the filter list
void ChooseExtension( char *pExt, int nBufLen );
// Saves the file to the start dir context
void SaveFileToStartDirContext( const char *pFullPath );
// Posts a file selected message
void PostFileSelectedMessage( const char *pFileName );
// Creates a new folder
void NewFolder( char const *folderName );
vgui::ComboBox *m_pFullPathEdit; vgui::ListPanel *m_pFileList; FileCompletionEdit *m_pFileNameEdit;
vgui::ComboBox *m_pFileTypeCombo; vgui::Button *m_pOpenButton; vgui::Button *m_pCancelButton; vgui::Button *m_pFolderUpButton; vgui::Button *m_pNewFolderButton; vgui::Button *m_pOpenInExplorerButton; vgui::ImagePanel *m_pFolderIcon; vgui::Label *m_pFileTypeLabel;
KeyValues *m_pContextKeyValues;
char m_szLastPath[1024]; unsigned short m_nStartDirContext; FileOpenDialogType_t m_DialogType; bool m_bFileSelected : 1;
VPANEL m_SaveModal; vgui::DHANDLE< vgui::InputDialog > m_hInputDialog; };
} // namespace vgui
#endif // FILEOPENDIALOG_H
|