mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2025-09-20 20:46:03 +08:00
Update from SDK 2013
This commit is contained in:

committed by
Nicholas Hastings

parent
6d5c024820
commit
94b660e16e
@ -1,252 +1,252 @@
|
||||
//========= Copyright <20> 1996-2005, Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#include <vgui/IInput.h>
|
||||
#include <vgui/IPanel.h>
|
||||
#include <vgui/IScheme.h>
|
||||
#include <vgui/IBorder.h>
|
||||
#include <vgui/ISurface.h>
|
||||
#include <vgui/KeyCode.h>
|
||||
#include <KeyValues.h>
|
||||
|
||||
#include <vgui_controls/MenuBar.h>
|
||||
#include <vgui_controls/MenuButton.h>
|
||||
#include <vgui_controls/Label.h>
|
||||
#include <vgui_controls/Controls.h>
|
||||
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include <tier0/memdbgon.h>
|
||||
|
||||
using namespace vgui;
|
||||
|
||||
|
||||
enum
|
||||
{
|
||||
MENUBARINDENT = 4, // indent from top and bottom of panel.
|
||||
};
|
||||
|
||||
DECLARE_BUILD_FACTORY( MenuBar );
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Constructor
|
||||
//-----------------------------------------------------------------------------
|
||||
MenuBar::MenuBar(Panel *parent, const char *panelName) :
|
||||
Panel(parent, panelName),
|
||||
m_nRightEdge( 0 )
|
||||
{
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Destructor
|
||||
//-----------------------------------------------------------------------------
|
||||
MenuBar::~MenuBar()
|
||||
{
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void MenuBar::AddButton(MenuButton *button)
|
||||
{
|
||||
button->SetParent(this);
|
||||
button->AddActionSignalTarget(this);
|
||||
m_pMenuButtons.AddToTail(button);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// This will add the menu to the menu bar
|
||||
//-----------------------------------------------------------------------------
|
||||
void MenuBar::AddMenu( const char *pButtonName, Menu *pMenu )
|
||||
{
|
||||
MenuButton *pMenuButton = new MenuButton(this, pButtonName, pButtonName);
|
||||
pMenuButton->SetMenu(pMenu);
|
||||
AddButton(pMenuButton);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Handle key presses, Activate shortcuts
|
||||
//-----------------------------------------------------------------------------
|
||||
void MenuBar::OnKeyCodeTyped(KeyCode code)
|
||||
{
|
||||
switch(code)
|
||||
{
|
||||
case KEY_RIGHT:
|
||||
{
|
||||
// iterate the menu items looking for one that is open
|
||||
// if we find one open, open the one to the right
|
||||
for (int i = 0; i < m_pMenuButtons.Count() - 1; i++)
|
||||
{
|
||||
MenuButton *panel = m_pMenuButtons[i];
|
||||
if (panel->IsDepressed())
|
||||
{
|
||||
m_pMenuButtons[i]->DoClick();
|
||||
m_pMenuButtons[i+1]->DoClick();
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case KEY_LEFT:
|
||||
{
|
||||
// iterate the menu items looking for one that is open
|
||||
// if we find one open, open the one to the left
|
||||
for (int i = 1; i < m_pMenuButtons.Count(); i++)
|
||||
{
|
||||
MenuButton *panel = m_pMenuButtons[i];
|
||||
if (panel->IsDepressed())
|
||||
{
|
||||
m_pMenuButtons[i]->DoClick();
|
||||
m_pMenuButtons[i-1]->DoClick();
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// don't chain back
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Handle key presses, Activate shortcuts
|
||||
// Input : code -
|
||||
//-----------------------------------------------------------------------------
|
||||
void MenuBar::OnKeyTyped(wchar_t unichar)
|
||||
{
|
||||
if (unichar)
|
||||
{
|
||||
// iterate the menu items looking for one with the matching hotkey
|
||||
for (int i = 0; i < m_pMenuButtons.Count(); i++)
|
||||
{
|
||||
MenuButton *panel = m_pMenuButtons[i];
|
||||
if (panel->IsVisible())
|
||||
{
|
||||
Panel *hot = panel->HasHotkey(unichar);
|
||||
if (hot)
|
||||
{
|
||||
// post a message to the menuitem telling it it's hotkey was pressed
|
||||
PostMessage(hot, new KeyValues("Hotkey"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// don't chain back
|
||||
}
|
||||
|
||||
void MenuBar::Paint()
|
||||
{
|
||||
IScheme *pScheme = scheme()->GetIScheme( GetScheme() );
|
||||
for ( int i = 0; i < m_pMenuButtons.Count(); i++)
|
||||
{
|
||||
if (!m_pMenuButtons[i]->IsArmed())
|
||||
m_pMenuButtons[i]->SetDefaultBorder(NULL);
|
||||
else
|
||||
{
|
||||
m_pMenuButtons[i]->SetDefaultBorder(pScheme->GetBorder( "ButtonBorder"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Message map
|
||||
//-----------------------------------------------------------------------------
|
||||
void MenuBar::ApplySchemeSettings(IScheme *pScheme)
|
||||
{
|
||||
BaseClass::ApplySchemeSettings(pScheme);
|
||||
|
||||
// get the borders we need
|
||||
SetBorder(pScheme->GetBorder("ButtonBorder"));
|
||||
|
||||
// get the background color
|
||||
SetBgColor(pScheme->GetColor( "MenuBar.BgColor", GetBgColor() ));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Reformat according to the new layout
|
||||
//-----------------------------------------------------------------------------
|
||||
void MenuBar::PerformLayout()
|
||||
{
|
||||
int nBarWidth, nBarHeight;
|
||||
GetSize( nBarWidth, nBarHeight );
|
||||
|
||||
// Now position + resize all buttons
|
||||
int x = MENUBARINDENT;
|
||||
for ( int i = 0; i < m_pMenuButtons.Count(); ++i )
|
||||
{
|
||||
int nWide, nTall;
|
||||
|
||||
m_pMenuButtons[i]->GetContentSize(nWide, nTall);
|
||||
m_pMenuButtons[i]->SetPos( x, MENUBARINDENT );
|
||||
m_pMenuButtons[i]->SetSize( nWide + Label::Content, nBarHeight - 2 * MENUBARINDENT );
|
||||
|
||||
x += nWide + MENUBARINDENT;
|
||||
}
|
||||
|
||||
m_nRightEdge = x;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Get the size of the menus in the bar (so other children can be added to menu bar)
|
||||
// Input : w -
|
||||
// int&h -
|
||||
//-----------------------------------------------------------------------------
|
||||
void MenuBar::GetContentSize( int& w, int&h )
|
||||
{
|
||||
w = m_nRightEdge + 2;
|
||||
h = GetTall();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Message map
|
||||
//-----------------------------------------------------------------------------
|
||||
void MenuBar::OnMenuClose()
|
||||
{
|
||||
RequestFocus();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Message map
|
||||
//-----------------------------------------------------------------------------
|
||||
void MenuBar::OnCursorEnteredMenuButton(int VPanel)
|
||||
{
|
||||
VPANEL menuButton = (VPANEL)VPanel;
|
||||
// see if we had a menu open
|
||||
for ( int i = 0; i < m_pMenuButtons.Count(); i++)
|
||||
{
|
||||
// one of our buttons was pressed.
|
||||
if (m_pMenuButtons[i]->IsDepressed())
|
||||
{
|
||||
int oldbutton = i;
|
||||
// now see if menuButton is one of ours.
|
||||
for ( int j = 0; j < m_pMenuButtons.Count(); j++)
|
||||
{
|
||||
MenuButton *button = static_cast<MenuButton *>(ipanel()->GetPanel(menuButton, GetModuleName()));
|
||||
// it is one of ours.
|
||||
if ( button == m_pMenuButtons[j])
|
||||
{
|
||||
// if its a different button than the one we already had open,
|
||||
if (j != oldbutton)
|
||||
{
|
||||
// close this menu and open the one we just entered
|
||||
m_pMenuButtons[oldbutton]->DoClick();
|
||||
button->DoClick();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#include <vgui/IInput.h>
|
||||
#include <vgui/IPanel.h>
|
||||
#include <vgui/IScheme.h>
|
||||
#include <vgui/IBorder.h>
|
||||
#include <vgui/ISurface.h>
|
||||
#include <vgui/KeyCode.h>
|
||||
#include <KeyValues.h>
|
||||
|
||||
#include <vgui_controls/MenuBar.h>
|
||||
#include <vgui_controls/MenuButton.h>
|
||||
#include <vgui_controls/Label.h>
|
||||
#include <vgui_controls/Controls.h>
|
||||
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include <tier0/memdbgon.h>
|
||||
|
||||
using namespace vgui;
|
||||
|
||||
|
||||
enum
|
||||
{
|
||||
MENUBARINDENT = 4, // indent from top and bottom of panel.
|
||||
};
|
||||
|
||||
DECLARE_BUILD_FACTORY( MenuBar );
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Constructor
|
||||
//-----------------------------------------------------------------------------
|
||||
MenuBar::MenuBar(Panel *parent, const char *panelName) :
|
||||
Panel(parent, panelName),
|
||||
m_nRightEdge( 0 )
|
||||
{
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Destructor
|
||||
//-----------------------------------------------------------------------------
|
||||
MenuBar::~MenuBar()
|
||||
{
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void MenuBar::AddButton(MenuButton *button)
|
||||
{
|
||||
button->SetParent(this);
|
||||
button->AddActionSignalTarget(this);
|
||||
m_pMenuButtons.AddToTail(button);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// This will add the menu to the menu bar
|
||||
//-----------------------------------------------------------------------------
|
||||
void MenuBar::AddMenu( const char *pButtonName, Menu *pMenu )
|
||||
{
|
||||
MenuButton *pMenuButton = new MenuButton(this, pButtonName, pButtonName);
|
||||
pMenuButton->SetMenu(pMenu);
|
||||
AddButton(pMenuButton);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Handle key presses, Activate shortcuts
|
||||
//-----------------------------------------------------------------------------
|
||||
void MenuBar::OnKeyCodeTyped(KeyCode code)
|
||||
{
|
||||
switch(code)
|
||||
{
|
||||
case KEY_RIGHT:
|
||||
{
|
||||
// iterate the menu items looking for one that is open
|
||||
// if we find one open, open the one to the right
|
||||
for (int i = 0; i < m_pMenuButtons.Count() - 1; i++)
|
||||
{
|
||||
MenuButton *panel = m_pMenuButtons[i];
|
||||
if (panel->IsDepressed())
|
||||
{
|
||||
m_pMenuButtons[i]->DoClick();
|
||||
m_pMenuButtons[i+1]->DoClick();
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case KEY_LEFT:
|
||||
{
|
||||
// iterate the menu items looking for one that is open
|
||||
// if we find one open, open the one to the left
|
||||
for (int i = 1; i < m_pMenuButtons.Count(); i++)
|
||||
{
|
||||
MenuButton *panel = m_pMenuButtons[i];
|
||||
if (panel->IsDepressed())
|
||||
{
|
||||
m_pMenuButtons[i]->DoClick();
|
||||
m_pMenuButtons[i-1]->DoClick();
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// don't chain back
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Handle key presses, Activate shortcuts
|
||||
// Input : code -
|
||||
//-----------------------------------------------------------------------------
|
||||
void MenuBar::OnKeyTyped(wchar_t unichar)
|
||||
{
|
||||
if (unichar)
|
||||
{
|
||||
// iterate the menu items looking for one with the matching hotkey
|
||||
for (int i = 0; i < m_pMenuButtons.Count(); i++)
|
||||
{
|
||||
MenuButton *panel = m_pMenuButtons[i];
|
||||
if (panel->IsVisible())
|
||||
{
|
||||
Panel *hot = panel->HasHotkey(unichar);
|
||||
if (hot)
|
||||
{
|
||||
// post a message to the menuitem telling it it's hotkey was pressed
|
||||
PostMessage(hot, new KeyValues("Hotkey"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// don't chain back
|
||||
}
|
||||
|
||||
void MenuBar::Paint()
|
||||
{
|
||||
IScheme *pScheme = scheme()->GetIScheme( GetScheme() );
|
||||
for ( int i = 0; i < m_pMenuButtons.Count(); i++)
|
||||
{
|
||||
if (!m_pMenuButtons[i]->IsArmed())
|
||||
m_pMenuButtons[i]->SetDefaultBorder(NULL);
|
||||
else
|
||||
{
|
||||
m_pMenuButtons[i]->SetDefaultBorder(pScheme->GetBorder( "ButtonBorder"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Message map
|
||||
//-----------------------------------------------------------------------------
|
||||
void MenuBar::ApplySchemeSettings(IScheme *pScheme)
|
||||
{
|
||||
BaseClass::ApplySchemeSettings(pScheme);
|
||||
|
||||
// get the borders we need
|
||||
SetBorder(pScheme->GetBorder("ButtonBorder"));
|
||||
|
||||
// get the background color
|
||||
SetBgColor(pScheme->GetColor( "MenuBar.BgColor", GetBgColor() ));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Reformat according to the new layout
|
||||
//-----------------------------------------------------------------------------
|
||||
void MenuBar::PerformLayout()
|
||||
{
|
||||
int nBarWidth, nBarHeight;
|
||||
GetSize( nBarWidth, nBarHeight );
|
||||
|
||||
// Now position + resize all buttons
|
||||
int x = QuickPropScale( MENUBARINDENT );
|
||||
for ( int i = 0; i < m_pMenuButtons.Count(); ++i )
|
||||
{
|
||||
int nWide, nTall;
|
||||
|
||||
m_pMenuButtons[i]->GetContentSize(nWide, nTall);
|
||||
m_pMenuButtons[i]->SetPos( x, QuickPropScale( MENUBARINDENT ) );
|
||||
m_pMenuButtons[i]->SetSize( nWide + QuickPropScale( Label::Content ), nBarHeight - 2 * QuickPropScale( MENUBARINDENT ) );
|
||||
|
||||
x += nWide + QuickPropScale( MENUBARINDENT );
|
||||
}
|
||||
|
||||
m_nRightEdge = x;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Get the size of the menus in the bar (so other children can be added to menu bar)
|
||||
// Input : w -
|
||||
// int&h -
|
||||
//-----------------------------------------------------------------------------
|
||||
void MenuBar::GetContentSize( int& w, int&h )
|
||||
{
|
||||
w = m_nRightEdge + QuickPropScale( 2 );
|
||||
h = GetTall();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Message map
|
||||
//-----------------------------------------------------------------------------
|
||||
void MenuBar::OnMenuClose()
|
||||
{
|
||||
RequestFocus();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Message map
|
||||
//-----------------------------------------------------------------------------
|
||||
void MenuBar::OnCursorEnteredMenuButton(int VPanel)
|
||||
{
|
||||
VPANEL menuButton = (VPANEL)VPanel;
|
||||
// see if we had a menu open
|
||||
for ( int i = 0; i < m_pMenuButtons.Count(); i++)
|
||||
{
|
||||
// one of our buttons was pressed.
|
||||
if (m_pMenuButtons[i]->IsDepressed())
|
||||
{
|
||||
int oldbutton = i;
|
||||
// now see if menuButton is one of ours.
|
||||
for ( int j = 0; j < m_pMenuButtons.Count(); j++)
|
||||
{
|
||||
MenuButton *button = static_cast<MenuButton *>(ipanel()->GetPanel(menuButton, GetModuleName()));
|
||||
// it is one of ours.
|
||||
if ( button == m_pMenuButtons[j])
|
||||
{
|
||||
// if its a different button than the one we already had open,
|
||||
if (j != oldbutton)
|
||||
{
|
||||
// close this menu and open the one we just entered
|
||||
m_pMenuButtons[oldbutton]->DoClick();
|
||||
button->DoClick();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user