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.
171 lines
4.6 KiB
171 lines
4.6 KiB
//========= 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; |
|
} |
|
|
|
|
|
|
|
|
|
|