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.
222 lines
6.0 KiB
222 lines
6.0 KiB
//========= 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 <vgui/KeyCode.h> |
|
|
|
#include <vgui_controls/QueryBox.h> |
|
#include <vgui_controls/TextImage.h> |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include <tier0/memdbgon.h> |
|
|
|
#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); |
|
} |
|
} |
|
|
|
|
|
|
|
|