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.
252 lines
7.1 KiB
252 lines
7.1 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: Configuration utility |
|
// |
|
//===========================================================================// |
|
|
|
#include <windows.h> |
|
#include <io.h> |
|
#include <stdio.h> |
|
|
|
#include <vgui/ILocalize.h> |
|
#include <vgui/ISurface.h> |
|
#include <vgui/IVGui.h> |
|
#include <vgui_controls/Panel.h> |
|
#include "appframework/tier3app.h" |
|
#include "inputsystem/iinputsystem.h" |
|
#include "tier0/icommandline.h" |
|
#include "filesystem_init.h" |
|
#include "CMDRipperMain.h" |
|
#include "isqlwrapper.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include <tier0/memdbgon.h> |
|
|
|
#define MDRIPPER_MAIN_PATH_ID "MAIN" |
|
#define MDRIPPER_WRITE_PATH "DEFAULT_WRITE_PATH" |
|
|
|
CMDRipperMain *g_pMainFrame = 0; |
|
ISQLWrapper *g_pSqlWrapper; |
|
|
|
// Dummy window |
|
static WNDCLASS staticWndclass = { NULL }; |
|
static ATOM staticWndclassAtom = 0; |
|
static HWND staticHwnd = 0; |
|
|
|
// List of our game configs, as read from the gameconfig.txt file |
|
//CGameConfigManager g_ConfigManager; |
|
//CUtlVector<CGameConfig *> g_Configs; |
|
HANDLE g_dwChangeHandle = NULL; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Output : const char |
|
//----------------------------------------------------------------------------- |
|
const char *GetBaseDirectory( void ) |
|
{ |
|
static char path[MAX_PATH] = {0}; |
|
if ( path[0] == 0 ) |
|
{ |
|
GetModuleFileName( (HMODULE)GetAppInstance(), path, sizeof( path ) ); |
|
Q_StripLastDir( path, sizeof( path ) ); // Get rid of the filename. |
|
Q_StripTrailingSlash( path ); |
|
} |
|
return path; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Message handler for dummy app |
|
//----------------------------------------------------------------------------- |
|
static LRESULT CALLBACK messageProc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) |
|
{ |
|
// See if we've gotten a VPROJECT change |
|
if ( msg == WM_SETTINGCHANGE ) |
|
{ |
|
if ( g_pMainFrame != NULL ) |
|
{ |
|
// Reset the list and pop an error if they've chosen something we don't understand |
|
//g_pMainFrame->PopulateConfigList(); |
|
} |
|
} |
|
|
|
return ::DefWindowProc(hwnd,msg,wparam,lparam); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Creates a dummy window that handles windows messages |
|
//----------------------------------------------------------------------------- |
|
void CreateMessageWindow( void ) |
|
{ |
|
// Make and register a very simple window class |
|
memset(&staticWndclass, 0, sizeof(staticWndclass)); |
|
staticWndclass.style = 0; |
|
staticWndclass.lpfnWndProc = messageProc; |
|
staticWndclass.hInstance = GetModuleHandle(NULL); |
|
staticWndclass.lpszClassName = "minidumpRipper_Window"; |
|
staticWndclassAtom = ::RegisterClass( &staticWndclass ); |
|
|
|
// Create an empty window just for message handling |
|
staticHwnd = CreateWindowEx(0, "minidumpRipper_Window", "Hidden Window", 0, 0, 0, 1, 1, NULL, NULL, GetModuleHandle(NULL), NULL); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void ShutdownMessageWindow( void ) |
|
{ |
|
// Kill our windows instance |
|
::DestroyWindow( staticHwnd ); |
|
::UnregisterClass("minidumpRipper_Window", ::GetModuleHandle(NULL)); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Setup all our VGUI info |
|
//----------------------------------------------------------------------------- |
|
bool InitializeVGUI( void ) |
|
{ |
|
vgui::ivgui()->SetSleep(false); |
|
|
|
// Init the surface |
|
vgui::Panel *pPanel = new vgui::Panel( NULL, "TopPanel" ); |
|
pPanel->SetVisible(true); |
|
|
|
vgui::surface()->SetEmbeddedPanel(pPanel->GetVPanel()); |
|
|
|
// load the scheme |
|
vgui::scheme()->LoadSchemeFromFile( "resource/sourcescheme.res", NULL ); |
|
|
|
// localization |
|
g_pVGuiLocalize->AddFile( "resource/platform_%language%.txt" ); |
|
g_pVGuiLocalize->AddFile( "resource/vgui_%language%.txt" ); |
|
g_pVGuiLocalize->AddFile( "mdmpRipper_english.txt" ); |
|
|
|
// Start vgui |
|
vgui::ivgui()->Start(); |
|
|
|
// add our main window |
|
g_pMainFrame = new CMDRipperMain( pPanel, "CMDRipperMain" ); |
|
|
|
// show main window |
|
g_pMainFrame->MoveToCenterOfScreen(); |
|
g_pMainFrame->Activate(); |
|
g_pMainFrame->SetSizeable( true ); |
|
g_pMainFrame->SetMenuButtonVisible( true ); |
|
|
|
g_pSqlWrapper = g_pMainFrame->GetSqlWrapper(); |
|
|
|
return true; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Stop VGUI |
|
//----------------------------------------------------------------------------- |
|
void ShutdownVGUI( void ) |
|
{ |
|
delete g_pMainFrame; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// The application object |
|
//----------------------------------------------------------------------------- |
|
class CMDRipperApp : public CVguiSteamApp |
|
{ |
|
typedef CVguiSteamApp BaseClass; |
|
|
|
public: |
|
// Methods of IApplication |
|
virtual bool Create(); |
|
virtual bool PreInit(); |
|
virtual int Main(); |
|
virtual void PostShutdown(); |
|
virtual void Destroy() {} |
|
}; |
|
|
|
DEFINE_WINDOWED_STEAM_APPLICATION_OBJECT( CMDRipperApp ); |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// The application object |
|
//----------------------------------------------------------------------------- |
|
bool CMDRipperApp::Create() |
|
{ |
|
AppSystemInfo_t appSystems[] = |
|
{ |
|
{ "inputsystem.dll", INPUTSYSTEM_INTERFACE_VERSION }, |
|
{ "vgui2.dll", VGUI_IVGUI_INTERFACE_VERSION }, |
|
{ "", "" } // Required to terminate the list |
|
}; |
|
|
|
return AddSystems( appSystems ); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Entry point |
|
//----------------------------------------------------------------------------- |
|
bool CMDRipperApp::PreInit() |
|
{ |
|
if ( !BaseClass::PreInit() ) |
|
return false; |
|
|
|
// Create a window to capture messages |
|
CreateMessageWindow(); |
|
|
|
FileSystem_SetErrorMode( FS_ERRORMODE_AUTO ); |
|
|
|
// We only want to use the gameinfo.txt that is in the bin\vconfig directory. |
|
char dirName[MAX_PATH]; |
|
Q_strncpy( dirName, GetBaseDirectory(), sizeof( dirName ) ); |
|
Q_AppendSlash( dirName, sizeof( dirName ) ); |
|
Q_strncat( dirName, "minidumpRipper", sizeof( dirName ), COPY_ALL_CHARACTERS ); |
|
|
|
if ( !BaseClass::SetupSearchPaths( dirName, true, true ) ) |
|
{ |
|
::MessageBox( NULL, "Error", "Unable to initialize file system\n", MB_OK ); |
|
return false; |
|
} |
|
|
|
// the "base dir" so we can scan mod name |
|
g_pFullFileSystem->AddSearchPath(GetBaseDirectory(), MDRIPPER_MAIN_PATH_ID); |
|
|
|
// the main platform dir |
|
g_pFullFileSystem->AddSearchPath("platform","PLATFORM", PATH_ADD_TO_HEAD); |
|
g_pFullFileSystem->AddSearchPath(".\\minidumpRipper\\",MDRIPPER_WRITE_PATH, PATH_ADD_TO_HEAD); |
|
|
|
return true; |
|
} |
|
|
|
|
|
void CMDRipperApp::PostShutdown() |
|
{ |
|
// Stop our message window |
|
ShutdownMessageWindow(); |
|
|
|
BaseClass::PostShutdown(); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Entry point |
|
//----------------------------------------------------------------------------- |
|
int CMDRipperApp::Main() |
|
{ |
|
// Run app frame loop |
|
if ( !InitializeVGUI() ) |
|
return 0; |
|
|
|
// Run the app |
|
while (vgui::ivgui()->IsRunning()) |
|
{ |
|
Sleep( 10 ); |
|
vgui::ivgui()->RunFrame(); |
|
} |
|
|
|
ShutdownVGUI(); |
|
|
|
return 1; |
|
}
|
|
|