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.
272 lines
7.2 KiB
272 lines
7.2 KiB
//========= 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 ) ); |
|
} |
|
|
|
} |