source-engine/game/client/econ/confirm_dialog.h

231 lines
11 KiB
C
Raw Permalink Normal View History

2020-04-22 16:56:21 +00:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
//=======================================================================================//
#ifndef CONFIRM_DIALOG_H
#define CONFIRM_DIALOG_H
#ifdef _WIN32
#pragma once
#endif
#include "vgui_controls/EditablePanel.h"
#include "vgui_controls/CheckButton.h"
#include "inputsystem/iinputsystem.h"
//-----------------------------------------------------------------------------
// Purpose:
// - Basic confirm dialog - derive from this and implement GetText().
// - The user will have two options, essentially yes or no.
// - A "ConfirmDlgResult" message is sent to the parent with the result.
// Check the "confirmed" parameter.
// - Panel deletes itself.
// - See CConfirmDeleteDialog for a generic delete confirmation dialog.
//-----------------------------------------------------------------------------
class CExButton;
#ifdef TF_CLIENT_DLL
class CTFSpectatorGUIHealth;
#endif // TF_CLIENT_DLL
class CConfirmDialog : public vgui::EditablePanel
{
DECLARE_CLASS_SIMPLE( CConfirmDialog, vgui::EditablePanel );
public:
CConfirmDialog( vgui::Panel *parent );
virtual const wchar_t *GetText() = 0;
void Show( bool bMakePopup = true );
void SetIconImage( const char *pszIcon );
protected:
virtual void OnSizeChanged(int nNewWide, int nNewTall );
virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
virtual void OnCommand( const char *command );
virtual void OnKeyCodeTyped( vgui::KeyCode code );
virtual void OnKeyCodePressed( vgui::KeyCode code );
virtual const char *GetResFile();
void FinishUp(); // Hide the panel, mark for deletion, remove from modal stack.
CExButton *m_pConfirmButton;
CExButton *m_pCancelButton;
vgui::ImagePanel *m_pIcon;
};
//-----------------------------------------------------------------------------
typedef void (*GenericConfirmDialogCallback)( bool bConfirmed, void *pContext );
// An implementation of the Confirm Dialog that is "generic"
class CTFGenericConfirmDialog : public CConfirmDialog
{
DECLARE_CLASS_SIMPLE( CTFGenericConfirmDialog, CConfirmDialog );
public:
CTFGenericConfirmDialog( const char *pTitle, const char *pTextKey, const char *pConfirmBtnText,
const char *pCancelBtnText, GenericConfirmDialogCallback callback, vgui::Panel *pParent );
CTFGenericConfirmDialog( const char *pTitle, const wchar_t *pText, const char *pConfirmBtnText,
const char *pCancelBtnText, GenericConfirmDialogCallback callback, vgui::Panel *pParent );
virtual ~CTFGenericConfirmDialog();
virtual const wchar_t *GetText();
virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
virtual void PerformLayout();
virtual void OnCommand( const char *command );
void SetStringTokens( KeyValues *pKeyValues );
void AddStringToken( const char* pToken, const wchar_t* pValue );
void SetContext( void *pContext );
protected:
void CommonInit( const char *pTitle, const char *pConfirmBtnText, const char *pCancelBtnText,
GenericConfirmDialogCallback callback, vgui::Panel *pParent );
const char *m_pTitle;
const char *m_pTextKey;
const char *m_pConfirmBtnText;
const char *m_pCancelBtnText;
KeyValues *m_pKeyValues;
wchar_t m_wszBuffer[1024];
GenericConfirmDialogCallback m_pCallback;
void *m_pContext;
};
// A generic message dialog, which is just a generic confirm dialog w/o the cancel button
class CTFMessageBoxDialog : public CTFGenericConfirmDialog
{
DECLARE_CLASS_SIMPLE( CTFMessageBoxDialog, CTFGenericConfirmDialog );
public:
CTFMessageBoxDialog( const char *pTitle, const char *pText, const char *pConfirmBtnText, GenericConfirmDialogCallback callback, vgui::Panel *parent )
: CTFGenericConfirmDialog( pTitle, pText, pConfirmBtnText, NULL, callback, parent ) {}
CTFMessageBoxDialog( const char *pTitle, const wchar_t *pText, const char *pConfirmBtnText, GenericConfirmDialogCallback callback, vgui::Panel *parent )
: CTFGenericConfirmDialog( pTitle, pText, pConfirmBtnText, NULL, callback, parent ) {}
virtual const char* GetResFile();
};
// A generic message dialog, which is just a generic confirm dialog w/o the cancel button that plays a sound with optional delay
class CTFMessageBoxDialogWithSound : public CTFMessageBoxDialog
{
DECLARE_CLASS_SIMPLE( CTFMessageBoxDialogWithSound, CTFMessageBoxDialog );
public:
CTFMessageBoxDialogWithSound( const char *pTitle, const char *pText, const char *pszSound, float flDelay, const char *pConfirmBtnText, GenericConfirmDialogCallback callback, vgui::Panel *parent );
CTFMessageBoxDialogWithSound( const char *pTitle, const wchar_t *pText, const char *pszSound, float flDelay, const char *pConfirmBtnText, GenericConfirmDialogCallback callback, vgui::Panel *parent );
virtual void OnTick() OVERRIDE;
private:
char m_szSound[MAX_PATH];
float m_flSoundTime;
bool m_bPlayedSound;
};
// A dialog with an upgrade button that takes them to the mann co store
class CTFUpgradeBoxDialog : public CTFMessageBoxDialog
{
DECLARE_CLASS_SIMPLE( CTFUpgradeBoxDialog, CTFMessageBoxDialog );
public:
CTFUpgradeBoxDialog( const char *pTitle, const char *pText, const char *pConfirmBtnText, GenericConfirmDialogCallback callback, vgui::Panel *parent )
: CTFMessageBoxDialog( pTitle, pText, pConfirmBtnText, callback, parent ) {}
CTFUpgradeBoxDialog( const char *pTitle, const wchar_t *pText, const char *pConfirmBtnText, GenericConfirmDialogCallback callback, vgui::Panel *parent )
: CTFMessageBoxDialog( pTitle, pText, pConfirmBtnText, callback, parent ) {}
virtual const char *GetResFile()
{
return "Resource/UI/UpgradeBoxDialog.res";
}
virtual void OnCommand( const char *command );
};
// An implementation of the Confirm Dialog with a persistant "opt out" checkbox stored via ConVar
class CTFGenericConfirmOptOutDialog : public CTFGenericConfirmDialog
{
DECLARE_CLASS_SIMPLE( CTFGenericConfirmOptOutDialog, CTFGenericConfirmDialog );
public:
CTFGenericConfirmOptOutDialog( const char *pTitle, const char *pText, const char *pConfirmBtnText, const char *pCancelBtnText, const char *pOptOutText, const char *pOptOutConVarName, GenericConfirmDialogCallback callback, vgui::Panel *parent ) ;
virtual ~CTFGenericConfirmOptOutDialog() { }
virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
MESSAGE_FUNC_PARAMS( OnButtonChecked, "CheckButtonChecked", pData );
protected:
virtual const char *GetResFile();
const char *m_optOutText;
vgui::CheckButton *m_optOutCheckbox;
const char *m_optOutConVarName;
};
#ifdef TF_CLIENT_DLL
// A dialog presented to dead players when being revived
class CTFReviveDialog : public CTFMessageBoxDialog
{
DECLARE_CLASS_SIMPLE( CTFReviveDialog, CTFMessageBoxDialog );
public:
CTFReviveDialog( const char *pTitle, const char *pText, const char *pConfirmBtnText, GenericConfirmDialogCallback callback, vgui::Panel *parent );
virtual ~CTFReviveDialog() { }
virtual void PerformLayout() OVERRIDE;
virtual void OnTick() OVERRIDE;
virtual const char *GetResFile() OVERRIDE { return "Resource/UI/ReviveDialog.res"; }
void SetOwner( CBaseEntity *pEntity );
CTFSpectatorGUIHealth *m_pTargetHealth;
CHandle< C_BaseEntity > m_hEntity;
float m_flPrevHealth;
};
CTFReviveDialog *ShowRevivePrompt( CBaseEntity *pOwner,
const char *pTitle = "#TF_Prompt_Revive_Title",
const char *pText = "#TF_Prompt_Revive_Message",
const char *pConfirmBtnText = "#TF_Prompt_Revive_Cancel",
GenericConfirmDialogCallback callback = NULL,
vgui::Panel *parent = NULL,
void *pContext = NULL );
// A generic message dialog, which is just a generic confirm dialog w/o the cancel button
class CEconRequirementDialog : public CTFGenericConfirmDialog
{
DECLARE_CLASS_SIMPLE( CEconRequirementDialog, CTFGenericConfirmDialog );
public:
CEconRequirementDialog( const char *pTitle, const char *pTextKey, const char *pItemDefName );
virtual const char *GetResFile() OVERRIDE;
virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) OVERRIDE;
virtual void OnCommand( const char *command ) OVERRIDE;
CSchemaItemDefHandle m_hItemDef;
};
void ShowEconRequirementDialog( const char *pTitle, const char *pText, const char *pItemDefName );
#endif // TF_CLIENT_DLL
//-----------------------------------------------------------------------------
CTFGenericConfirmOptOutDialog *ShowConfirmOptOutDialog( const char *pTitle, const char *pText, const char *pConfirmBtnText, const char *pCancelBtnText, const char *pOptOutText, const char *pOptOutConVarName, GenericConfirmDialogCallback callback, vgui::Panel *parent = NULL );
//-----------------------------------------------------------------------------
CTFGenericConfirmDialog *ShowConfirmDialog( const char *pTitle, const char *pText, const char *pConfirmBtnText, const char *pCancelBtnText, GenericConfirmDialogCallback callback, vgui::Panel *parent = NULL, void *pContext = NULL, const char *pSound = NULL );
//-----------------------------------------------------------------------------
CTFMessageBoxDialog *ShowMessageBox( const char *pTitle, const char *pText, const char *pConfirmBtnText = "#GameUI_OK", GenericConfirmDialogCallback callback = NULL, vgui::Panel *parent = NULL, void *pContext = NULL );
CTFMessageBoxDialog *ShowMessageBox( const char *pTitle, const wchar_t *pText, const char *pConfirmBtnText = "#GameUI_OK", GenericConfirmDialogCallback callback = NULL, vgui::Panel *parent = NULL, void *pContext = NULL );
CTFMessageBoxDialog *ShowMessageBox( const char *pTitle, const char *pText, KeyValues *pKeyValues, const char *pConfirmBtnText = "#GameUI_OK", GenericConfirmDialogCallback callback = NULL, vgui::Panel *parent = NULL, void *pContext = NULL );
CTFMessageBoxDialog *ShowUpgradeMessageBox( const char *pTitle, const char *pText );
CTFMessageBoxDialog *ShowUpgradeMessageBox( const char *pTitle, const char *pText, const char *pConfirmBtnText, GenericConfirmDialogCallback callback, vgui::Panel *parent = NULL, void *pContext = NULL );
//-----------------------------------------------------------------------------
CTFMessageBoxDialogWithSound *ShowMessageBoxWithSound( const char *pTitle, const char *pText, const char *pszSound, float flDelay = 0.0, const char *pConfirmBtnText = "#GameUI_OK", GenericConfirmDialogCallback callback = NULL, vgui::Panel *parent = NULL, void *pContext = NULL );
CTFMessageBoxDialogWithSound *ShowMessageBoxWithSound( const char *pTitle, const wchar_t *pText, const char *pszSound, float flDelay = 0.0, const char *pConfirmBtnText = "#GameUI_OK", GenericConfirmDialogCallback callback = NULL, vgui::Panel *parent = NULL, void *pContext = NULL );
CTFMessageBoxDialogWithSound *ShowMessageBoxWithSound( const char *pTitle, const char *pText, KeyValues *pKeyValues, const char *pszSound, float flDelay = 0.0, const char *pConfirmBtnText = "#GameUI_OK", GenericConfirmDialogCallback callback = NULL, vgui::Panel *parent = NULL, void *pContext = NULL );
#endif // CONFIRM_DIALOG_H