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/QueryBox.cpp | 222 ++++++++++++++++++++++++++++++++ 1 file changed, 222 insertions(+) create mode 100644 mp/src/vgui2/vgui_controls/QueryBox.cpp (limited to 'mp/src/vgui2/vgui_controls/QueryBox.cpp') diff --git a/mp/src/vgui2/vgui_controls/QueryBox.cpp b/mp/src/vgui2/vgui_controls/QueryBox.cpp new file mode 100644 index 00000000..71da25e2 --- /dev/null +++ b/mp/src/vgui2/vgui_controls/QueryBox.cpp @@ -0,0 +1,222 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// This class is a message box that has two buttons, ok and cancel instead of +// just the ok button of a message box. We use a message box class for the ok button +// and implement another button here. +// +// $NoKeywords: $ +//=============================================================================// + +#include + +#include +#include + +// memdbgon must be the last include file in a .cpp file!!! +#include + +#ifndef max +#define max(a,b) (((a) > (b)) ? (a) : (b)) +#endif + +using namespace vgui; + +//----------------------------------------------------------------------------- +// Purpose: Constructor +//----------------------------------------------------------------------------- +QueryBox::QueryBox(const char *title, const char *queryText, vgui::Panel *parent) : MessageBox(title, queryText,parent) +{ + SetDeleteSelfOnClose(true); + m_pCancelButton = new Button(this, "CancelButton", "#QueryBox_Cancel"); + m_pCancelButton->SetCommand("Cancel"); + m_pOkButton->SetCommand("OK"); + m_pCancelCommand = NULL; + m_pOkCommand = NULL; + + m_pOkButton->SetTabPosition(1); + m_pCancelButton->SetTabPosition(2); +} + +//----------------------------------------------------------------------------- +// Purpose: Constructor +//----------------------------------------------------------------------------- +QueryBox::QueryBox(const wchar_t *wszTitle, const wchar_t *wszQueryText,vgui::Panel *parent) : MessageBox(wszTitle, wszQueryText,parent) +{ + SetDeleteSelfOnClose(true); + m_pCancelButton = new Button(this, "CancelButton", "#QueryBox_Cancel"); + m_pCancelButton->SetCommand("Cancel"); + m_pOkButton->SetCommand("OK"); + m_pCancelCommand = NULL; + m_pOkCommand = NULL; + + m_pOkButton->SetTabPosition(1); + m_pCancelButton->SetTabPosition(2); +} + +//----------------------------------------------------------------------------- +// Purpose: Destructor +//----------------------------------------------------------------------------- +QueryBox::~QueryBox() +{ + delete m_pCancelButton; + + if ( m_pOkCommand ) + { + m_pOkCommand->deleteThis(); + } + if ( m_pCancelCommand ) + { + m_pCancelCommand->deleteThis(); + } +} + +//----------------------------------------------------------------------------- +// Purpose: Layout the window for drawing +//----------------------------------------------------------------------------- +void QueryBox::PerformLayout() +{ + BaseClass::PerformLayout(); + + int boxWidth, boxTall; + GetSize(boxWidth, boxTall); + + int x, y, wide, tall; + GetClientArea(x, y, wide, tall); + wide += x; + tall += y; + + int oldWide, oldTall; + m_pCancelButton->GetSize(oldWide, oldTall); + + int btnWide, btnTall; + m_pCancelButton->GetContentSize(btnWide, btnTall); + btnWide = max(oldWide, btnWide + 10); + btnTall = max(oldTall, btnTall + 10); + m_pCancelButton->SetSize(btnWide, btnTall); + +//nt boxWidth, boxTall; + GetSize(boxWidth, boxTall); +// wide = max(wide, btnWide * 2 + 100); +// SetSize(wide, tall); + + m_pOkButton->SetPos((wide/2)-(m_pOkButton->GetWide())-1 + x, tall - m_pOkButton->GetTall() - 15); + m_pCancelButton->SetPos((wide/2) + x+16, tall - m_pCancelButton->GetTall() - 15); + +} + +//----------------------------------------------------------------------------- +// Purpose: Handles command text from the buttons +// Deletes self when closed +//----------------------------------------------------------------------------- +void QueryBox::OnCommand(const char *command) +{ + if (!stricmp(command, "OK")) + { + OnCommand("Close"); + + if ( m_pOkCommand ) + { + PostActionSignal(m_pOkCommand->MakeCopy()); + } + } + else if (!stricmp(command, "Cancel")) + { + OnCommand("Close"); + + if (m_pCancelCommand) + { + PostActionSignal(m_pCancelCommand->MakeCopy()); + } + } + + BaseClass::OnCommand(command); + +} + +//----------------------------------------------------------------------------- +// Purpose: Set the keyvalues to send when ok button is hit +//----------------------------------------------------------------------------- +void QueryBox::SetOKCommand(KeyValues *keyValues) +{ + if ( m_pOkCommand ) + { + m_pOkCommand->deleteThis(); + } + + m_pOkCommand = keyValues; +} + +//----------------------------------------------------------------------------- +// Purpose: Set a value of the ok command +//----------------------------------------------------------------------------- +void QueryBox::SetOKCommandValue(const char *keyName, int value) +{ + if ( !m_pOkCommand ) + { + m_pOkCommand = new KeyValues("Command"); + } + + m_pOkCommand->SetInt(keyName, value); +} + +//----------------------------------------------------------------------------- +// Purpose: Set the keyvalues to send when the cancel button is hit +//----------------------------------------------------------------------------- +void QueryBox::SetCancelCommand(KeyValues *keyValues) +{ + if ( m_pCancelCommand ) + { + m_pCancelCommand->deleteThis(); + } + + m_pCancelCommand = keyValues; +} + +//----------------------------------------------------------------------------- +// Purpose: Sets the cancel button text +//----------------------------------------------------------------------------- +void QueryBox::SetCancelButtonText(const char* buttonText) +{ + m_pCancelButton->SetText(buttonText); + InvalidateLayout(); +} + +//----------------------------------------------------------------------------- +// Purpose: Sets the cancel button text +//----------------------------------------------------------------------------- +void QueryBox::SetCancelButtonText(const wchar_t* wszButtonText) +{ + m_pCancelButton->SetText(wszButtonText); + InvalidateLayout(); +} + +void QueryBox::OnKeyCodeTyped( KeyCode code ) +{ + if ( code == KEY_ESCAPE ) + { + OnCommand("Cancel"); + } + else + { + Frame::OnKeyCodeTyped(code); + } +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void QueryBox::OnKeyCodePressed( KeyCode code ) +{ + if ( code == KEY_XBUTTON_B ) + { + OnCommand("Cancel"); + } + else + { + Frame::OnKeyCodePressed(code); + } +} + + + -- cgit v1.2.3