You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
233 lines
6.3 KiB
233 lines
6.3 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//============================================================================= |
|
|
|
#include "tier1/utlvector.h" |
|
#include "tier1/convar.h" |
|
#include "icvar.h" |
|
#include "toolframework/itoolsystem.h" |
|
#include "toolframework/itooldictionary.h" |
|
#include "toolframework/ienginetool.h" |
|
#include "toolutils/enginetools_int.h" |
|
#include "ienginevgui.h" |
|
#include "icvar.h" |
|
#include "toolutils/vgui_tools.h" |
|
#include "mathlib/mathlib.h" |
|
#include "iregistry.h" |
|
#include "datamodel/idatamodel.h" |
|
#include "filesystem.h" |
|
#include "p4lib/ip4.h" |
|
#include "engine/ivdebugoverlay.h" |
|
#include "tier3/tier3dm.h" |
|
#include "datamodel/dmelementfactoryhelper.h" |
|
#include "dmserializers/idmserializers.h" |
|
|
|
//----------------------------------------------------------------------------- |
|
// Singleton interfaces |
|
//----------------------------------------------------------------------------- |
|
IEngineTool *enginetools = NULL; |
|
IEngineVGui *enginevgui = NULL; |
|
IFileSystem *g_pFileSystem = NULL; |
|
IVDebugOverlay *debugoverlay = NULL; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Assumed to be implemented within the specific tool DLL |
|
//----------------------------------------------------------------------------- |
|
bool ConnectTools( CreateInterfaceFn factory ); |
|
void CreateTools( ); |
|
void DisconnectTools( ); |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void VGUI_CreateToolRootPanel( void ) |
|
{ |
|
// Just using PANEL_GAMEDLL in HL2 right now |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void VGUI_DestroyToolRootPanel( void ) |
|
{ |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Global accessors for root tool panels |
|
//----------------------------------------------------------------------------- |
|
vgui::VPANEL VGui_GetToolRootPanel( void ) |
|
{ |
|
vgui::VPANEL root = enginevgui->GetPanel( PANEL_GAMEDLL ); |
|
return root; |
|
} |
|
|
|
vgui::VPANEL VGui_GetRootPanel( void ) |
|
{ |
|
vgui::VPANEL root = enginevgui->GetPanel( PANEL_ROOT ); |
|
return root; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Implementation of IToolDictionary |
|
//----------------------------------------------------------------------------- |
|
class CToolDictionary : public CTier3DmAppSystem< IToolDictionary > |
|
{ |
|
typedef CTier3DmAppSystem< IToolDictionary > BaseClass; |
|
|
|
public: |
|
CToolDictionary(); |
|
|
|
// Inherited from IAppSystem |
|
virtual bool Connect( CreateInterfaceFn factory ); |
|
virtual void Disconnect(); |
|
virtual void *QueryInterface( const char *pInterfaceName ); |
|
virtual InitReturnVal_t Init(); |
|
virtual void Shutdown(); |
|
|
|
// Inherited from IToolDictionary |
|
virtual void CreateTools(); |
|
virtual int GetToolCount() const; |
|
virtual IToolSystem *GetTool( int index ); |
|
|
|
public: |
|
void RegisterTool( IToolSystem *tool ); |
|
|
|
private: |
|
CUtlVector< IToolSystem * > m_Tools; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Singleton interface for tools |
|
//----------------------------------------------------------------------------- |
|
static CToolDictionary g_ToolDictionary; |
|
EXPOSE_SINGLE_INTERFACE_GLOBALVAR( CToolDictionary, IToolDictionary, VTOOLDICTIONARY_INTERFACE_VERSION, g_ToolDictionary ); |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Constructor |
|
//----------------------------------------------------------------------------- |
|
CToolDictionary::CToolDictionary() |
|
{ |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Inherited from IAppSystem |
|
//----------------------------------------------------------------------------- |
|
bool CToolDictionary::Connect( CreateInterfaceFn factory ) |
|
{ |
|
if ( !BaseClass::Connect( factory ) ) |
|
return false; |
|
|
|
// FIXME: This interface pointer is taken care of in tier2 + tier1 |
|
g_pFileSystem = g_pFullFileSystem; |
|
|
|
enginevgui = ( IEngineVGui * )factory( VENGINE_VGUI_VERSION, NULL ); |
|
enginetools = ( IEngineTool * )factory( VENGINETOOL_INTERFACE_VERSION, NULL ); |
|
debugoverlay = ( IVDebugOverlay * )factory( VDEBUG_OVERLAY_INTERFACE_VERSION, NULL ); |
|
|
|
if ( !enginevgui || !debugoverlay || !g_pCVar || !enginetools || !g_pFileSystem ) |
|
return false; |
|
|
|
if ( !VGui_Startup( factory ) ) |
|
return false; |
|
|
|
return ConnectTools( factory ); |
|
} |
|
|
|
void CToolDictionary::Disconnect() |
|
{ |
|
DisconnectTools(); |
|
enginevgui = NULL; |
|
enginetools = NULL; |
|
debugoverlay = NULL; |
|
g_pFileSystem = NULL; |
|
|
|
BaseClass::Disconnect( ); |
|
} |
|
|
|
void *CToolDictionary::QueryInterface( const char *pInterfaceName ) |
|
{ |
|
if ( !V_strcmp( pInterfaceName, VTOOLDICTIONARY_INTERFACE_VERSION ) ) |
|
return (IToolDictionary*)this; |
|
|
|
return NULL; |
|
} |
|
|
|
InitReturnVal_t CToolDictionary::Init() |
|
{ |
|
InitReturnVal_t nRetVal = BaseClass::Init(); |
|
if ( nRetVal != INIT_OK ) |
|
return nRetVal; |
|
|
|
MathLib_Init( 2.2f, 2.2f, 0.0f, 2.0f ); |
|
|
|
// Init registry |
|
if ( !registry->Init( "Source\\Tools" ) ) |
|
{ |
|
Warning( "registry->Init failed\n" ); |
|
return INIT_FAILED; |
|
} |
|
|
|
// Re-enable this and VGui_Shutdown if we create root tool panels |
|
// VGui_PostInit(); |
|
|
|
return INIT_OK; |
|
} |
|
|
|
void CToolDictionary::Shutdown() |
|
{ |
|
// Re-enable this and VGui_PostInit if we create root tool panels |
|
VGui_Shutdown(); |
|
|
|
registry->Shutdown(); |
|
|
|
BaseClass::Shutdown(); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Implementation of IToolDictionary methods |
|
//----------------------------------------------------------------------------- |
|
void CToolDictionary::CreateTools() |
|
{ |
|
::CreateTools( ); |
|
} |
|
|
|
int CToolDictionary::GetToolCount() const |
|
{ |
|
return m_Tools.Count(); |
|
} |
|
|
|
IToolSystem *CToolDictionary::GetTool( int index ) |
|
{ |
|
if ( index < 0 || index >= m_Tools.Count() ) |
|
{ |
|
return NULL; |
|
} |
|
return m_Tools[ index ]; |
|
} |
|
|
|
void CToolDictionary::RegisterTool( IToolSystem *tool ) |
|
{ |
|
m_Tools.AddToTail( tool ); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Allows tools to install themselves into the dictionary |
|
//----------------------------------------------------------------------------- |
|
void RegisterTool( IToolSystem *tool ) |
|
{ |
|
g_ToolDictionary.RegisterTool( tool ); |
|
} |
|
|
|
|
|
|