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.
150 lines
4.5 KiB
150 lines
4.5 KiB
//========= 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"); |
|
} |
|
|
|
|
|
|