aboutsummaryrefslogtreecommitdiff
path: root/mp/src/public/vgui_controls/FileOpenStateMachine.h
diff options
context:
space:
mode:
authorJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
committerJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
commit39ed87570bdb2f86969d4be821c94b722dc71179 (patch)
treeabc53757f75f40c80278e87650ea92808274aa59 /mp/src/public/vgui_controls/FileOpenStateMachine.h
downloadsource-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz
source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip
First version of the SOurce SDK 2013
Diffstat (limited to 'mp/src/public/vgui_controls/FileOpenStateMachine.h')
-rw-r--r--mp/src/public/vgui_controls/FileOpenStateMachine.h172
1 files changed, 172 insertions, 0 deletions
diff --git a/mp/src/public/vgui_controls/FileOpenStateMachine.h b/mp/src/public/vgui_controls/FileOpenStateMachine.h
new file mode 100644
index 00000000..bfbea715
--- /dev/null
+++ b/mp/src/public/vgui_controls/FileOpenStateMachine.h
@@ -0,0 +1,172 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// This is a helper class designed to help with the chains of modal dialogs
+// encountered when trying to open or save a particular file
+//
+//=============================================================================
+
+#ifndef FILEOPENSTATEMACHINE_H
+#define FILEOPENSTATEMACHINE_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "vgui_controls/Panel.h"
+#include "tier1/utlstring.h"
+
+//-----------------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------------
+
+
+namespace vgui
+{
+
+//-----------------------------------------------------------------------------
+// Interface for things using the file open state machine
+//-----------------------------------------------------------------------------
+abstract_class IFileOpenStateMachineClient
+{
+public:
+ // Called by to allow clients to set up the save dialog
+ virtual void SetupFileOpenDialog( vgui::FileOpenDialog *pDialog, bool bOpenFile, const char *pFileFormat, KeyValues *pContextKeyValues ) = 0;
+
+ // Called by to allow clients to actually read the file in
+ virtual bool OnReadFileFromDisk( const char *pFileName, const char *pFileFormat, KeyValues *pContextKeyValues ) = 0;
+
+ // Called by to allow clients to actually write the file out
+ virtual bool OnWriteFileToDisk( const char *pFileName, const char *pFileFormat, KeyValues *pContextKeyValues ) = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// This is a helper class designed to help with chains of modal dialogs
+//-----------------------------------------------------------------------------
+enum FileOpenStateMachineFlags_t
+{
+ FOSM_SHOW_PERFORCE_DIALOGS = 0x1,
+ FOSM_SHOW_SAVE_QUERY = 0x2,
+};
+
+class FileOpenStateMachine : public Panel
+{
+ DECLARE_CLASS_SIMPLE( FileOpenStateMachine, Panel );
+
+public:
+ enum CompletionState_t
+ {
+ IN_PROGRESS = 0, // Still not finished, not successful or error
+ SUCCESSFUL, // Operation finished successfully
+ FILE_SAVE_CANCELLED, // The user chose 'cancel' in the dialog asking if he wanted to save
+ FILE_SAVE_NAME_NOT_SPECIFIED, // User hit cancel in the SaveAs dialog
+ FILE_NOT_OVERWRITTEN, // Operation aborted; existed file and user chose to not write over it
+ FILE_NOT_CHECKED_OUT, // Operation aborted; file wasn't checked out so couldn't be written over
+ ERROR_WRITING_FILE, // Error occurred writing the file out
+ ERROR_MAKING_FILE_WRITEABLE, // Error occurred when making the file writeable
+ FILE_NOT_MADE_WRITEABLE, // User chose to not make the file be writeable
+ FILE_OPEN_NAME_NOT_SPECIFIED, // User hit cancel in the Open dialog
+ ERROR_READING_FILE, // Error occurred reading the file in
+ };
+
+ FileOpenStateMachine( vgui::Panel *pParent, IFileOpenStateMachineClient *pClient );
+ virtual ~FileOpenStateMachine();
+
+ // Opens a file, saves an existing one if necessary
+ void OpenFile( const char *pOpenFileType, KeyValues *pContextKeyValues, const char *pSaveFileName = NULL, const char *pSaveFileType = NULL, int nFlags = 0 );
+
+ // Version of OpenFile that skips browsing for a particular file to open
+ void OpenFile( const char *pOpenFileName, const char *pOpenFileType, KeyValues *pContextKeyValues, const char *pSaveFileName = NULL, const char *pSaveFileType = NULL, int nFlags = 0 );
+
+ // Used to save a specified file, and deal with all the lovely dialogs
+ // Pass in NULL to get a dialog to choose a filename to save
+ void SaveFile( KeyValues *pContextKeyValues, const char *pFileName, const char *pFileType, int nFlags = FOSM_SHOW_PERFORCE_DIALOGS );
+
+ // Returns the state machine completion state
+ CompletionState_t GetCompletionState();
+
+ /* MESSAGES SENT
+ "FileStateMachineFinished" - Called when we exit the state machine for any reason
+ "completionState" - See the CompletionState_t enum above
+ "wroteFile" - Indicates whether a file was written or not
+ "fullPath" - Indicates the full path of the file read for OpenFile or written for SaveFile
+ "fileType" - Indicates the file type of the file read for OpenFile or written for SaveFile
+ Use GetFirstTrueSubKey() to get the context passed into the OpenFile/SaveFile methods
+ */
+
+private:
+ enum FOSMState_t
+ {
+ STATE_NONE = -1,
+ STATE_SHOWING_SAVE_DIRTY_FILE_DIALOG = 0,
+ STATE_SHOWING_SAVE_DIALOG,
+ STATE_SHOWING_OVERWRITE_DIALOG,
+ STATE_SHOWING_CHECK_OUT_DIALOG,
+ STATE_SHOWING_MAKE_FILE_WRITEABLE_DIALOG,
+ STATE_WRITING_FILE,
+ STATE_SHOWING_PERFORCE_ADD_DIALOG,
+ STATE_SHOWING_OPEN_DIALOG,
+ STATE_READING_FILE,
+ };
+
+ MESSAGE_FUNC_PARAMS( OnFileSelected, "FileSelected", pKeyValues );
+ MESSAGE_FUNC( OnFileSelectionCancelled, "FileSelectionCancelled" );
+ MESSAGE_FUNC_PARAMS( OnPerforceQueryCompleted, "PerforceQueryCompleted", pKeyValues );
+ MESSAGE_FUNC( OnMakeFileWriteable, "MakeFileWriteable" );
+ MESSAGE_FUNC( OnCancelMakeFileWriteable, "CancelMakeFileWriteable" );
+
+ // These messages are related to the dialog in OverwriteFileDialog
+ MESSAGE_FUNC( OnOverwriteFile, "OverwriteFile" );
+ MESSAGE_FUNC( OnCancelOverwriteFile, "CancelOverwriteFile" );
+
+ // These messages come from the savedocumentquery dialog
+ MESSAGE_FUNC( OnSaveFile, "OnSaveFile" );
+ MESSAGE_FUNC( OnMarkNotDirty, "OnMarkNotDirty" );
+ MESSAGE_FUNC( OnCancelSaveDocument, "OnCancelSaveDocument" );
+
+ // Cleans up keyvalues
+ void CleanUpContextKeyValues();
+
+ // Utility to set the completion state
+ void SetCompletionState( CompletionState_t state );
+
+ // Show the save document query dialog
+ void ShowSaveQuery( );
+
+ // Shows the overwrite existing file dialog
+ void OverwriteFileDialog( );
+
+ // Shows the open file for edit dialog
+ void CheckOutDialog( );
+
+ // Shows the make file writeable dialog
+ void MakeFileWriteableDialog( );
+
+ // Writes the file out
+ void WriteFile();
+
+ // Shows the open file dialog
+ void OpenFileDialog( );
+
+ // Reads the file in
+ void ReadFile();
+
+ IFileOpenStateMachineClient *m_pClient;
+ KeyValues *m_pContextKeyValues;
+ FOSMState_t m_CurrentState;
+ CompletionState_t m_CompletionState;
+ CUtlString m_FileName;
+ CUtlString m_SaveFileType;
+ CUtlString m_OpenFileType;
+ CUtlString m_OpenFileName;
+ bool m_bShowPerforceDialogs : 1;
+ bool m_bShowSaveQuery : 1;
+ bool m_bIsOpeningFile : 1;
+ bool m_bWroteFile : 1;
+};
+
+} // end namespace vgui
+
+
+
+#endif // FILEOPENSTATEMACHINE_H