diff options
Diffstat (limited to 'game/client/game_controls/buysubmenu.cpp')
| -rw-r--r-- | game/client/game_controls/buysubmenu.cpp | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/game/client/game_controls/buysubmenu.cpp b/game/client/game_controls/buysubmenu.cpp new file mode 100644 index 0000000..6bee2e5 --- /dev/null +++ b/game/client/game_controls/buysubmenu.cpp @@ -0,0 +1,171 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#include "cbase.h" +#include "buysubmenu.h" + +#include <KeyValues.h> +#include <vgui_controls/WizardPanel.h> +#include <filesystem.h> +#include <game/client/iviewport.h> +#include <cdll_client_int.h> + +#include "mouseoverpanelbutton.h" +// #include "cs_gamerules.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +using namespace vgui; + +//----------------------------------------------------------------------------- +// Purpose: Constructor +//----------------------------------------------------------------------------- +CBuySubMenu::CBuySubMenu(vgui::Panel *parent, const char *name) : WizardSubPanel(parent, name) +{ + m_NextPanel = NULL; + m_pFirstButton = NULL; + SetProportional(true); + + m_pPanel = new EditablePanel( this, "ItemInfo" );// info window about these items + m_pPanel->SetProportional( true ); +} + +//----------------------------------------------------------------------------- +// Purpose: Destructor +//----------------------------------------------------------------------------- +CBuySubMenu::~CBuySubMenu() +{ +} + +//----------------------------------------------------------------------------- +// Purpose: magic override to allow vgui to create mouse over buttons for us +//----------------------------------------------------------------------------- +Panel *CBuySubMenu::CreateControlByName( const char *controlName ) +{ + if( !Q_stricmp( "MouseOverPanelButton", controlName ) ) + { + MouseOverPanelButton *newButton = CreateNewMouseOverPanelButton( m_pPanel ); + + if( !m_pFirstButton ) + { + m_pFirstButton = newButton; + } + return newButton; + } + else + { + return BaseClass::CreateControlByName( controlName ); + } +} + +//----------------------------------------------------------------------------- +// Purpose: Make the first buttons page get displayed when the menu becomes visible +//----------------------------------------------------------------------------- +void CBuySubMenu::SetVisible( bool state ) +{ + BaseClass::SetVisible( state ); + + for( int i = 0; i< GetChildCount(); i++ ) // get all the buy buttons to performlayout + { + MouseOverPanelButton *buyButton = dynamic_cast<MouseOverPanelButton *>(GetChild(i)); + if ( buyButton ) + { + if( buyButton == m_pFirstButton && state == true ) + buyButton->ShowPage(); + else + buyButton->HidePage(); + + buyButton->InvalidateLayout(); + } + } +} + +CBuySubMenu* CBuySubMenu::CreateNewSubMenu() +{ + return new CBuySubMenu( this ); +} + +MouseOverPanelButton* CBuySubMenu::CreateNewMouseOverPanelButton(EditablePanel *panel) +{ + return new MouseOverPanelButton(this, NULL, panel); +} + + +//----------------------------------------------------------------------------- +// Purpose: Called when the user picks a class +//----------------------------------------------------------------------------- +void CBuySubMenu::OnCommand( const char *command) +{ + if ( Q_strstr( command, ".res" ) ) // if its a .res file then its a new menu + { + int i; + // check the cache + for ( i = 0; i < m_SubMenus.Count(); i++ ) + { + if ( !Q_stricmp( m_SubMenus[i].filename, command ) ) + { + m_NextPanel = m_SubMenus[i].panel; + Assert( m_NextPanel ); + m_NextPanel->InvalidateLayout(); // force it to reset it prices + break; + } + } + + if ( i == m_SubMenus.Count() ) + { + // not there, add a new entry + SubMenuEntry_t newEntry; + memset( &newEntry, 0x0, sizeof( newEntry ) ); + + CBuySubMenu *newMenu = CreateNewSubMenu(); + newMenu->LoadControlSettings( command ); + m_NextPanel = newMenu; + Q_strncpy( newEntry.filename, command, sizeof( newEntry.filename ) ); + newEntry.panel = newMenu; + m_SubMenus.AddToTail( newEntry ); + } + + GetWizardPanel()->OnNextButton(); + } + else + { + GetWizardPanel()->Close(); + gViewPortInterface->ShowBackGround( false ); + + if ( Q_stricmp( command, "vguicancel" ) != 0 ) + engine->ClientCmd( command ); + + BaseClass::OnCommand(command); + } +} + +//----------------------------------------------------------------------------- +// Purpose: Causes the panel to delete itself when it closes +//----------------------------------------------------------------------------- +void CBuySubMenu::DeleteSubPanels() +{ + if ( m_NextPanel ) + { + m_NextPanel->SetVisible( false ); + m_NextPanel = NULL; + } + + m_pFirstButton = NULL; +} + +//----------------------------------------------------------------------------- +// Purpose: return the next panel to show +//----------------------------------------------------------------------------- +vgui::WizardSubPanel *CBuySubMenu::GetNextSubPanel() +{ + return m_NextPanel; +} + + + + |