summaryrefslogtreecommitdiff
path: root/tools/toolutils/tool_main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/toolutils/tool_main.cpp')
-rw-r--r--tools/toolutils/tool_main.cpp233
1 files changed, 233 insertions, 0 deletions
diff --git a/tools/toolutils/tool_main.cpp b/tools/toolutils/tool_main.cpp
new file mode 100644
index 0000000..3895f22
--- /dev/null
+++ b/tools/toolutils/tool_main.cpp
@@ -0,0 +1,233 @@
+//========= 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 );
+}
+
+