summaryrefslogtreecommitdiff
path: root/public/dme_controls/AssetBuilder.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/dme_controls/AssetBuilder.h')
-rw-r--r--public/dme_controls/AssetBuilder.h218
1 files changed, 218 insertions, 0 deletions
diff --git a/public/dme_controls/AssetBuilder.h b/public/dme_controls/AssetBuilder.h
new file mode 100644
index 0000000..f07db07
--- /dev/null
+++ b/public/dme_controls/AssetBuilder.h
@@ -0,0 +1,218 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef ASSETBUILDER_H
+#define ASSETBUILDER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "vgui_controls/Frame.h"
+#include "vgui_controls/FileOpenStateMachine.h"
+#include "vgui_controls/PHandle.h"
+#include "datamodel/dmehandle.h"
+#include "tier1/utlstack.h"
+
+
+//-----------------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------------
+namespace vgui
+{
+ class IScheme;
+ class ListPanel;
+ class Menu;
+ class MenuButton;
+ class Splitter;
+ class FileOpenStateMachine;
+ class PropertySheet;
+ class PropertyPage;
+}
+
+class CDmePanel;
+class CCompileStatusBar;
+class CDmeMakefile;
+class CDmeSource;
+struct DmeMakefileType_t;
+enum CompilationState_t;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Asset builder
+//-----------------------------------------------------------------------------
+class CAssetBuilder : public vgui::EditablePanel
+{
+ DECLARE_CLASS_SIMPLE( CAssetBuilder, EditablePanel );
+
+public:
+ CAssetBuilder( vgui::Panel *pParent, const char *pPanelName );
+ virtual ~CAssetBuilder();
+
+ // Inherited from vgui::Frame
+ virtual void OnCommand( const char *pCommand );
+ virtual void OnKeyCodeTyped( vgui::KeyCode code );
+ virtual void OnTick();
+
+ void SetRootMakefile( CDmeMakefile *pMakeFile );
+ void SetCurrentMakefile( CDmeMakefile *pMakeFile );
+ void SetDmeElement( CDmeMakefile *pMakeFile );
+ CDmeMakefile *GetMakeFile();
+ CDmeMakefile *GetRootMakeFile();
+
+ void Refresh();
+
+ // Default behavior is to destroy the makefile when we close
+ void DestroyMakefileOnClose( bool bEnable );
+
+ /*
+ messages sent:
+ "DmeElementChanged" The makefile has been changed
+ */
+
+private:
+ MESSAGE_FUNC_PARAMS( OnItemSelected, "ItemSelected", kv );
+ MESSAGE_FUNC_PARAMS( OnItemDeselected, "ItemDeselected", kv );
+ MESSAGE_FUNC_PARAMS( OnFileSelected, "FileSelected", kv );
+ MESSAGE_FUNC_PARAMS( OnOpenContextMenu, "OpenContextMenu", kv );
+ MESSAGE_FUNC_PARAMS( OnPicked, "Picked", kv );
+ MESSAGE_FUNC( SetDirty, "DmeElementChanged" );
+ MESSAGE_FUNC( OnAddSource, "AddSource" );
+ MESSAGE_FUNC( OnNewSourceFile, "NewSourceFile" );
+ MESSAGE_FUNC( OnLoadSourceFile, "LoadSourceFile" );
+ MESSAGE_FUNC( OnEditSourceFile, "EditSourceFile" );
+ MESSAGE_FUNC( OnRemoveSource, "RemoveSource" );
+ MESSAGE_FUNC( OnBrowseSourceFile, "BrowseSourceFile" );
+ MESSAGE_FUNC( OnZoomInSource, "ZoomInSource" );
+ MESSAGE_FUNC( OnZoomOutSource, "ZoomOutSource" );
+
+ void OnCompile();
+ void OnAbortCompile();
+ void OnPublish();
+
+ // Called to create a new makefile
+ void OnNewSourceFileSelected( const char *pFileName, KeyValues *pDialogKeys );
+
+ // Called when a list panel's selection changes
+ void OnSourceItemSelectionChanged( );
+
+ // Refresh the source list
+ void RefreshSourceList( );
+
+ // Refreshes the output list
+ void RefreshOutputList();
+
+ // Selects a particular source
+ void SelectSource( CDmeSource *pSource );
+
+ // Called when the source file name changes
+ void OnSourceFileNameChanged( const char *pFileName );
+
+ // Called when we're browsing for a source file and one was selected
+ void OnSourceFileAdded( const char *pFileName, const char *pTypeName );
+
+ // Shows the source file browser
+ void ShowSourceFileBrowser( const char *pTitle, DmeMakefileType_t *pSourceType, KeyValues *pDialogKeys );
+
+ // Make all outputs writeable
+ void MakeOutputsWriteable( );
+
+ // Cleans up the context menu
+ void CleanupContextMenu();
+
+ // Removes a makefile from memory
+ void CleanupMakefile();
+
+ // Builds a unique list of file IDs
+ void BuildFileIDList( CDmeMakefile *pMakeFile, CUtlVector<DmFileId_t> &fileIds );
+
+ // Selects a particular row of the source list
+ void SelectSourceListRow( int nRow );
+
+ // Returns the curerntly selected row
+ int GetSelectedRow( );
+
+ // Finishes compilation
+ void FinishCompilation( CompilationState_t state );
+
+ // Returns the selected source (if there's only 1 source selected)
+ CDmeSource *GetSelectedSource( );
+ KeyValues *GetSelectedSourceKeyvalues( );
+
+ vgui::PropertySheet *m_pInputOutputSheet;
+ vgui::PropertyPage *m_pInputPage;
+ vgui::PropertyPage *m_pOutputPage;
+ vgui::PropertyPage *m_pCompilePage;
+ vgui::PropertyPage *m_pOutputPreviewPage;
+
+ vgui::Splitter *m_pPropertiesSplitter;
+ vgui::ListPanel *m_pSourcesList;
+ vgui::ListPanel *m_pOutputList;
+ CDmePanel *m_pDmePanel;
+ CDmePanel *m_pOututPreviewPanel;
+ vgui::TextEntry *m_pCompileOutput;
+ vgui::Button *m_pCompile;
+ vgui::Button *m_pPublish;
+ vgui::Button *m_pAbortCompile;
+ vgui::DHANDLE< vgui::Menu > m_hContextMenu;
+ CCompileStatusBar *m_pCompileStatusBar;
+
+ CDmeHandle< CDmeMakefile > m_hRootMakefile;
+ CDmeHandle< CDmeMakefile > m_hMakefile;
+ CUtlStack< CDmeHandle< CDmeMakefile > > m_hMakefileStack;
+ bool m_bIsCompiling : 1;
+ bool m_bDestroyMakefileOnClose : 1;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Asset builder frame
+//-----------------------------------------------------------------------------
+class CAssetBuilderFrame : public vgui::Frame, public vgui::IFileOpenStateMachineClient
+{
+ DECLARE_CLASS_SIMPLE( CAssetBuilderFrame, vgui::Frame );
+
+public:
+ CAssetBuilderFrame( vgui::Panel *pParent, const char *pTitle );
+ virtual ~CAssetBuilderFrame();
+
+ // Inherited from IFileOpenStateMachineClient
+ virtual void SetupFileOpenDialog( vgui::FileOpenDialog *pDialog, bool bOpenFile, const char *pFileFormat, KeyValues *pContextKeyValues );
+ virtual bool OnReadFileFromDisk( const char *pFileName, const char *pFileFormat, KeyValues *pContextKeyValues );
+ virtual bool OnWriteFileToDisk( const char *pFileName, const char *pFileFormat, KeyValues *pContextKeyValues );
+
+protected:
+ // Call to change the makefile
+ void Reset( CDmeMakefile *pMakefile );
+
+ CAssetBuilder *m_pAssetBuilder;
+
+private:
+ MESSAGE_FUNC( OnDmeElementChanged, "DmeElementChanged" );
+ MESSAGE_FUNC( OnFileNew, "FileNew" );
+ MESSAGE_FUNC( OnFileOpen, "FileOpen" );
+ MESSAGE_FUNC( OnFileSave, "FileSave" );
+ MESSAGE_FUNC( OnFileSaveAs, "FileSaveAs" );
+ MESSAGE_FUNC_PARAMS( OnPicked, "Picked", kv );
+ MESSAGE_FUNC_PARAMS( OnFileSelected, "FileSelected", kv );
+ MESSAGE_FUNC_PARAMS( OnFileStateMachineFinished, "FileStateMachineFinished", kv );
+ MESSAGE_FUNC_PARAMS( OnPerformFileNew, "PerformFileNew", kv );
+
+ // Updates the file name
+ MESSAGE_FUNC( UpdateFileName, "UpdateFileName" );
+
+ // Shows a picker for creating a new asset
+ void ShowNewAssetPicker( );
+
+ // Marks the file dirty ( or not )
+ void SetDirty( bool bDirty );
+ bool IsDirty() const;
+
+ vgui::FileOpenStateMachine *m_pFileOpenStateMachine;
+ CUtlString m_TitleString;
+};
+
+
+#endif // ASSETBUILDER_H