diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /utils/vgui_panel_zoo/MenuDemo.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'utils/vgui_panel_zoo/MenuDemo.cpp')
| -rw-r--r-- | utils/vgui_panel_zoo/MenuDemo.cpp | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/utils/vgui_panel_zoo/MenuDemo.cpp b/utils/vgui_panel_zoo/MenuDemo.cpp new file mode 100644 index 0000000..52cd2d3 --- /dev/null +++ b/utils/vgui_panel_zoo/MenuDemo.cpp @@ -0,0 +1,116 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#include "MenuDemo.h" + +//----------------------------------------------------------------------------- +// Purpose: Constructor +//----------------------------------------------------------------------------- +MenuDemo::MenuDemo(Panel *parent, const char *name) : DemoPage(parent, name) +{ + // It takes 3 parts to make a simple menu. + // 1. A MenuButton that triggers the menu to open. + // 2. A Menu that opens when the button is pressed. + // 3. MenuItems that are listed in the menu and execute commands when selected. + + // First create a menu button. + m_pMenuButton = new MenuButton(this, "AMenuButton", "Press Me To Open Menu!"); + + // Size the Button to its label. + int wide, tall; + m_pMenuButton->GetContentSize(wide, tall); + m_pMenuButton->SetSize(wide + Label::Content, tall + Label::Content); + + + // Next create a menu, and link it to the menu button + m_pMenu = new Menu(m_pMenuButton, "AMenu"); + + // Now add menu items to the menu. These are the choices that will be seen. + + // In adding an item the first arg is the name of the item as it will + // appear in the list, '&' chars are used to flag windows hotkeys that + // will also work to select the item. They will have a little underline + // underneath them. + // The second arg is a KeyValues structure, that in this case holds a string name + // of the command to be sent when the item is selected. + // The third arg is the target of the command, we are sending all commands + // back to this class. + m_pMenu->AddMenuItem("&Homer", new KeyValues ("Homer"), this); + m_pMenu->AddMenuItem("&Apu", new KeyValues ("Apu"), this); + m_pMenu->AddMenuItem("&Bart", new KeyValues ("Bart"), this); + // A Menu Item with no hotkey + m_pMenu->AddMenuItem("Lisa", new KeyValues ("Lisa"), this); + m_pMenu->AddMenuItem("&George", new KeyValues ("George"), this); + m_pMenu->AddMenuItem("&Marge", new KeyValues ("Marge"), this); + // The 'M' hotkey was already used in Marge, 'a' and 'g' are also taken. + // Use another letter not taken for the hotkey. + m_pMenu->AddMenuItem("Maggi&e", new KeyValues ("Maggie"), this); + + // Hide the menu to start. The button will make it visible. + m_pMenu->SetVisible(false); + + // Tell the menu button which menu it should open. + m_pMenuButton->SetMenu(m_pMenu); + + // Position the menu button in the window. + int x, y, dwide, dtall; + GetBounds (x, y, dwide, dtall); + m_pMenuButton->SetPos(10, dtall/2); + + // By default the menu's width will be that of the largest item it contains. + + // You can also set a fixed width, which we will do so our menu doesn't look so + // scrawny. + // Get the size of the menu button + m_pMenuButton->GetSize(wide, tall); + + // Set the width of the menu to be the same as the menu button. + // Comment this line out if you want to see the menu in its original scrawny size + m_pMenu->SetFixedWidth(wide); + +} + +//----------------------------------------------------------------------------- +// Purpose: Destructor +//----------------------------------------------------------------------------- +MenuDemo::~MenuDemo() +{ +} + +//----------------------------------------------------------------------------- +// Purpose: This is the function that will be executed when the "Maggie" +// messsage is recieved. Selecting the "Maggie" menu item will trigger +// this message to be sent. This class has been selected as the target of the +// button, and our Message Map translates this string message to a function +// command. +//----------------------------------------------------------------------------- +void MenuDemo::OnMaggie() +{ + // Put a breakpoint here and watch the code break + // when you select "Maggie" + ivgui()->DPrintf("Maggie selected.\n"); + +} + + +// explain message passing +MessageMapItem_t MenuDemo::m_MessageMap[] = +{ + MAP_MESSAGE( MenuDemo, "Maggie", OnMaggie ), // from outermenu +}; + +IMPLEMENT_PANELMAP(MenuDemo, DemoPage); + + + + +Panel* MenuDemo_Create(Panel *parent) +{ + return new MenuDemo(parent, "MenuDemo"); +} + + |