//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //============================================================================= #include "mdmpRipper.h" #include "vgui_controls/MessageMap.h" #include "vgui_controls/MenuBar.h" #include "vgui_controls/Menu.h" #include "tier1/KeyValues.h" #include "vgui/ISurface.h" #include "vgui_controls/Frame.h" #include "vgui_controls/FileOpenDialog.h" #include "vgui_controls/MenuButton.h" #include "CMDModulePanel.h" #include "CMDErrorPanel.h" using namespace vgui; //----------------------------------------------------------------------------- // Test panel //----------------------------------------------------------------------------- class CVGuiTestPanel : public vgui::Panel { DECLARE_CLASS_SIMPLE( CVGuiTestPanel, vgui::Panel ); public: CVGuiTestPanel( vgui::Panel *pParent, const char *pName ); virtual void PerformLayout(); private: MESSAGE_FUNC( OnOpen, "Open" ); MESSAGE_FUNC( OnError, "Error" ); MESSAGE_FUNC_PARAMS( OnCompare, "compare", data ); MESSAGE_FUNC_CHARPTR( OnFileSelected, "FileSelected", fullpath ); void CVGuiTestPanel::MiniDumpCompare( CUtlVector *pMiniDumpHandles ); vgui::MenuBar *m_pMenuBar; vgui::Panel *m_pClientArea; // void OnFileSelected( const char * filename ); }; //----------------------------------------------------------------------------- // Class factory //----------------------------------------------------------------------------- vgui::Panel *CreateVGuiTestPanel( const char *pName ) { CVGuiTestPanel *pVGuiTestPanel = new CVGuiTestPanel( NULL, pName ); // pVGuiTestPanel->SetParent( g_pVGuiSurface->GetEmbeddedPanel() ); return pVGuiTestPanel; } //----------------------------------------------------------------------------- // Constructor //----------------------------------------------------------------------------- CVGuiTestPanel::CVGuiTestPanel( vgui::Panel *pParent, const char *pName ) : BaseClass( NULL, pName ) { // Create the menu bar m_pMenuBar = new vgui::MenuBar( this, "Main Menu Bar" ); m_pMenuBar->SetSize( 10, 28 ); // Create a test menu 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 ); MenuButton *pCloseButton = new vgui::MenuButton( this, "Close", "X" ); m_pMenuBar->AddButton( pCloseButton ); // Area below the menu bar m_pClientArea = new vgui::Panel( this, "VGuiTest Client Area "); } //----------------------------------------------------------------------------- // Test menu button //----------------------------------------------------------------------------- void CVGuiTestPanel::OnOpen() { FileOpenDialog *pFileDialog = new FileOpenDialog ( this, "File Open", true); pFileDialog->AddActionSignalTarget(this); pFileDialog->AddFilter( "*.mdmp", "MiniDumps", true ); pFileDialog->DoModal( false ); } void CVGuiTestPanel::OnError() { CMDErrorPanel *pPanel = new CMDErrorPanel( this, "MDError Panel" ); pPanel->Create(); pPanel->AddActionSignalTarget( this ); pPanel->DoModal(); } //----------------------------------------------------------------------------- // The editor panel should always fill the space... //----------------------------------------------------------------------------- void CVGuiTestPanel::PerformLayout() { // Make the editor panel fill the space int iWidth, iHeight; vgui::VPANEL parent = GetParent() ? GetParent()->GetVPanel() : vgui::surface()->GetEmbeddedPanel(); vgui::ipanel()->GetSize( parent, iWidth, iHeight ); SetSize( iWidth, iHeight ); m_pMenuBar->SetSize( iWidth, 28 ); // Make the client area also fill the space not used by the menu bar int iTemp, iMenuHeight; m_pMenuBar->GetSize( iTemp, iMenuHeight ); m_pClientArea->SetPos( 0, iMenuHeight ); m_pClientArea->SetSize( iWidth, iHeight - iMenuHeight ); } void CVGuiTestPanel::OnCompare( KeyValues *data ) { int test = data->GetInt( "handlePointer" ); CUtlVector *pMiniDumpHandles = (CUtlVector *)(void *)test; CUtlVector miniDumps; for( int i = 0; i < pMiniDumpHandles->Count(); i++ ) { miniDumps.AddToTail( new CMiniDumpObject( pMiniDumpHandles->Element( i ) ) ); } CMDModulePanel *pPanel = new CMDModulePanel( this, "MDModule Panel" ); pPanel->Create( &miniDumps ); pPanel->DoModal(); miniDumps.RemoveAll(); pMiniDumpHandles->RemoveAll(); } void CVGuiTestPanel::OnFileSelected( const char *filename ) { CMDModulePanel *pPanel = new CMDModulePanel( this, "MDModule Panel" ); pPanel->Create( filename ); pPanel->DoModal(); }