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.
145 lines
4.4 KiB
145 lines
4.4 KiB
//========= 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/EditablePanel.h> |
|
#include <vgui_controls/Label.h> |
|
#include <vgui_controls/ComboBox.h> |
|
|
|
using namespace vgui; |
|
|
|
// EditablePanels are panels that can create certain vgui controls |
|
// by using the function createControlByName() |
|
|
|
|
|
class EditablePanelDemo: public DemoPage |
|
{ |
|
public: |
|
EditablePanelDemo(Panel *parent, const char *name); |
|
~EditablePanelDemo(); |
|
|
|
private: |
|
EditablePanel *m_pEditablePanel; |
|
Label *m_pSpeedLabel; |
|
ComboBox *m_pInternetSpeed; |
|
|
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Constructor |
|
//----------------------------------------------------------------------------- |
|
EditablePanelDemo::EditablePanelDemo(Panel *parent, const char *name) : DemoPage(parent, name) |
|
{ |
|
// Create an EditablePanel. |
|
m_pEditablePanel = new EditablePanel(this, "AnEditablePanel"); |
|
|
|
|
|
// Set its position and size |
|
m_pEditablePanel->SetSize(400, 200); |
|
m_pEditablePanel->SetPos(0, 0); |
|
|
|
// Add a child Label panel to the EditablePanel |
|
m_pSpeedLabel = (Label *)(m_pEditablePanel->CreateControlByName("Label")); |
|
// Set its parent to our editable panel. |
|
m_pSpeedLabel->SetParent(m_pEditablePanel); |
|
// Set its Position |
|
m_pSpeedLabel->SetPos(20, 30); |
|
// Set its size |
|
m_pSpeedLabel->SetSize(96,20); |
|
// Set it not to resize with the window. |
|
m_pSpeedLabel->SetAutoResize(PIN_TOPLEFT, AUTORESIZE_NO, 0, 0, 0, 0 ); |
|
// Set it visible |
|
m_pSpeedLabel->SetVisible(true); |
|
// Set it enabled |
|
m_pSpeedLabel->SetEnabled(true); |
|
// Set its tab position |
|
m_pSpeedLabel->SetTabPosition(0); |
|
// Set the text in the label |
|
m_pSpeedLabel->SetText("Internet &Speed"); |
|
// Set its text alignment |
|
m_pSpeedLabel->SetContentAlignment(Label::a_east); |
|
|
|
// Add another child panel to the EditablePanel, this time a ComboBox. |
|
|
|
// 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 the combo box using the create function |
|
m_pInternetSpeed = (ComboBox *)(m_pEditablePanel->CreateControlByName("ComboBox")); |
|
// Set its parent to our editable panel. |
|
m_pInternetSpeed->SetParent(m_pEditablePanel); |
|
// Set its position next to the label. |
|
m_pInternetSpeed->SetPos(124, 30); |
|
// Set its size |
|
m_pInternetSpeed->SetSize(200, 20); |
|
// Set it not to resize with the window. |
|
m_pInternetSpeed->SetAutoResize(PIN_TOPLEFT, AUTORESIZE_NO, 0, 0, 0, 0 ); |
|
// Set it visible |
|
m_pInternetSpeed->SetVisible(true); |
|
// Set it enabled |
|
m_pInternetSpeed->SetEnabled(true); |
|
// Set its tab position |
|
m_pInternetSpeed->SetTabPosition(0); |
|
// Set its text hidden attribute |
|
m_pInternetSpeed->SetTextHidden(false); |
|
// Set it not editable |
|
m_pInternetSpeed->SetEditable(false); |
|
// Set its maxchars to -1 since it is not editable |
|
//m_pInternetSpeed->SetMaximumCharCount(-1); |
|
// Set the number of items in the combo box menu |
|
m_pInternetSpeed->SetNumberOfEditLines(ARRAYSIZE(g_Speeds)); |
|
// Set the drop down arrow button visible |
|
m_pInternetSpeed->SetDropdownButtonVisible(true); |
|
|
|
|
|
// Add menu items to this combo box. |
|
for (int i = 0; i < ARRAYSIZE(g_Speeds); i++) |
|
{ |
|
m_pInternetSpeed->AddItem(g_Speeds[i], NULL ); |
|
} |
|
|
|
// Associate our label with our combo box |
|
m_pSpeedLabel->SetAssociatedControl(m_pInternetSpeed); |
|
|
|
// Now you're saying... why bother using an EditablePanel class for this? |
|
// I could have just created a panel and just created each child panel on my own |
|
// using code like this: memberLabel = new Label(NULL, NULL, "Label"); |
|
// I could have even saved many lines of code by choosing nice constructor args. |
|
// Well the real power of editable panels lies in the use of Resource Files |
|
// as seen in the next example. |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Destructor |
|
//----------------------------------------------------------------------------- |
|
EditablePanelDemo::~EditablePanelDemo() |
|
{ |
|
} |
|
|
|
|
|
|
|
Panel* EditablePanelDemo_Create(Panel *parent) |
|
{ |
|
return new EditablePanelDemo(parent, "EditablePanelDemo"); |
|
} |
|
|
|
|
|
|