source-engine/utils/vgui_panel_zoo/ComboBox2.cpp

137 lines
3.8 KiB
C++
Raw Normal View History

2020-04-22 16:56:21 +00:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#include "DemoPage.h"
#include <VGUI/IVGui.h>
#include "vgui_controls/Controls.h"
#include "tier1/KeyValues.h"
#include <vgui_controls/Button.h>
#include <vgui_controls/ComboBox.h>
using namespace vgui;
// Combo boxes are boxes that display text and have a menu attached.
// Selecting an item from the menu changes the displayed text in the box.
class ComboBox2Demo: public DemoPage
{
DECLARE_CLASS_SIMPLE( ComboBox2Demo, DemoPage );
public:
ComboBox2Demo(Panel *parent, const char *name);
~ComboBox2Demo();
void OnButtonClicked();
void AddItemToComboBoxMenu();
private:
Button *m_pButton;
ComboBox *m_pComboBox;
DECLARE_PANELMAP();
};
//-----------------------------------------------------------------------------
// Purpose: Constructor
//-----------------------------------------------------------------------------
ComboBox2Demo::ComboBox2Demo(Panel *parent, const char *name) : DemoPage(parent, name)
{
// Create a new combo box.
// The first arg is the parent, the second the name
// The third arg is the number of items that will be in the menu
// In settin this arg to 4, if we add more than 4 items to the menu
// a scroll bar will be enabled.
// The fourth arg is if the box is editable or not, this time we set it to true.
m_pComboBox = new ComboBox(this, "Directions", 6, true);
// Position the box.
m_pComboBox->SetPos(100, 100);
// Set the width of the Combo box so any element selected will display nicely.
m_pComboBox->SetWide(150);
// Add some text selections to the menu list
m_pComboBox->AddItem("Right", NULL );
m_pComboBox->AddItem("Left", NULL );
m_pComboBox->AddItem("Up", NULL );
m_pComboBox->AddItem("Down", NULL );
m_pComboBox->AddItem("Forward", NULL );
m_pComboBox->AddItem("Backward", NULL );
m_pComboBox->AddItem("Backward and really long", NULL );
// Create a button. Clicking this button will send a command back to us.
// In response to this command we will get the contents of the combo box
// and add it to the list of items in the list.
m_pButton = new Button (this, "AButton", "Click to add an item name to the menu");
m_pButton->SizeToContents();
m_pButton->SetPos(270, 100);
// Install a command that will be executed when the button is pressed
m_pButton->SetCommand(new KeyValues ("ButtonClicked"));
}
//-----------------------------------------------------------------------------
// Purpose: Destructor
//-----------------------------------------------------------------------------
ComboBox2Demo::~ComboBox2Demo()
{
}
//-----------------------------------------------------------------------------
// Purpose: Respond to a message based action signal
//-----------------------------------------------------------------------------
void ComboBox2Demo::OnButtonClicked()
{
ivgui()->DPrintf("Button was clicked.\n");
// Lets check out what's in the combo box and add it to the menu.
AddItemToComboBoxMenu();
}
void ComboBox2Demo::AddItemToComboBoxMenu()
{
char boxText[128];
// Get the text from the combo box
m_pComboBox->GetText(boxText, sizeof( boxText ) );
// We won't add empty text strings to the menu.
if (!strcmp(boxText, ""))
return;
// Add this item to the combo box menu
// If you wanted to check for uniqueness you would have to keep a
// list of the items in the menu and check it.
m_pComboBox->AddItem(boxText, NULL);
// Reset the combo box to empty
m_pComboBox->SetText("");
}
MessageMapItem_t ComboBox2Demo::m_MessageMap[] =
{
MAP_MESSAGE( ComboBox2Demo, "ButtonClicked", OnButtonClicked ),
};
IMPLEMENT_PANELMAP(ComboBox2Demo, BaseClass);
Panel* ComboBox2Demo_Create(Panel *parent)
{
return new ComboBox2Demo(parent, "ComboBox2Demo");
}