mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-08 01:39:36 +00:00
1
This commit is contained in:
@@ -0,0 +1,150 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
#include "DemoPage.h"
|
||||
|
||||
#include "tier1/KeyValues.h"
|
||||
#include <vgui_controls/ComboBox.h>
|
||||
|
||||
using namespace vgui;
|
||||
|
||||
|
||||
class EditablePanel2Demo: public DemoPage
|
||||
{
|
||||
public:
|
||||
EditablePanel2Demo(Panel *parent, const char *name);
|
||||
~EditablePanel2Demo();
|
||||
|
||||
private:
|
||||
ComboBox *m_pInternetSpeed;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Constructor
|
||||
//-----------------------------------------------------------------------------
|
||||
EditablePanel2Demo::EditablePanel2Demo(Panel *parent, const char *name) : DemoPage(parent, name)
|
||||
{
|
||||
// Editable panels are able to have their layout described by external
|
||||
// resource files. All Frames belong to the Editable Panel class.
|
||||
// The class EditablePanel2Demo is a PropertyPage class, and PropertyPage
|
||||
// is an EditablePanel, so we can load in a resource file for this class.
|
||||
|
||||
|
||||
// Load the vgui controls from a resource file.
|
||||
// The resource file looks like this:
|
||||
/* EDITABLE PANEL DEMO RESOURCE FILE LAYOUT
|
||||
"EditablePanelDemo"
|
||||
{
|
||||
"SpeedLabel"
|
||||
{
|
||||
"ControlName" "Label"
|
||||
"fieldName" "SpeedLabel"
|
||||
"xpos" "20"
|
||||
"ypos" "30"
|
||||
"wide" "96"
|
||||
"tall" "20"
|
||||
"autoResize" "0"
|
||||
"pinCorner" "0"
|
||||
"visible" "1"
|
||||
"enabled" "1"
|
||||
"tabPosition" "0"
|
||||
"labelText" "Internet &Speed"
|
||||
"textAlignment" "east"
|
||||
"associate" "InternetSpeed"
|
||||
}
|
||||
"InternetSpeed"
|
||||
{
|
||||
"ControlName" "ComboBox"
|
||||
"fieldName" "InternetSpeed"
|
||||
"xpos" "124"
|
||||
"ypos" "30"
|
||||
"wide" "200"
|
||||
"tall" "20"
|
||||
"autoResize" "0"
|
||||
"pinCorner" "0"
|
||||
"visible" "1"
|
||||
"enabled" "1"
|
||||
"tabPosition" "0"
|
||||
"textHidden" "0"
|
||||
"editable" "0"
|
||||
"maxchars" "-1"
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
// VGUI control panel resource values are grouped by a panel name, here
|
||||
// we have 2 panels, one called "SpeedLabel" and one called
|
||||
// "Internet Speed".
|
||||
// Each control has a set of keyValues that describe attributes of
|
||||
// the panel. SpeedLabel's control name is Label, this is a vgui Label class.
|
||||
// Its 'xpos' and 'ypos' tell is position in the parent window.
|
||||
// Its 'wide' and 'tall' tell its size.
|
||||
// 'AutoResize' is false meaning this panel will not grow or shrink in size
|
||||
// response to panel resizing.
|
||||
// More panel attributes follow, until we come to 'labelText'.
|
||||
// This is the text that will appear in the label. The text is
|
||||
// "Internet Speed" and the ampersand (&) in front of the 'S' indicates
|
||||
// that S is a hotkey in the label name.
|
||||
// 'Associate' associates this label with another vgui control that will
|
||||
// gain focus when the hotkey is hit. The associated control is called
|
||||
// "InternetSpeed" and this panel name happens to be the very next panel in the list.
|
||||
// Its 'ControlName' tells us it is a ComboBox. Hitting the 'S' hotkey will trigger
|
||||
// the combo box to gain focus. Note that the combo box does not currently
|
||||
// have any items within it.
|
||||
|
||||
|
||||
// This will be the menu items of our combo box menu.
|
||||
// List of all the different internet speeds
|
||||
char *g_Speeds[] =
|
||||
{
|
||||
{ "Modem - 14.4k"},
|
||||
{ "Modem - 28.8k"},
|
||||
{ "Modem - 33.6k"},
|
||||
{ "Modem - 56k"},
|
||||
{ "ISDN - 112k"},
|
||||
{ "DSL > 256k"},
|
||||
{ "LAN/T1 > 1M"},
|
||||
};
|
||||
|
||||
// Create a combo box with the name "InternetSpeed"
|
||||
// The parameters of the resource file will be applied to this
|
||||
// combo box.
|
||||
m_pInternetSpeed = new ComboBox(this, "InternetSpeed", ARRAYSIZE(g_Speeds), false);
|
||||
|
||||
// Add menu items to this combo box.
|
||||
for (int i = 0; i < ARRAYSIZE(g_Speeds); i++)
|
||||
{
|
||||
m_pInternetSpeed->AddItem(g_Speeds[i], NULL );
|
||||
}
|
||||
|
||||
// Load the resource file settings into our panel.
|
||||
LoadControlSettings("Demo/EditablePanelDemo.res");
|
||||
|
||||
// When the settings are applied (in applySettings()) our panels gain the
|
||||
// additional layout specified by the resource keyValues.
|
||||
|
||||
// There, we are done, we have created one control from "thin air" (the Label)
|
||||
// and only had to specify the menu items of the other control (the ComboBox).
|
||||
// All the rest of the layout was done using the EditablePanel's smarts and
|
||||
// a resource file.
|
||||
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Destructor
|
||||
//-----------------------------------------------------------------------------
|
||||
EditablePanel2Demo::~EditablePanel2Demo()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
Panel* EditablePanel2Demo_Create(Panel *parent)
|
||||
{
|
||||
return new EditablePanel2Demo(parent, "EditablePanel2Demo");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user