summaryrefslogtreecommitdiff
path: root/public/toolutils
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /public/toolutils
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'public/toolutils')
-rw-r--r--public/toolutils/AttributeElementChoiceList.h42
-rw-r--r--public/toolutils/BaseToolSystem.h326
-rw-r--r--public/toolutils/ConsolePage.h34
-rw-r--r--public/toolutils/DmeMdlRenderable.h171
-rw-r--r--public/toolutils/DmeRenderable.h340
-rw-r--r--public/toolutils/ToolEditMenuButton.h35
-rw-r--r--public/toolutils/ToolFileMenuButton.h104
-rw-r--r--public/toolutils/ToolHelpMenuButton.h32
-rw-r--r--public/toolutils/ToolMenuButton.h75
-rw-r--r--public/toolutils/ToolSwitchMenuButton.h32
-rw-r--r--public/toolutils/basepropertiescontainer.h27
-rw-r--r--public/toolutils/basestatusbar.h45
-rw-r--r--public/toolutils/enginetools_int.h41
-rw-r--r--public/toolutils/miniviewport.h43
-rw-r--r--public/toolutils/recentfilelist.h81
-rw-r--r--public/toolutils/savewindowpositions.h37
-rw-r--r--public/toolutils/toolmenubar.h71
-rw-r--r--public/toolutils/toolwindowfactory.h59
-rw-r--r--public/toolutils/vgui_tools.h29
19 files changed, 1624 insertions, 0 deletions
diff --git a/public/toolutils/AttributeElementChoiceList.h b/public/toolutils/AttributeElementChoiceList.h
new file mode 100644
index 0000000..0e1bbf1
--- /dev/null
+++ b/public/toolutils/AttributeElementChoiceList.h
@@ -0,0 +1,42 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef ATTRIBUTEELEMENTCHOICELIST_H
+#define ATTRIBUTEELEMENTCHOICELIST_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "dme_controls/inotifyui.h"
+#include "datamodel/dmehandle.h"
+
+
+//-----------------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------------
+class CDmElement;
+
+
+//-----------------------------------------------------------------------------
+// returns the choice string that AddElementsRecursively would have returned
+//-----------------------------------------------------------------------------
+const char *GetChoiceString( CDmElement *pElement );
+
+//-----------------------------------------------------------------------------
+// Recursively adds all elements of the specified type under pElement into the choice list
+//-----------------------------------------------------------------------------
+void AddElementsRecursively( CDmElement *pElement, ElementChoiceList_t &list, const char *pElementType = NULL );
+
+
+//-----------------------------------------------------------------------------
+// Recursively adds all elements of the specified type under pElement into the vector
+//-----------------------------------------------------------------------------
+void AddElementsRecursively( CDmElement *pElement, DmeHandleVec_t &list, const char *pElementType = NULL );
+
+
+#endif // ATTRIBUTEELEMENTCHOICELIST_H \ No newline at end of file
diff --git a/public/toolutils/BaseToolSystem.h b/public/toolutils/BaseToolSystem.h
new file mode 100644
index 0000000..26f38ca
--- /dev/null
+++ b/public/toolutils/BaseToolSystem.h
@@ -0,0 +1,326 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Core Movie Maker UI API
+//
+//=============================================================================
+
+#ifndef BASETOOLSYSTEM_H
+#define BASETOOLSYSTEM_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "tier1/interface.h"
+#include "toolframework/itoolsystem.h"
+#include "vgui/IScheme.h"
+#include "vgui_controls/EditablePanel.h"
+#include "vgui_controls/PHandle.h"
+#include "toolutils/recentfilelist.h"
+#include "vgui/keycode.h"
+#include "vgui_controls/fileopenstatemachine.h"
+
+
+// #defines
+#define TOGGLE_WINDOWED_KEY_CODE KEY_F11
+#define TOGGLE_WINDOWED_KEY_NAME "F11"
+
+#define TOGGLE_INPUT_KEY_CODE KEY_F10
+#define TOGGLE_INPUT_KEY_NAME "F10"
+
+//-----------------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------------
+class KeyValues;
+class CToolUI;
+class CToolMenuButton;
+class CMiniViewport;
+class IGlobalFlexController;
+
+namespace vgui
+{
+ class Panel;
+ class Menu;
+ class CKeyBoardEditorDialog;
+ class CKeyBindingHelpDialog;
+ enum KeyBindingContextHandle_t;
+ class IScheme;
+}
+
+
+//-----------------------------------------------------------------------------
+// Save document types
+//-----------------------------------------------------------------------------
+enum SaveDocumentCloseType_t
+{
+ SAVEDOC_QUIT_AFTER_SAVE = 0,
+ SAVEDOC_CLOSE_AFTER_SAVE,
+ SAVEDOC_LEAVEOPEN_AFTER_SAVE,
+ SAVEDOC_POSTCOMMAND_AFTER_SAVE, // Closes, then posts a command
+ SAVEDOC_LEAVEOPEN_POSTCOMMAND_AFTER_SAVE, // Leaves open, then posts a command
+};
+
+
+//-----------------------------------------------------------------------------
+// The toolsystem panel is the main panel in which the tool "ui" lives.
+// The tool "ui" encapsulates the main menu and a client area in which the
+// tools are drawn.
+// Usually, the workspace is the size of the entire screen
+// and the ui can be smaller than the toolsystem panel. The reason these are decoupled
+// is so that you can get the 'action' menu no matter where you click on the screen
+//-----------------------------------------------------------------------------
+class CBaseToolSystem : public vgui::EditablePanel, public IToolSystem, public vgui::IFileOpenStateMachineClient
+{
+ DECLARE_CLASS_SIMPLE( CBaseToolSystem, vgui::EditablePanel );
+
+public:
+ // Methods inherited from IToolSystem
+ virtual bool Init( );
+ virtual void Shutdown();
+ virtual bool ServerInit( CreateInterfaceFn serverFactory );
+ virtual bool ClientInit( CreateInterfaceFn clientFactory );
+ virtual void ServerShutdown();
+ virtual void ClientShutdown();
+ virtual bool CanQuit();
+ virtual void PostMessage( HTOOLHANDLE hEntity, KeyValues *message );
+ virtual void Think( bool finalTick );
+ virtual void ServerLevelInitPreEntity();
+ virtual void ServerLevelInitPostEntity();
+ virtual void ServerLevelShutdownPreEntity();
+ virtual void ServerLevelShutdownPostEntity();
+ virtual void ServerFrameUpdatePreEntityThink();
+ virtual void ServerFrameUpdatePostEntityThink();
+ virtual void ServerPreClientUpdate();
+ virtual void ServerPreSetupVisibility();
+ virtual const char* GetEntityData( const char *pActualEntityData );
+ virtual void ClientLevelInitPreEntity();
+ virtual void ClientLevelInitPostEntity();
+ virtual void ClientLevelShutdownPreEntity();
+ virtual void ClientLevelShutdownPostEntity();
+ virtual void ClientPreRender();
+ virtual void ClientPostRender();
+ virtual void OnToolActivate();
+ virtual void OnToolDeactivate();
+ virtual bool TrapKey( ButtonCode_t key, bool down );
+ virtual void AdjustEngineViewport( int& x, int& y, int& width, int& height );
+ virtual bool SetupEngineView( Vector &origin, QAngle &angles, float &fov );
+ virtual bool SetupAudioState( AudioState_t &audioState );
+ virtual bool ShouldGameRenderView();
+ virtual bool IsThirdPersonCamera();
+ virtual bool IsToolRecording();
+ virtual IMaterialProxy *LookupProxy( const char *proxyName );
+ virtual bool GetSoundSpatialization( int iUserData, int guid, SpatializationInfo_t& info );
+ virtual void HostRunFrameBegin();
+ virtual void HostRunFrameEnd();
+ virtual void RenderFrameBegin();
+ virtual void RenderFrameEnd();
+ virtual void VGui_PreRender( int paintMode );
+ virtual void VGui_PostRender( int paintMode );
+ virtual void VGui_PreSimulate();
+ virtual void VGui_PostSimulate();
+
+ // Inherited from vgui::Panel
+ virtual void OnMousePressed( vgui::MouseCode code );
+ virtual void OnThink();
+ virtual void ApplySchemeSettings( vgui::IScheme *pScheme);
+
+ // Inherited from IFileOpenStateMachineClient
+ virtual void SetupFileOpenDialog( vgui::FileOpenDialog *pDialog, bool bOpenFile, const char *pFileFormat, KeyValues *pContextKeyValues ) { Assert(0); }
+ virtual bool OnReadFileFromDisk( const char *pFileName, const char *pFileFormat, KeyValues *pContextKeyValues ) { Assert(0); return false; }
+ virtual bool OnWriteFileToDisk( const char *pFileName, const char *pFileFormat, KeyValues *pContextKeyValues ) { Assert(0); return false; }
+
+ MESSAGE_FUNC_INT( OnUnhandledMouseClick, "UnhandledMouseClick", code );
+
+public:
+ // Other methods
+ // NOTE: This name here is 'general' strictly so 'general' shows up in the keybinding dialog
+ CBaseToolSystem( char const *toolName = "#ToolGeneral" );
+
+ // Gets the action target to sent to panels so that the tool system's OnCommand is called
+ vgui::Panel *GetActionTarget();
+
+ // Gets at the action menu
+ vgui::Menu *GetActionMenu();
+
+ // Returns the client area
+ vgui::Panel* GetClientArea();
+
+ // Adds a menu button to the main menu bar
+ void AddMenuButton( CToolMenuButton *pMenuButton );
+
+ // Returns the current map name
+ char const *MapName() const;
+
+ // Derived classes implement this to create an action menu
+ // that appears if you right-click in the tool workspace
+ virtual vgui::Menu *CreateActionMenu( vgui::Panel *pParent ) { return NULL; }
+
+ // Derived classes implement this to create a custom menubar
+ virtual vgui::MenuBar *CreateMenuBar( CBaseToolSystem *pParent );
+ // Derived classes implement this to create status bar, can return NULL for no status bar in tool...
+ virtual vgui::Panel *CreateStatusBar( vgui::Panel *pParent );
+
+ virtual CMiniViewport *CreateMiniViewport( vgui::Panel *parent );
+
+ virtual void UpdateMenu( vgui::Menu *menu );
+
+ virtual void ShowMiniViewport( bool state );
+ void SetMiniViewportBounds( int x, int y, int width, int height );
+ void SetMiniViewportText( const char *pText );
+
+ void GetMiniViewportEngineBounds( int &x, int &y, int &width, int &height );
+ vgui::Panel *GetMiniViewport( void );
+
+ virtual void ComputeMenuBarTitle( char *buf, size_t buflen );
+
+ // Usage mode
+ void SetMode( bool bGameInputEnabled, bool bFullscreen );
+ bool IsFullscreen() const;
+ bool IsGameInputEnabled() const;
+ void EnableFullscreenToolMode( bool bEnable );
+
+ // Is this the active tool?
+ bool IsActiveTool( ) const;
+
+ // Returns the tool that had focus most recently
+ Panel *GetMostRecentlyFocusedTool();
+
+ void PostMessageToAllTools( KeyValues *message );
+
+protected:
+ virtual void PaintBackground();
+
+ // Derived classes must implement this to specify where in the
+ // registry to store registry settings
+ virtual const char *GetRegistryName() = 0;
+
+ // Derived classes must return the key bindings context
+ virtual const char *GetBindingsContextFile() = 0;
+
+ // Derived classes implement this to do stuff when the tool is shown or hidden
+ virtual void OnModeChanged() {}
+
+ // Derived classes can implement this to get a new scheme to be applied to this tool
+ virtual vgui::HScheme GetToolScheme() { return 0; }
+
+ // Derived classes can implement this to get notified when files are saved/loaded
+ virtual void OnFileOperationCompleted( const char *pFileType, bool bWroteFile, vgui::FileOpenStateMachine::CompletionState_t state, KeyValues *pContextKeyValues ) {}
+
+ // Used to open a specified file, and deal with all the lovely dialogs
+ void OpenFile( const char *pOpenFileType, const char *pSaveFileName = NULL, const char *pSaveFileType = NULL, int nFlags = 0, KeyValues *pKeyValues = NULL );
+ void OpenFile( const char *pOpenFileName, const char *pOpenFileType, const char *pSaveFileName = NULL, const char *pSaveFileType = NULL, int nFlags = 0, KeyValues *pKeyValues = NULL );
+
+ // 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
+ // Posts the keyvalues
+ void SaveFile( const char *pFileName, const char *pFileType, int nFlags, KeyValues *pKeyValues = NULL );
+
+ KEYBINDING_FUNC_NODECLARE( editkeybindings, KEY_E, vgui::MODIFIER_SHIFT | vgui::MODIFIER_CONTROL | vgui::MODIFIER_ALT, OnEditKeyBindings, "#editkeybindings_help", 0 );
+ KEYBINDING_FUNC( keybindinghelp, KEY_H, 0, OnKeyBindingHelp, "#keybindinghelp_help", 0 );
+
+ virtual char const *GetBackgroundTextureName();
+ virtual char const *GetLogoTextureName() = 0;
+
+ virtual bool HasDocument();
+
+ virtual void ToggleForceToolCamera();
+
+ // Shows, hides the tool ui (menu, client area, status bar)
+ void SetToolUIVisible( bool bVisible );
+
+ // Deals with keybindings
+ void LoadKeyBindings();
+ void ShowKeyBindingsEditor( vgui::Panel *panel, vgui::KeyBindingContextHandle_t handle );
+ void ShowKeyBindingsHelp( vgui::Panel *panel, vgui::KeyBindingContextHandle_t handle, vgui::KeyCode boundKey, int modifiers );
+ vgui::KeyBindingContextHandle_t GetKeyBindingsHandle();
+
+ // Registers tool window
+ void RegisterToolWindow( vgui::PHandle hPanel );
+ void UnregisterAllToolWindows();
+ void PostMessageToActiveTool( char const *msg, float delay = 0.0f );
+ void PostMessageToActiveTool( KeyValues *pKeyValues, float flDelay = 0.0f );
+
+protected:
+ // Recent file list
+ CRecentFileList m_RecentFiles;
+
+private:
+ // Shows/hides the tool
+ bool ShowUI( bool bVisible );
+
+ // Updates UI visibility
+ void UpdateUIVisibility();
+
+ // Create, destroy action menu
+ void InitActionMenu();
+ void ShutdownActionMenu();
+
+ // Positions the action menu when it's time to pop it up
+ void PositionActionMenu();
+
+ // Messages related to saving a file
+ MESSAGE_FUNC_PARAMS( OnFileStateMachineFinished, "FileStateMachineFinished", kv );
+
+ // Handlers for standard menus
+ MESSAGE_FUNC( OnClearRecent, "OnClearRecent" );
+ MESSAGE_FUNC( OnEditKeyBindings, "OnEditKeyBindings" );
+
+ // The root toolsystem panel which should cover the entire screen
+ // here to allow us to do action menus anywhere
+
+ // The tool UI
+ CToolUI *m_pToolUI;
+
+ // The action menu
+ vgui::DHANDLE<vgui::Menu> m_hActionMenu;
+
+ bool m_bGameInputEnabled;
+ bool m_bFullscreenMode;
+ bool m_bIsActive;
+ bool m_bFullscreenToolModeEnabled;
+
+ vgui::DHANDLE< CMiniViewport > m_hMiniViewport;
+ vgui::FileOpenStateMachine *m_pFileOpenStateMachine;
+ IMaterial *m_pBackground;
+ IMaterial *m_pLogo;
+
+ // Keybindings
+ vgui::KeyBindingContextHandle_t m_KeyBindingsHandle;
+ vgui::DHANDLE< vgui::CKeyBoardEditorDialog > m_hKeyBindingsEditor;
+ vgui::DHANDLE< vgui::CKeyBindingHelpDialog > m_hKeyBindingsHelp;
+ CUtlVector< vgui::PHandle > m_Tools;
+ vgui::PHandle m_MostRecentlyFocused;
+};
+
+
+//-----------------------------------------------------------------------------
+// Inline methods
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Is this the active tool?
+//-----------------------------------------------------------------------------
+inline bool CBaseToolSystem::IsActiveTool( ) const
+{
+ return m_bIsActive;
+}
+
+
+//-----------------------------------------------------------------------------
+// Mode query
+//-----------------------------------------------------------------------------
+inline bool CBaseToolSystem::IsFullscreen( ) const
+{
+ return m_bFullscreenMode;
+}
+
+inline bool CBaseToolSystem::IsGameInputEnabled() const
+{
+ // NOTE: IsActive check here is a little bogus.
+ // It's necessary to get the IFM to play nice with other tools, though.
+ // Is there a better way of doing it?
+ return m_bGameInputEnabled || !m_bIsActive;
+}
+
+
+#endif // BASETOOLSYSTEM_H
diff --git a/public/toolutils/ConsolePage.h b/public/toolutils/ConsolePage.h
new file mode 100644
index 0000000..a30b593
--- /dev/null
+++ b/public/toolutils/ConsolePage.h
@@ -0,0 +1,34 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef CONSOLEPAGE_H
+#define CONSOLEPAGE_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "vgui_controls/consoledialog.h"
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Game/dev console dialog
+//-----------------------------------------------------------------------------
+class CConsolePage : public vgui::CConsolePanel
+{
+ DECLARE_CLASS_SIMPLE( CConsolePage, vgui::CConsolePanel );
+
+public:
+ CConsolePage( Panel *parent, bool bStatusVersion );
+
+private:
+ MESSAGE_FUNC_CHARPTR( OnCommandSubmitted, "CommandSubmitted", command );
+
+ // vgui overrides
+ virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
+};
+
+#endif // CONSOLEPAGE_H
diff --git a/public/toolutils/DmeMdlRenderable.h b/public/toolutils/DmeMdlRenderable.h
new file mode 100644
index 0000000..30dab67
--- /dev/null
+++ b/public/toolutils/DmeMdlRenderable.h
@@ -0,0 +1,171 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Decorator class to make a DME renderable as a MDL
+//
+//===========================================================================//
+
+#ifndef DMEMDLRENDERABLE_H
+#define DMEMDLRENDERABLE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "toolutils/dmerenderable.h"
+#include "movieobjects/dmemdl.h"
+#include "movieobjects/dmetransform.h"
+#include "datacache/imdlcache.h"
+#include "mathlib/mathlib.h"
+#include "datamodel/dmehandle.h"
+#include "toolutils/enginetools_int.h"
+#include "materialsystem/imaterialsystemhardwareconfig.h"
+#include "tier3/tier3.h"
+
+
+//-----------------------------------------------------------------------------
+// Deals with the base implementation for turning a Dme into a renderable
+//-----------------------------------------------------------------------------
+template < class T >
+class CDmeMdlRenderable : public CDmeRenderable< T >
+{
+ DEFINE_UNINSTANCEABLE_ELEMENT( CDmeMdlRenderable, CDmeRenderable< T > );
+
+// IClientUnknown implementation.
+public:
+ virtual int GetBody();
+ virtual int GetSkin();
+ virtual int DrawModel( int flags );
+ virtual void GetRenderBounds( Vector& mins, Vector& maxs );
+
+ void SetModelName( const char *pMDLName );
+
+protected:
+ CDmeMDL *GetMDL() { return m_hMDL; }
+
+private:
+ void SetUpLighting( const Vector &vecCenter );
+
+ CDmeHandle<CDmeMDL> m_hMDL;
+ CDmeHandle<CDmeTransform> m_hTransform;
+};
+
+
+//-----------------------------------------------------------------------------
+// Construction, destruction
+//-----------------------------------------------------------------------------
+template < class T >
+void CDmeMdlRenderable<T>::OnConstruction()
+{
+ m_hMDL = CreateElement<CDmeMDL>( "MDLRenderable", GetFileId() );
+ m_hTransform = CreateElement<CDmeTransform>( "MDLTransform", GetFileId() );
+}
+
+template < class T >
+void CDmeMdlRenderable<T>::OnDestruction()
+{
+ g_pDataModel->DestroyElement( m_hMDL );
+ g_pDataModel->DestroyElement( m_hTransform );
+}
+
+template < class T >
+int CDmeMdlRenderable<T>::GetBody()
+{
+ return m_hMDL->m_nBody;
+}
+
+template < class T >
+int CDmeMdlRenderable<T>::GetSkin()
+{
+ return m_hMDL->m_nSkin;
+}
+
+template < class T >
+int CDmeMdlRenderable<T>::DrawModel( int flags )
+{
+ matrix3x4_t mat;
+ AngleMatrix( GetRenderAngles(), GetRenderOrigin(), mat );
+ m_hTransform->SetTransform( mat );
+ m_hMDL->m_flTime = Plat_FloatTime();
+ SetUpLighting( GetRenderOrigin() );
+ bool bIsDrawingInEngine = m_hMDL->IsDrawingInEngine();
+ m_hMDL->DrawInEngine( true );
+ m_hMDL->Draw( mat );
+ m_hMDL->DrawInEngine( bIsDrawingInEngine );
+ return 1;
+}
+
+template < class T >
+void CDmeMdlRenderable<T>::GetRenderBounds( Vector& mins, Vector& maxs )
+{
+ m_hMDL->GetBoundingBox( &mins, &maxs );
+}
+
+template < class T >
+void CDmeMdlRenderable<T>::SetModelName( const char *pMDLRelativePath )
+{
+ if ( pMDLRelativePath )
+ {
+ MDLHandle_t hMdl = g_pMDLCache->FindMDL( pMDLRelativePath );
+ m_hMDL->SetMDL( hMdl );
+ }
+ else
+ {
+ m_hMDL->SetMDL( MDLHANDLE_INVALID );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Set up lighting conditions
+//-----------------------------------------------------------------------------
+template < class T >
+void CDmeMdlRenderable<T>::SetUpLighting( const Vector &vecCenter )
+{
+ // Set up lighting conditions
+ Vector vecAmbient[6];
+ Vector4D vecAmbient4D[6];
+ LightDesc_t desc[2];
+ int nLightCount = enginetools->GetLightingConditions( vecCenter, vecAmbient, 2, desc );
+ int nMaxLights = g_pMaterialSystemHardwareConfig->MaxNumLights();
+ if( nLightCount > nMaxLights )
+ {
+ nLightCount = nMaxLights;
+ }
+
+ int i;
+ for( i = 0; i < 6; i++ )
+ {
+ VectorCopy( vecAmbient[i], vecAmbient4D[i].AsVector3D() );
+ vecAmbient4D[i][3] = 1.0f;
+ }
+ CMatRenderContextPtr pRenderContext( g_pMaterialSystem );
+ pRenderContext->SetAmbientLightCube( vecAmbient4D );
+
+ for( i = 0; i < nLightCount; i++ )
+ {
+ LightDesc_t *pLight = &desc[i];
+ pLight->m_Flags = 0;
+ if( pLight->m_Attenuation0 != 0.0f )
+ {
+ pLight->m_Flags |= LIGHTTYPE_OPTIMIZATIONFLAGS_HAS_ATTENUATION0;
+ }
+ if( pLight->m_Attenuation1 != 0.0f )
+ {
+ pLight->m_Flags |= LIGHTTYPE_OPTIMIZATIONFLAGS_HAS_ATTENUATION1;
+ }
+ if( pLight->m_Attenuation2 != 0.0f )
+ {
+ pLight->m_Flags |= LIGHTTYPE_OPTIMIZATIONFLAGS_HAS_ATTENUATION2;
+ }
+
+ pRenderContext->SetLight( i, desc[i] );
+ }
+
+ for( ; i < nMaxLights; i++ )
+ {
+ LightDesc_t disableDesc;
+ disableDesc.m_Type = MATERIAL_LIGHT_DISABLE;
+ pRenderContext->SetLight( i, disableDesc );
+ }
+}
+
+
+#endif // DMEMDLRENDERABLE_H
diff --git a/public/toolutils/DmeRenderable.h b/public/toolutils/DmeRenderable.h
new file mode 100644
index 0000000..4dc9312
--- /dev/null
+++ b/public/toolutils/DmeRenderable.h
@@ -0,0 +1,340 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Base decorator class to make a DME renderable
+//
+//===========================================================================//
+
+#ifndef DMERENDERABLE_H
+#define DMERENDERABLE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "iclientunknown.h"
+#include "iclientrenderable.h"
+#include "datamodel/dmelement.h"
+#include "datamodel/dmattributevar.h"
+#include "mathlib/mathlib.h"
+#include "basehandle.h"
+#include "toolutils/enginetools_int.h"
+#include "engine/iclientleafsystem.h"
+#include "datamodel/dmelementfactoryhelper.h"
+
+
+//-----------------------------------------------------------------------------
+// Deals with the base implementation for turning a Dme into a renderable
+//-----------------------------------------------------------------------------
+template < class T >
+class CDmeRenderable : public T, public IClientUnknown, public IClientRenderable
+{
+ DEFINE_UNINSTANCEABLE_ELEMENT( CDmeRenderable, T );
+
+protected:
+ virtual void OnAttributeChanged( CDmAttribute *pAttribute );
+
+// IClientUnknown implementation.
+public:
+ virtual void SetRefEHandle( const CBaseHandle &handle );
+ virtual const CBaseHandle& GetRefEHandle() const;
+ virtual IClientUnknown* GetIClientUnknown() { return this; }
+ virtual ICollideable* GetCollideable() { return 0; }
+ virtual IClientRenderable* GetClientRenderable() { return this; }
+ virtual IClientNetworkable* GetClientNetworkable() { return 0; }
+ virtual IClientEntity* GetIClientEntity() { return 0; }
+ virtual C_BaseEntity* GetBaseEntity() { return 0; }
+ virtual IClientThinkable* GetClientThinkable() { return 0; }
+// virtual const Vector & GetRenderOrigin( void ) { return vec3_origin; }
+// virtual const QAngle & GetRenderAngles( void ) { return vec3_angle; }
+ virtual bool ShouldDraw( void ) { return false; }
+ virtual bool IsTransparent( void ) { return false; }
+ virtual bool IsTwoPass( void ) { return false; }
+ virtual void OnThreadedDrawSetup() {}
+ virtual bool UsesPowerOfTwoFrameBufferTexture() { return false; }
+ virtual bool UsesFullFrameBufferTexture() { return false; }
+ virtual ClientShadowHandle_t GetShadowHandle() const;
+ virtual ClientRenderHandle_t& RenderHandle();
+ virtual int GetBody() { return 0; }
+ virtual int GetSkin() { return 0; }
+ virtual const model_t* GetModel( ) const { return NULL; }
+// virtual int DrawModel( int flags );
+ virtual void ComputeFxBlend( ) { return; }
+ virtual int GetFxBlend( ) { return 255; }
+ virtual bool LODTest() { return true; }
+ virtual bool SetupBones( matrix3x4_t *pBoneToWorldOut, int nMaxBones, int boneMask, float currentTime ) { return true; }
+ virtual void SetupWeights( const matrix3x4_t *pBoneToWorld, int nFlexWeightCount, float *pFlexWeights, float *pFlexDelayedWeights ) {}
+ virtual bool UsesFlexDelayedWeights() { return false; }
+ virtual void DoAnimationEvents( void ) {}
+ virtual IPVSNotify* GetPVSNotifyInterface() { return NULL; }
+ virtual void GetRenderBoundsWorldspace( Vector& absMins, Vector& absMaxs );
+ virtual void GetColorModulation( float* color );
+// virtual void GetRenderBounds( Vector& mins, Vector& maxs );
+ virtual bool ShouldReceiveProjectedTextures( int flags ) { return false; }
+ virtual bool GetShadowCastDistance( float *pDist, ShadowType_t shadowType ) const { return false; }
+ virtual bool GetShadowCastDirection( Vector *pDirection, ShadowType_t shadowType ) const { return false; }
+ virtual void GetShadowRenderBounds( Vector &mins, Vector &maxs, ShadowType_t shadowType );
+ virtual bool IsShadowDirty( ) { return false; }
+ virtual void MarkShadowDirty( bool bDirty ) {}
+ virtual IClientRenderable *GetShadowParent() { return NULL; }
+ virtual IClientRenderable *FirstShadowChild(){ return NULL; }
+ virtual IClientRenderable *NextShadowPeer() { return NULL; }
+ virtual ShadowType_t ShadowCastType() { return SHADOWS_NONE; }
+ virtual void CreateModelInstance() {}
+ virtual ModelInstanceHandle_t GetModelInstance() { return MODEL_INSTANCE_INVALID; }
+ virtual const matrix3x4_t &RenderableToWorldTransform();
+ virtual int LookupAttachment( const char *pAttachmentName ) { return -1; }
+ virtual bool GetAttachment( int number, Vector &origin, QAngle &angles );
+ virtual bool GetAttachment( int number, matrix3x4_t &matrix );
+ virtual float *GetRenderClipPlane() { return NULL; }
+ virtual void RecordToolMessage() {}
+ virtual bool IgnoresZBuffer( void ) const { return false; }
+
+ // Add/remove to engine from drawing
+ void DrawInEngine( bool bDrawInEngine );
+ bool IsDrawingInEngine() const;
+
+protected:
+ virtual CDmAttribute* GetVisibilityAttribute() { return NULL; }
+ virtual CDmAttribute* GetDrawnInEngineAttribute() { return m_bWantsToBeDrawnInEngine.GetAttribute(); }
+
+ Vector m_vecRenderOrigin;
+ QAngle m_angRenderAngles;
+
+protected:
+
+ CDmaVar<bool> m_bWantsToBeDrawnInEngine;
+ bool m_bIsDrawingInEngine;
+
+ CBaseHandle m_RefEHandle; // Reference ehandle. Used to generate ehandles off this entity.
+ ClientRenderHandle_t m_hRenderHandle;
+};
+
+
+//-----------------------------------------------------------------------------
+// Construction, destruction
+//-----------------------------------------------------------------------------
+template < class T >
+void CDmeRenderable<T>::OnConstruction()
+{
+ m_hRenderHandle = INVALID_CLIENT_RENDER_HANDLE;
+ m_bWantsToBeDrawnInEngine.InitAndSet( this, "wantsToBeDrawnInEngine", false, FATTRIB_DONTSAVE | FATTRIB_HAS_CALLBACK );
+ m_bIsDrawingInEngine = false;
+}
+
+template < class T >
+void CDmeRenderable<T>::OnDestruction()
+{
+ if ( m_bIsDrawingInEngine )
+ {
+ if ( clienttools )
+ {
+ clienttools->RemoveClientRenderable( this );
+ }
+ m_bIsDrawingInEngine = false;
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// EHandles
+//-----------------------------------------------------------------------------
+template < class T >
+void CDmeRenderable<T>::SetRefEHandle( const CBaseHandle &handle )
+{
+ m_RefEHandle = handle;
+}
+
+template < class T >
+const CBaseHandle& CDmeRenderable<T>::GetRefEHandle() const
+{
+ return m_RefEHandle;
+}
+
+
+//-----------------------------------------------------------------------------
+// Add/remove to engine from drawing
+//-----------------------------------------------------------------------------
+template < class T >
+void CDmeRenderable<T>::DrawInEngine( bool bDrawInEngine )
+{
+ m_bWantsToBeDrawnInEngine = bDrawInEngine;
+}
+
+template < class T >
+bool CDmeRenderable<T>::IsDrawingInEngine() const
+{
+ return m_bIsDrawingInEngine;
+}
+
+
+//-----------------------------------------------------------------------------
+// Called when attributes changed
+//-----------------------------------------------------------------------------
+template < class T >
+void CDmeRenderable<T>::OnAttributeChanged( CDmAttribute *pAttribute )
+{
+ T::OnAttributeChanged( pAttribute );
+ CDmAttribute *pVisibilityAttribute = GetVisibilityAttribute();
+ if ( pAttribute == pVisibilityAttribute || pAttribute == m_bWantsToBeDrawnInEngine.GetAttribute() )
+ {
+ bool bIsVisible = pVisibilityAttribute ? pVisibilityAttribute->GetValue<bool>() : true;
+ bool bShouldDrawInEngine = m_bWantsToBeDrawnInEngine && bIsVisible;
+ if ( m_bIsDrawingInEngine != bShouldDrawInEngine )
+ {
+ m_bIsDrawingInEngine = bShouldDrawInEngine;
+ if ( clienttools )
+ {
+ if ( m_bIsDrawingInEngine )
+ {
+ clienttools->AddClientRenderable( this, IsTransparent() ? RENDER_GROUP_TRANSLUCENT_ENTITY : RENDER_GROUP_OPAQUE_ENTITY );
+ }
+ else
+ {
+ clienttools->RemoveClientRenderable( this );
+ }
+ }
+ }
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// Color modulation
+//-----------------------------------------------------------------------------
+template < class T >
+void CDmeRenderable<T>::GetColorModulation( float* color )
+{
+ Assert(color);
+ color[0] = color[1] = color[2] = 1.0f;
+}
+
+
+//-----------------------------------------------------------------------------
+// Attachments
+//-----------------------------------------------------------------------------
+template < class T >
+bool CDmeRenderable<T>::GetAttachment( int number, Vector &origin, QAngle &angles )
+{
+ origin = GetRenderOrigin();
+ angles = GetRenderAngles();
+ return true;
+}
+
+template < class T >
+bool CDmeRenderable<T>::GetAttachment( int number, matrix3x4_t &matrix )
+{
+ MatrixCopy( RenderableToWorldTransform(), matrix );
+ return true;
+}
+
+
+//-----------------------------------------------------------------------------
+// Other methods
+//-----------------------------------------------------------------------------
+template < class T >
+void CDmeRenderable<T>::GetShadowRenderBounds( Vector &mins, Vector &maxs, ShadowType_t shadowType )
+{
+ GetRenderBounds( mins, maxs );
+}
+
+template < class T >
+inline ClientShadowHandle_t CDmeRenderable<T>::GetShadowHandle() const
+{
+ return CLIENTSHADOW_INVALID_HANDLE;
+}
+
+template < class T >
+inline ClientRenderHandle_t& CDmeRenderable<T>::RenderHandle()
+{
+ return m_hRenderHandle;
+}
+
+template < class T >
+void CDmeRenderable<T>::GetRenderBoundsWorldspace( Vector& absMins, Vector& absMaxs )
+{
+ Vector mins, maxs;
+ GetRenderBounds( mins, maxs );
+
+ // FIXME: Should I just use a sphere here?
+ // Another option is to pass the OBB down the tree; makes for a better fit
+ // Generate a world-aligned AABB
+ const QAngle& angles = GetRenderAngles();
+ const Vector& origin = GetRenderOrigin();
+ if ( angles == vec3_angle )
+ {
+ VectorAdd( mins, origin, absMins );
+ VectorAdd( maxs, origin, absMaxs );
+ }
+ else
+ {
+ matrix3x4_t boxToWorld;
+ AngleMatrix( angles, origin, boxToWorld );
+ TransformAABB( boxToWorld, mins, maxs, absMins, absMaxs );
+ }
+ Assert( absMins.IsValid() && absMaxs.IsValid() );
+}
+
+template < class T >
+const matrix3x4_t &CDmeRenderable<T>::RenderableToWorldTransform()
+{
+ static matrix3x4_t mat;
+ AngleMatrix( GetRenderAngles(), GetRenderOrigin(), mat );
+ return mat;
+}
+
+
+//-----------------------------------------------------------------------------
+// Adds a 'visibility' attribute onto renderables that need it
+//-----------------------------------------------------------------------------
+template < class T >
+class CDmeVisibilityControl : public T
+{
+ DEFINE_UNINSTANCEABLE_ELEMENT( CDmeVisibilityControl, T );
+
+public:
+ // Control visibility
+ bool IsVisible() const;
+ void SetVisible( bool bVisible );
+
+private:
+ virtual CDmAttribute* GetVisibilityAttribute() { return m_bIsVisible.GetAttribute(); }
+
+ CDmaVar< bool > m_bIsVisible;
+};
+
+
+//-----------------------------------------------------------------------------
+// Construction, destruction
+//-----------------------------------------------------------------------------
+template < class T >
+void CDmeVisibilityControl<T>::OnConstruction()
+{
+ m_bIsVisible.InitAndSet( this, "visible", true, FATTRIB_HAS_CALLBACK );
+}
+
+template < class T >
+void CDmeVisibilityControl<T>::OnDestruction()
+{
+}
+
+
+//-----------------------------------------------------------------------------
+// Deal with visibility
+//-----------------------------------------------------------------------------
+template < class T >
+void CDmeVisibilityControl<T>::SetVisible( bool bVisible )
+{
+ if ( bVisible != m_bIsVisible )
+ {
+ m_bIsVisible = bVisible;
+ }
+}
+
+template < class T >
+bool CDmeVisibilityControl<T>::IsVisible() const
+{
+ return m_bIsVisible;
+}
+
+
+
+#endif // DMERENDERABLE_H
diff --git a/public/toolutils/ToolEditMenuButton.h b/public/toolutils/ToolEditMenuButton.h
new file mode 100644
index 0000000..8ddcd7c
--- /dev/null
+++ b/public/toolutils/ToolEditMenuButton.h
@@ -0,0 +1,35 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Standard file menu
+//
+//=============================================================================
+
+
+#ifndef TOOLEDITMENUBUTTON_H
+#define TOOLEDITMENUBUTTON_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+//-----------------------------------------------------------------------------
+// forward declarations
+//-----------------------------------------------------------------------------
+namespace vgui
+{
+class Panel;
+}
+
+class CToolMenuButton;
+
+
+//-----------------------------------------------------------------------------
+// Global function to create the switch menu
+//-----------------------------------------------------------------------------
+CToolMenuButton* CreateToolEditMenuButton( vgui::Panel *parent, const char *panelName,
+ const char *text, vgui::Panel *pActionTarget );
+
+
+#endif // TOOLEDITMENUBUTTON_H
+
diff --git a/public/toolutils/ToolFileMenuButton.h b/public/toolutils/ToolFileMenuButton.h
new file mode 100644
index 0000000..224434f
--- /dev/null
+++ b/public/toolutils/ToolFileMenuButton.h
@@ -0,0 +1,104 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Standard file menu
+//
+//=============================================================================
+
+
+#ifndef TOOLFILEMENUBUTTON_H
+#define TOOLFILEMENUBUTTON_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "toolutils/toolmenubutton.h"
+
+
+//-----------------------------------------------------------------------------
+// forward declarations
+//-----------------------------------------------------------------------------
+namespace vgui
+{
+class Panel;
+class Menu;
+}
+
+class CToolMenuButton;
+
+
+//-----------------------------------------------------------------------------
+// Called back by the file menu
+//-----------------------------------------------------------------------------
+class IFileMenuCallbacks
+{
+public:
+ enum MenuItems_t
+ {
+ FILE_NEW = 0x01,
+ FILE_OPEN = 0x02,
+ FILE_SAVE = 0x04,
+ FILE_SAVEAS = 0x08,
+ FILE_CLOSE = 0x10,
+ FILE_RECENT = 0x20,
+ FILE_CLEAR_RECENT = 0x40,
+ FILE_EXIT = 0x80,
+
+ FILE_ALL = 0xFFFFFFFF
+ };
+
+ // Logically OR together all items that should be enabled
+ virtual int GetFileMenuItemsEnabled( ) = 0;
+
+ // Add recent files to the menu passed in
+ virtual void AddRecentFilesToMenu( vgui::Menu *menu ) = 0;
+
+ // Get the perforce file name (to set the various perforce menu options)
+ virtual bool GetPerforceFileName( char *pFileName, int nMaxLen ) = 0;
+
+ // Gets the root vgui panel
+ virtual vgui::Panel *GetRootPanel() = 0;
+};
+
+
+//-----------------------------------------------------------------------------
+// Standard file menu
+//-----------------------------------------------------------------------------
+class CToolFileMenuButton : public CToolMenuButton
+{
+ DECLARE_CLASS_SIMPLE( CToolFileMenuButton, CToolMenuButton );
+public:
+
+ CToolFileMenuButton( vgui::Panel *parent, const char *panelName, const char *text, vgui::Panel *pActionTarget, IFileMenuCallbacks *pFileMenuCallback );
+ virtual void OnShowMenu( vgui::Menu *menu );
+
+private:
+ MESSAGE_FUNC( OnPerforceAdd, "OnPerforceAdd" );
+ MESSAGE_FUNC( OnPerforceOpen, "OnPerforceOpen" );
+ MESSAGE_FUNC( OnPerforceRevert, "OnPerforceRevert" );
+ MESSAGE_FUNC( OnPerforceSubmit, "OnPerforceSubmit" );
+ MESSAGE_FUNC( OnPerforceP4Win, "OnPerforceP4Win" );
+ MESSAGE_FUNC( OnPerforceListOpenFiles, "OnPerforceListOpenFiles" );
+
+ vgui::Menu *m_pRecentFiles;
+ vgui::Menu *m_pPerforce;
+ int m_nRecentFiles;
+ IFileMenuCallbacks *m_pFileMenuCallback;
+ int m_nPerforceAdd;
+ int m_nPerforceOpen;
+ int m_nPerforceRevert;
+ int m_nPerforceSubmit;
+ int m_nPerforceP4Win;
+ int m_nPerforceListOpenFiles;
+};
+
+
+//-----------------------------------------------------------------------------
+// Global function to create the switch menu
+//-----------------------------------------------------------------------------
+CToolMenuButton* CreateToolFileMenuButton( vgui::Panel *parent, const char *panelName,
+ const char *text, vgui::Panel *pActionTarget, IFileMenuCallbacks *pCallbacks );
+
+
+#endif // TOOLFILEMENUBUTTON_H
+
diff --git a/public/toolutils/ToolHelpMenuButton.h b/public/toolutils/ToolHelpMenuButton.h
new file mode 100644
index 0000000..6c2a4da
--- /dev/null
+++ b/public/toolutils/ToolHelpMenuButton.h
@@ -0,0 +1,32 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Core Movie Maker UI API
+//
+//=============================================================================
+
+#ifndef TOOLHELPMENUBUTTON_H
+#define TOOLHELPMENUBUTTON_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+//-----------------------------------------------------------------------------
+// forward declarations
+//-----------------------------------------------------------------------------
+namespace vgui
+{
+class Panel;
+}
+
+class CToolMenuButton;
+
+
+//-----------------------------------------------------------------------------
+// Global function to create the switch menu
+//-----------------------------------------------------------------------------
+CToolMenuButton* CreateToolHelpMenuButton( char const *toolName, char const *helpBinding, vgui::Panel *parent, const char *panelName, const char *text, vgui::Panel *pActionTarget );
+
+
+#endif // TOOLHELPMENUBUTTON_H
diff --git a/public/toolutils/ToolMenuButton.h b/public/toolutils/ToolMenuButton.h
new file mode 100644
index 0000000..fe188a0
--- /dev/null
+++ b/public/toolutils/ToolMenuButton.h
@@ -0,0 +1,75 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Core Movie Maker UI API
+//
+//=============================================================================
+
+#ifndef TOOLMENUBUTTON_H
+#define TOOLMENUBUTTON_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "vgui_controls/menubutton.h"
+#include "tier1/utldict.h"
+#include "tier1/utlsymbol.h"
+
+
+//-----------------------------------------------------------------------------
+// Base class for tools menus
+//-----------------------------------------------------------------------------
+class CToolMenuButton : public vgui::MenuButton
+{
+ DECLARE_CLASS_SIMPLE( CToolMenuButton, vgui::MenuButton );
+public:
+ CToolMenuButton( vgui::Panel *parent, const char *panelName, const char *text, vgui::Panel *actionTarget );
+
+ virtual void OnShowMenu(vgui::Menu *menu);
+
+ vgui::Menu *GetMenu();
+
+ // Add a simple text item to the menu
+ virtual int AddMenuItem( char const *itemName, const char *itemText, KeyValues *message, Panel *target, const KeyValues *userData = NULL, char const *kbcommandname = NULL );
+ virtual int AddCheckableMenuItem( char const *itemName, const char *itemText, KeyValues *message, Panel *target, const KeyValues *userData = NULL, char const *kbcommandname = NULL );
+
+ // Wide-character version to add a simple text item to the menu
+ virtual int AddMenuItem( char const *itemName, const wchar_t *itemText, KeyValues *message, Panel *target, const KeyValues *userData = NULL, char const *kbcommandname = NULL );
+ virtual int AddCheckableMenuItem( char const *itemName, const wchar_t *itemText, KeyValues *message, Panel *target, const KeyValues *userData = NULL, char const *kbcommandname = NULL );
+
+ virtual int FindMenuItem( char const *itemName );
+ virtual void AddSeparatorAfterItem( char const *itemName );
+ virtual void MoveMenuItem( int itemID, int moveBeforeThisItemID );
+
+ virtual void SetItemEnabled( int itemID, bool state );
+
+ // Pass in a NULL binding to clear it
+ virtual void SetCurrentKeyBindingLabel( char const *itemName, char const *binding );
+
+ virtual void AddSeparator();
+
+ void Reset();
+
+protected:
+ void UpdateMenuItemKeyBindings();
+
+ vgui::Menu *m_pMenu;
+ vgui::Panel *m_pActionTarget;
+
+ struct MenuItem_t
+ {
+ MenuItem_t()
+ : m_ItemID( 0 ),
+ m_KeyBinding( UTL_INVAL_SYMBOL )
+ {
+ }
+ unsigned short m_ItemID;
+ CUtlSymbol m_KeyBinding;
+ };
+
+ CUtlDict< MenuItem_t, unsigned short > m_Items;
+};
+
+
+#endif // TOOLMENUBUTTON_H
+
diff --git a/public/toolutils/ToolSwitchMenuButton.h b/public/toolutils/ToolSwitchMenuButton.h
new file mode 100644
index 0000000..56dcd9e
--- /dev/null
+++ b/public/toolutils/ToolSwitchMenuButton.h
@@ -0,0 +1,32 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Core Movie Maker UI API
+//
+//=============================================================================
+
+#ifndef TOOLSWITCHMENUBUTTON_H
+#define TOOLSWITCHMENUBUTTON_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+//-----------------------------------------------------------------------------
+// forward declarations
+//-----------------------------------------------------------------------------
+namespace vgui
+{
+class Panel;
+}
+
+class CToolMenuButton;
+
+
+//-----------------------------------------------------------------------------
+// Global function to create the switch menu
+//-----------------------------------------------------------------------------
+CToolMenuButton* CreateToolSwitchMenuButton( vgui::Panel *parent, const char *panelName, const char *text, vgui::Panel *pActionTarget );
+
+
+#endif // TOOLSWITCHMENUBUTTON_H
diff --git a/public/toolutils/basepropertiescontainer.h b/public/toolutils/basepropertiescontainer.h
new file mode 100644
index 0000000..1028008
--- /dev/null
+++ b/public/toolutils/basepropertiescontainer.h
@@ -0,0 +1,27 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef BASEPROPERTIESCONTAINER_H
+#define BASEPROPERTIESCONTAINER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "dme_controls/ElementPropertiesTree.h"
+
+class CBasePropertiesContainer : public CElementPropertiesTreeInternal
+{
+ DECLARE_CLASS_SIMPLE( CBasePropertiesContainer, CElementPropertiesTreeInternal);
+
+public:
+
+ CBasePropertiesContainer( vgui::Panel *parent, IDmNotify *pNotify, CDmeEditorTypeDictionary *pDict = NULL );
+
+ virtual bool IsDroppable( CUtlVector< KeyValues * >& msglist );
+ virtual void OnPanelDropped( CUtlVector< KeyValues * >& msglist );
+};
+
+#endif // BASEPROPERTIESCONTAINER_H
diff --git a/public/toolutils/basestatusbar.h b/public/toolutils/basestatusbar.h
new file mode 100644
index 0000000..d5da623
--- /dev/null
+++ b/public/toolutils/basestatusbar.h
@@ -0,0 +1,45 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef BASESTATUSBAR_H
+#define BASESTATUSBAR_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "vgui_controls/EditablePanel.h"
+#include "datamodel/dmehandle.h"
+
+class CDmeClip;
+class CMovieDoc;
+class CConsolePage;
+namespace vgui
+{
+ class Label;
+}
+
+class CBaseStatusBar : public vgui::EditablePanel
+{
+ DECLARE_CLASS_SIMPLE( CBaseStatusBar, vgui::EditablePanel )
+public:
+ CBaseStatusBar( vgui::Panel *parent, char const *panelName );
+
+private:
+ void UpdateMemoryUsage( float mbUsed );
+ virtual void PerformLayout();
+ virtual void ApplySchemeSettings(vgui::IScheme *pScheme);
+
+ virtual void OnThink();
+
+ CConsolePage *m_pConsole;
+ vgui::Label *m_pLabel;
+ vgui::Label *m_pMemory;
+ vgui::Label *m_pFPS;
+ vgui::Label *m_pGameTime;
+ float m_flLastFPSSnapShot;
+};
+
+#endif // BASESTATUSBAR_H
diff --git a/public/toolutils/enginetools_int.h b/public/toolutils/enginetools_int.h
new file mode 100644
index 0000000..03baf2e
--- /dev/null
+++ b/public/toolutils/enginetools_int.h
@@ -0,0 +1,41 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef ENGINETOOLS_INT_H
+#define ENGINETOOLS_INT_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+//-----------------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------------
+class IEngineTool;
+class IEngineVGui;
+class IServerTools;
+class IClientTools;
+class IFileSystem;
+class IP4;
+class IVDebugOverlay;
+class IDmSerializers;
+
+
+//-----------------------------------------------------------------------------
+// Singleton interfaces
+//-----------------------------------------------------------------------------
+extern IEngineTool *enginetools;
+extern IEngineVGui *enginevgui;
+extern IServerTools *servertools;
+extern IClientTools *clienttools;
+extern IFileSystem *g_pFileSystem;
+extern IP4 *p4;
+extern IVDebugOverlay *debugoverlay;
+extern IDmSerializers *dmserializers;
+
+
+#endif // ENGINETOOLS_INT_H
diff --git a/public/toolutils/miniviewport.h b/public/toolutils/miniviewport.h
new file mode 100644
index 0000000..5c93b8e
--- /dev/null
+++ b/public/toolutils/miniviewport.h
@@ -0,0 +1,43 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef MINIVIEWPORT_H
+#define MINIVIEWPORT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "vgui_controls/ToolWindow.h"
+
+class CMiniViewportPropertyPage;
+
+class CMiniViewport : public vgui::ToolWindow
+{
+ DECLARE_CLASS_SIMPLE( CMiniViewport, vgui::ToolWindow );
+public:
+ CMiniViewport( vgui::Panel *parent,
+ bool contextLabel,
+ vgui::IToolWindowFactory *factory = 0,
+ vgui::Panel *page = NULL,
+ char const *title = NULL,
+ bool contextMenu = false );
+
+ void GetViewport( bool& enabled, int& x, int& y, int& width, int& height );
+
+ void GetEngineBounds( int& x, int& y, int& w, int& h );
+
+ void RenderFrameBegin();
+
+ // Sets text to draw over the window
+ void SetOverlayText( const char *pText );
+
+ void ReleaseLayoffTexture();
+
+private:
+ vgui::DHANDLE< CMiniViewportPropertyPage > m_hPage;
+};
+
+#endif // MINIVIEWPORT_H
diff --git a/public/toolutils/recentfilelist.h b/public/toolutils/recentfilelist.h
new file mode 100644
index 0000000..307ee54
--- /dev/null
+++ b/public/toolutils/recentfilelist.h
@@ -0,0 +1,81 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Class that contains a list of recent files
+//
+//=============================================================================
+
+#ifndef RECENTFILELIST_H
+#define RECENTFILELIST_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#include "tier1/utlvector.h"
+#include "tier1/utlstring.h"
+
+
+//-----------------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------------
+namespace vgui
+{
+ class Menu;
+ class Panel;
+}
+
+
+//-----------------------------------------------------------------------------
+// Max # of recent files
+//-----------------------------------------------------------------------------
+#define MAX_RECENT_FILES 20
+
+
+//-----------------------------------------------------------------------------
+// Class that contains a list of recent files
+//-----------------------------------------------------------------------------
+class CRecentFileList
+{
+public:
+ // Adds a file to the list
+ void Add( const char *pFileName, const char *pFileFormat );
+
+ // Gets the file in a particular slot
+ const char *GetFile( int slot ) const;
+ const char *GetFileFormat( int slot ) const;
+
+ // Removes all files from the list
+ void Clear();
+
+ // Load, store to registry
+ void LoadFromRegistry( const char *pToolKeyName );
+ void SaveToRegistry( const char *pToolKeyName ) const;
+
+ // Adds all files in a list to a menu.
+ // Will generate the commands '<pCommandName>01', '<pCommandName>02', etc.
+ // depending on which one is selected
+ void AddToMenu( vgui::Menu *menu, vgui::Panel *actionTarget, const char *pCommandName ) const;
+
+ // Returns true if there's no files in the file list
+ bool IsEmpty() const;
+
+private:
+ struct RecentFileInfo_t
+ {
+ CUtlString m_pFileName;
+ CUtlString m_pFileFormat;
+
+ bool operator==( const RecentFileInfo_t& src ) const
+ {
+ return m_pFileName == src.m_pFileName;
+ }
+ };
+
+ CUtlVector< RecentFileInfo_t > m_RecentFiles;
+};
+
+
+#endif // RECENTFILELIST_H
+
+
diff --git a/public/toolutils/savewindowpositions.h b/public/toolutils/savewindowpositions.h
new file mode 100644
index 0000000..9ac9680
--- /dev/null
+++ b/public/toolutils/savewindowpositions.h
@@ -0,0 +1,37 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef SAVEWINDOWPOSITIONS_H
+#define SAVEWINDOWPOSITIONS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+namespace vgui
+{
+ class Panel;
+ class ToolWindow;
+ class IToolWindowFactory;
+};
+
+class CMovieView;
+
+
+//-----------------------------------------------------------------------------
+// Purpose: This will save the bounds and the visibility state of UI elements registered during startup
+//-----------------------------------------------------------------------------
+class IWindowPositionMgr
+{
+public:
+ virtual void SavePositions( char const *filename, char const *key ) = 0;
+ virtual bool LoadPositions( char const *filename, vgui::Panel *parent, vgui::IToolWindowFactory *factory, char const *key, bool force = false ) = 0;
+ virtual void RegisterPanel( char const *saveName, vgui::Panel *panel, bool contextMenu ) = 0;
+ virtual void UnregisterPanel( vgui::Panel *panel ) = 0;
+};
+
+extern IWindowPositionMgr *windowposmgr;
+
+#endif // SAVEWINDOWPOSITIONS_H
diff --git a/public/toolutils/toolmenubar.h b/public/toolutils/toolmenubar.h
new file mode 100644
index 0000000..f797352
--- /dev/null
+++ b/public/toolutils/toolmenubar.h
@@ -0,0 +1,71 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// This menu bar displays a couple extra labels:
+// one which contains the tool name, and one which contains a arbitrary info
+//
+//=============================================================================
+
+#ifndef TOOLMENUBAR_H
+#define TOOLMENUBAR_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#include "vgui_controls/menubar.h"
+
+using namespace vgui;
+
+
+//-----------------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------------
+namespace vgui
+{
+ class Panel;
+ class Label;
+}
+
+class CBaseToolSystem;
+
+//-----------------------------------------------------------------------------
+// Main menu bar
+//-----------------------------------------------------------------------------
+class CToolMenuBar : public vgui::MenuBar
+{
+ DECLARE_CLASS_SIMPLE( CToolMenuBar, vgui::MenuBar );
+
+public:
+ CToolMenuBar( CBaseToolSystem *parent, const char *panelName );
+ virtual void PerformLayout();
+ void SetToolName( const char *name );
+ void SetInfo( const char *text );
+
+ CBaseToolSystem *GetToolSystem();
+
+protected:
+ Label *m_pInfo;
+ Label *m_pToolName;
+ CBaseToolSystem *m_pToolSystem;
+};
+
+
+//-----------------------------------------------------------------------------
+// Main menu bar version that stores file name on it
+//-----------------------------------------------------------------------------
+class CToolFileMenuBar : public CToolMenuBar
+{
+ DECLARE_CLASS_SIMPLE( CToolFileMenuBar, CToolMenuBar );
+
+public:
+ CToolFileMenuBar( CBaseToolSystem *parent, const char *panelName );
+ virtual void PerformLayout();
+ void SetFileName( const char *pFileName );
+
+private:
+ Label *m_pFileName;
+};
+
+
+#endif // TOOLMENUBAR_H \ No newline at end of file
diff --git a/public/toolutils/toolwindowfactory.h b/public/toolutils/toolwindowfactory.h
new file mode 100644
index 0000000..71b4c1c
--- /dev/null
+++ b/public/toolutils/toolwindowfactory.h
@@ -0,0 +1,59 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef TOOLWINDOWFACTORY_H
+#define TOOLWINDOWFACTORY_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "vgui_controls/ToolWindow.h"
+#include "vgui/IInput.h"
+
+#define TOOLWINDOW_DEFAULT_WIDTH 640
+#define TOOLWINDOW_DEFAULT_HEIGHT 480
+#define TOOLWINDOW_MIN_WIDTH 120
+#define TOOLWINDOW_MIN_HEIGHT 80
+
+template < class T >
+class CToolWindowFactory : public vgui::IToolWindowFactory
+{
+public:
+ virtual vgui::ToolWindow *InstanceToolWindow
+ (
+ vgui::Panel *parent,
+ bool contextLabel, // Tool window shows context button for pages with context menus?
+ vgui::Panel *firstPage,
+ char const *title,
+ bool contextMenu // Page has context menu
+ );
+};
+
+//-----------------------------------------------------------------------------
+// Methods related to CToolWindowFactory
+//-----------------------------------------------------------------------------
+template < class T >
+vgui::ToolWindow *CToolWindowFactory<T>::InstanceToolWindow( vgui::Panel *parent, bool contextLabel, vgui::Panel *firstPage, char const *title, bool contextMenu )
+{
+ Assert( parent );
+ if ( !parent )
+ return NULL;
+
+ int mx, my;
+ vgui::input()->GetCursorPos( mx, my );
+ parent->ScreenToLocal( mx, my );
+
+ T *container = new T( parent, contextLabel, this, firstPage, title, contextMenu );
+ Assert( container );
+ if ( container )
+ {
+ container->SetBounds( mx, my, TOOLWINDOW_DEFAULT_WIDTH, TOOLWINDOW_DEFAULT_HEIGHT );
+ container->SetMinimumSize( TOOLWINDOW_MIN_WIDTH, TOOLWINDOW_MIN_HEIGHT );
+ }
+ return container;
+}
+
+#endif // TOOLWINDOWFACTORY_H
diff --git a/public/toolutils/vgui_tools.h b/public/toolutils/vgui_tools.h
new file mode 100644
index 0000000..7341251
--- /dev/null
+++ b/public/toolutils/vgui_tools.h
@@ -0,0 +1,29 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef VGUI_TOOLS_H
+#define VGUI_TOOLS_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "interface.h"
+
+#include <vgui/VGUI.h>
+
+// Every tool must expose this back to us
+extern char const *GetVGuiControlsModuleName();
+
+bool VGui_Startup( CreateInterfaceFn appSystemFactory );
+bool VGui_PostInit();
+void VGui_Shutdown( void );
+
+// Must be implemented by .dll
+void VGUI_CreateToolRootPanel( void );
+void VGUI_DestroyToolRootPanel( void );
+vgui::VPANEL VGui_GetToolRootPanel( void );
+
+#endif // VGUI_TOOLS_H