summaryrefslogtreecommitdiff
path: root/game/client/game_controls/buysubmenu.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 /game/client/game_controls/buysubmenu.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/client/game_controls/buysubmenu.cpp')
-rw-r--r--game/client/game_controls/buysubmenu.cpp171
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;
+}
+
+
+
+