summaryrefslogtreecommitdiff
path: root/utils/mdmpRipper/CMDRipperMain.cpp
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 /utils/mdmpRipper/CMDRipperMain.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'utils/mdmpRipper/CMDRipperMain.cpp')
-rw-r--r--utils/mdmpRipper/CMDRipperMain.cpp272
1 files changed, 272 insertions, 0 deletions
diff --git a/utils/mdmpRipper/CMDRipperMain.cpp b/utils/mdmpRipper/CMDRipperMain.cpp
new file mode 100644
index 0000000..0275454
--- /dev/null
+++ b/utils/mdmpRipper/CMDRipperMain.cpp
@@ -0,0 +1,272 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Dialog for selecting game configurations
+//
+//=====================================================================================//
+
+#include <windows.h>
+
+#include <vgui/IVGui.h>
+#include <vgui/IInput.h>
+#include <vgui/ISystem.h>
+#include <vgui_controls/ComboBox.h>
+#include <vgui_controls/MessageBox.h>
+#include <vgui_controls/FileOpenDialog.h>
+#include <KeyValues.h>
+#include "CMDErrorPanel.h"
+#include "CMDModulePanel.h"
+#include "isqlwrapper.h"
+#include "CMDRipperMain.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include <tier0/memdbgon.h>
+
+using namespace vgui;
+
+CMDRipperMain *g_pCMDRipperMain = NULL;
+extern ISQLWrapper *g_pSqlWrapper;
+
+class CModalPreserveMessageBox : public vgui::MessageBox
+{
+public:
+ CModalPreserveMessageBox(const char *title, const char *text, vgui::Panel *parent)
+ : vgui::MessageBox( title, text, parent )
+ {
+ m_PrevAppFocusPanel = vgui::input()->GetAppModalSurface();
+ }
+
+ ~CModalPreserveMessageBox()
+ {
+ vgui::input()->SetAppModalSurface( m_PrevAppFocusPanel );
+ }
+
+public:
+ vgui::VPANEL m_PrevAppFocusPanel;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Utility function to pop up a VGUI message box
+//-----------------------------------------------------------------------------
+void VGUIMessageBox( vgui::Panel *pParent, const char *pTitle, const char *pMsg, ... )
+{
+ char msg[4096];
+ va_list marker;
+ va_start( marker, pMsg );
+ Q_vsnprintf( msg, sizeof( msg ), pMsg, marker );
+ va_end( marker );
+
+ vgui::MessageBox *dlg = new CModalPreserveMessageBox( pTitle, msg, pParent );
+ dlg->DoModal();
+ dlg->Activate();
+ dlg->RequestFocus();
+}
+
+//-----------------------------------------------------------------------------
+// Constructor
+//-----------------------------------------------------------------------------
+CMDRipperMain::CMDRipperMain( Panel *parent, const char *name ) : BaseClass( parent, name ), m_bChanged( false )
+{
+ Assert( !g_pCMDRipperMain );
+ g_pCMDRipperMain = this;
+
+ Sys_LoadInterface( "sqlwrapper", INTERFACEVERSION_ISQLWRAPPER, &hSQLWrapper, (void **)&sqlWrapperFactory );
+ Assert( hSQLWrapper != NULL );
+ Assert( sqlWrapperFactory != NULL );
+
+ sqlWrapper = sqlWrapperFactory->Create( "cserr", "steamweb-sql", "root", "" );
+ if ( !sqlWrapper )
+ {
+ ivgui()->DPrintf( "SQLWrapper is NULL" );
+ }
+ Assert( sqlWrapper != NULL );
+ g_pSqlWrapper = sqlWrapper;
+
+ SetSize(800, 600);
+ SetMinimumSize(500, 200);
+
+ SetMinimizeButtonVisible( true );
+
+ m_pMenuBar = new vgui::MenuBar( this, "Main Menu Bar" );
+ m_pMenuBar->SetPos( 5, 26 );
+ m_pMenuBar->SetSize( 690, 28 );
+
+ Menu *pFileMenu = new Menu(NULL, "File");
+ pFileMenu->AddMenuItem( "&Open", new KeyValues( "Open" ), this );
+ m_pMenuBar->AddMenu( "&File", pFileMenu );
+
+ Menu *pErrorMenu = new Menu(NULL, "Error");
+ pErrorMenu->AddMenuItem( "&Error", new KeyValues("Error"), this);
+ m_pMenuBar->AddMenu( "&Error", pErrorMenu );
+
+ m_pErrorPanel = new CMDErrorPanel( this, "MDError Panel" );
+ m_pErrorPanel->AddActionSignalTarget( this );
+
+ m_pModulePanel = new CMDModulePanel( this, "MDModule Panel" );
+ m_pModulePanel->AddActionSignalTarget( this );
+
+ m_pErrorPanel->AddActionSignalTarget( m_pModulePanel );
+
+ m_pDetailPanel = new CMDDetailPanel( this, "MDDetail Panel" );
+ m_pErrorPanel->AddActionSignalTarget( this );
+
+ LoadControlSettings( "MDRipperMain.res" );
+
+ m_pErrorPanel->SetVisible( false );
+ m_pModulePanel->SetVisible( false );
+ m_pDetailPanel->SetVisible( false );
+}
+
+//-----------------------------------------------------------------------------
+// Destructor
+//-----------------------------------------------------------------------------
+CMDRipperMain::~CMDRipperMain()
+{
+ g_pCMDRipperMain = NULL;
+}
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Kills the whole app on close
+//-----------------------------------------------------------------------------
+void CMDRipperMain::OnClose( void )
+{
+ BaseClass::OnClose();
+ ivgui()->Stop();
+
+ sqlWrapper->FreeResult();
+ sqlWrapperFactory->Free( sqlWrapper );
+ Sys_UnloadModule( hSQLWrapper );
+}
+
+/*
+//-----------------------------------------------------------------------------
+// Purpose: Select the item from the list (updating the environment variable as well)
+// Input : index - item to select
+//-----------------------------------------------------------------------------
+void CMDRipperMain::SetGlobalConfig( const char *modDir )
+{
+ // Set our environment variable
+ SetVConfigRegistrySetting( GAMEDIR_TOKEN, modDir );
+}
+*/
+
+//-----------------------------------------------------------------------------
+// Purpose: Parse commands coming in from the VGUI dialog
+//-----------------------------------------------------------------------------
+void CMDRipperMain::OnCommand( const char *command )
+{
+ if ( Q_stricmp( command, "Open" ) == 0 )
+ {
+ OnOpen();
+ }
+ else if ( Q_stricmp( command, "Error" ) == 0 )
+ {
+ OnError();
+ }
+ BaseClass::OnCommand( command );
+}
+
+
+bool CMDRipperMain::RequestInfo( KeyValues *outputData )
+{
+ const char * szName = outputData->GetName();
+ if ( !Q_stricmp( szName, "DragDrop" ))
+ {
+ bool bAccept = false;
+
+ if ( !Q_stricmp( outputData->GetString( "type" ), "Files" ) )
+ {
+ // Make sure we only get .mdmp files
+ KeyValues *pFiles = outputData->FindKey( "list", false );
+ if ( pFiles )
+ {
+ const char *pszFile = pFiles->GetString( "0" );
+ const char *pszExtension = Q_strrchr( pszFile, '.' );
+ if ( pszExtension )
+ {
+ if ( !Q_stricmp( pszExtension, ".mdmp" ) )
+ {
+ outputData->SetPtr( "AcceptPanel", ( Panel * )this );
+ bAccept = true;
+ }
+ }
+ }
+ }
+
+ return ( bAccept );
+ }
+
+ return ( BaseClass::RequestInfo( outputData ) );
+}
+
+
+void CMDRipperMain::OnOpen()
+{
+ FileOpenDialog *pFileDialog = new FileOpenDialog ( this, "File Open", true);
+ pFileDialog->AddActionSignalTarget(this);
+ pFileDialog->AddFilter( "*.mdmp", "MiniDumps", true );
+ pFileDialog->DoModal( true );
+}
+
+void CMDRipperMain::OnError()
+{
+ m_pErrorPanel->NewQuery();
+ m_pErrorPanel->SetVisible( true );
+ m_pErrorPanel->MoveToFront();
+ Repaint();
+}
+
+void CMDRipperMain::OnFileSelected( const char *filename )
+{
+ m_pModulePanel->Create( filename );
+ m_pModulePanel->SetVisible( true );
+ Repaint();
+}
+
+void CMDRipperMain::OnDetail( KeyValues *data )
+{
+ char URL[1024] = "";
+ strcat( URL, "http://steamweb/cserr_detailsnograph.php?errorid=" );
+ strcat( URL, data->GetString( "errorID" ) );
+ m_pDetailPanel->OpenURL( URL );
+ m_pDetailPanel->SetVisible( true );
+ m_pDetailPanel->MoveToFront();
+ Repaint();
+}
+
+void CMDRipperMain::OnRefresh()
+{
+ Repaint();
+}
+
+void CMDRipperMain::OnLookUp( KeyValues *data )
+{
+ m_pDetailPanel->OpenURL( data->GetString( "url" ) );
+ m_pDetailPanel->SetVisible( true );
+ m_pDetailPanel->MoveToFront();
+ Repaint();
+}
+
+
+void CMDRipperMain::OnDragDrop( KeyValues *pData )
+{
+ KeyValues *pFiles = pData->FindKey( "list", false );
+ if ( pFiles )
+ {
+ DWORD dwIndex = 0;
+ const char *pszFile = NULL;
+ char szIndex[ 64 ] = { 0 };
+
+ do
+ {
+ Q_snprintf( szIndex, sizeof ( szIndex ), "%d", dwIndex );
+ pszFile = pFiles->GetString( szIndex );
+ ivgui()->DPrintf( "Got file [%s]", pszFile );
+ OnFileSelected( pszFile );
+ dwIndex++;
+ }
+ while ( g_pFullFileSystem->FileExists( pszFile ) );
+ }
+
+} \ No newline at end of file