From 39ed87570bdb2f86969d4be821c94b722dc71179 Mon Sep 17 00:00:00 2001 From: Joe Ludwig Date: Wed, 26 Jun 2013 15:22:04 -0700 Subject: First version of the SOurce SDK 2013 --- mp/src/vgui2/vgui_controls/PropertyDialog.cpp | 303 ++++++++++++++++++++++++++ 1 file changed, 303 insertions(+) create mode 100644 mp/src/vgui2/vgui_controls/PropertyDialog.cpp (limited to 'mp/src/vgui2/vgui_controls/PropertyDialog.cpp') diff --git a/mp/src/vgui2/vgui_controls/PropertyDialog.cpp b/mp/src/vgui2/vgui_controls/PropertyDialog.cpp new file mode 100644 index 00000000..3f81dbd3 --- /dev/null +++ b/mp/src/vgui2/vgui_controls/PropertyDialog.cpp @@ -0,0 +1,303 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#include +#include + +#include +#include +#include + +// memdbgon must be the last include file in a .cpp file!!! +#include + +using namespace vgui; + +//----------------------------------------------------------------------------- +// Purpose: Constructor +//----------------------------------------------------------------------------- +PropertyDialog::PropertyDialog(Panel *parent, const char *panelName) : Frame(parent, panelName) +{ + // create the property sheet + _propertySheet = new PropertySheet(this, "Sheet"); + _propertySheet->AddActionSignalTarget(this); + _propertySheet->SetTabPosition(1); + + // add the buttons + _okButton = new Button(this, "OKButton", "#PropertyDialog_OK"); + _okButton->AddActionSignalTarget(this); + _okButton->SetTabPosition(2); + _okButton->SetCommand("OK"); + GetFocusNavGroup().SetDefaultButton(_okButton); + + _cancelButton = new Button(this, "CancelButton", "#PropertyDialog_Cancel"); + _cancelButton->AddActionSignalTarget(this); + _cancelButton->SetTabPosition(3); + _cancelButton->SetCommand("Cancel"); + + _applyButton = new Button(this, "ApplyButton", "#PropertyDialog_Apply"); + _applyButton->AddActionSignalTarget(this); + _applyButton->SetTabPosition(4); + _applyButton->SetVisible(false); // default to not visible + _applyButton->SetEnabled(false); // default to not enabled + _applyButton->SetCommand("Apply"); + + SetSizeable(false); +} + +//----------------------------------------------------------------------------- +// Purpose: Destructor +//----------------------------------------------------------------------------- +PropertyDialog::~PropertyDialog() +{ +} + +//----------------------------------------------------------------------------- +// Purpose: Returns a pointer to the PropertySheet this dialog encapsulates +// Output : PropertySheet * +//----------------------------------------------------------------------------- +PropertySheet *PropertyDialog::GetPropertySheet() +{ + return _propertySheet; +} + +//----------------------------------------------------------------------------- +// Purpose: Gets a pointer to the currently active page. +// Output : Panel +//----------------------------------------------------------------------------- +Panel *PropertyDialog::GetActivePage() +{ + return _propertySheet->GetActivePage(); +} + +//----------------------------------------------------------------------------- +// Purpose: Wrapped function +//----------------------------------------------------------------------------- +void PropertyDialog::AddPage(Panel *page, const char *title) +{ + _propertySheet->AddPage(page, title); +} + +//----------------------------------------------------------------------------- +// Purpose: reloads the data in all the property page +//----------------------------------------------------------------------------- +void PropertyDialog::ResetAllData() +{ + _propertySheet->ResetAllData(); +} + +//----------------------------------------------------------------------------- +// Purpose: Applies any changes +//----------------------------------------------------------------------------- +void PropertyDialog::ApplyChanges() +{ + OnCommand("Apply"); +} + +//----------------------------------------------------------------------------- +// Purpose: Sets up the sheet +//----------------------------------------------------------------------------- +void PropertyDialog::PerformLayout() +{ + BaseClass::PerformLayout(); + + int iBottom = m_iSheetInsetBottom; + if ( IsProportional() ) + { + iBottom = scheme()->GetProportionalScaledValueEx( GetScheme(), iBottom ); + } + + int x, y, wide, tall; + GetClientArea(x, y, wide, tall); + _propertySheet->SetBounds(x, y, wide, tall - iBottom); + + + // move the buttons to the bottom-right corner + int xpos = x + wide - 80; + int ypos = tall + y - 28; + + if (_applyButton->IsVisible()) + { + _applyButton->SetBounds(xpos, ypos, 72, 24); + xpos -= 80; + } + + if (_cancelButton->IsVisible()) + { + _cancelButton->SetBounds(xpos, ypos, 72, 24); + xpos -= 80; + } + + _okButton->SetBounds(xpos, ypos, 72, 24); + + _propertySheet->InvalidateLayout(); // tell the propertysheet to redraw! + Repaint(); +} + +//----------------------------------------------------------------------------- +// Purpose: Handles command text from the buttons +//----------------------------------------------------------------------------- +void PropertyDialog::OnCommand(const char *command) +{ + if (!stricmp(command, "OK")) + { + if ( OnOK(false) ) + { + OnCommand("Close"); + } + _applyButton->SetEnabled(false); + } + else if (!stricmp(command, "Cancel")) + { + OnCancel(); + Close(); + } + else if (!stricmp(command, "Apply")) + { + OnOK(true); + _applyButton->SetEnabled(false); + InvalidateLayout(); + } + else + { + BaseClass::OnCommand(command); + } +} + +//----------------------------------------------------------------------------- +// Purpose: called when the Cancel button is pressed +//----------------------------------------------------------------------------- +void PropertyDialog::OnCancel() +{ + // designed to be overridden +} + + +//----------------------------------------------------------------------------- +// Purpose: +// Input : code - +//----------------------------------------------------------------------------- +void PropertyDialog::OnKeyCodeTyped(KeyCode code) +{ + // this has been removed, since it conflicts with how we use the escape key in the game +// if (code == KEY_ESCAPE) +// { +// OnCommand("Cancel"); +// } +// else + { + BaseClass::OnKeyCodeTyped(code); + } +} + + +//----------------------------------------------------------------------------- +// Purpose: Command handler +//----------------------------------------------------------------------------- +bool PropertyDialog::OnOK(bool applyOnly) +{ + // the sheet should have the pages apply changes before we tell the world + _propertySheet->ApplyChanges(); + + // this should tell anybody who's watching us that we're done + PostActionSignal(new KeyValues("ApplyChanges")); + + // default to closing + return true; +} + +//----------------------------------------------------------------------------- +// Purpose: Overrides build mode so it edits the sub panel +//----------------------------------------------------------------------------- +void PropertyDialog::ActivateBuildMode() +{ + // no subpanel, no build mode + EditablePanel *panel = dynamic_cast(GetActivePage()); + if (!panel) + return; + + panel->ActivateBuildMode(); +} + +//----------------------------------------------------------------------------- +// Purpose: sets the text on the OK/Cancel buttons, overriding the default +//----------------------------------------------------------------------------- +void PropertyDialog::SetOKButtonText(const char *text) +{ + _okButton->SetText(text); +} + +//----------------------------------------------------------------------------- +// Purpose: sets the text on the OK/Cancel buttons, overriding the default +//----------------------------------------------------------------------------- +void PropertyDialog::SetCancelButtonText(const char *text) +{ + _cancelButton->SetText(text); +} + +//----------------------------------------------------------------------------- +// Purpose: sets the text on the apply buttons, overriding the default +//----------------------------------------------------------------------------- +void PropertyDialog::SetApplyButtonText(const char *text) +{ + _applyButton->SetText(text); +} + +//----------------------------------------------------------------------------- +// Purpose: changes the visibility of the buttons +//----------------------------------------------------------------------------- +void PropertyDialog::SetOKButtonVisible(bool state) +{ + _okButton->SetVisible(state); + InvalidateLayout(); +} + +//----------------------------------------------------------------------------- +// Purpose: changes the visibility of the buttons +//----------------------------------------------------------------------------- +void PropertyDialog::SetCancelButtonVisible(bool state) +{ + _cancelButton->SetVisible(state); + InvalidateLayout(); +} + +//----------------------------------------------------------------------------- +// Purpose: changes the visibility of the buttons +//----------------------------------------------------------------------------- +void PropertyDialog::SetApplyButtonVisible(bool state) +{ + _applyButton->SetVisible(state); + InvalidateLayout(); +} + +//----------------------------------------------------------------------------- +// Purpose: when a sheet changes, enable the apply button +//----------------------------------------------------------------------------- +void PropertyDialog::OnApplyButtonEnable() +{ + if (_applyButton->IsEnabled()) + return; + + EnableApplyButton(true); +} + +//----------------------------------------------------------------------------- +// Purpose: enable/disable the apply button +//----------------------------------------------------------------------------- +void PropertyDialog::EnableApplyButton(bool bEnable) +{ + _applyButton->SetEnabled(bEnable); + InvalidateLayout(); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void PropertyDialog::RequestFocus(int direction) +{ + _propertySheet->RequestFocus(direction); +} -- cgit v1.2.3