summaryrefslogtreecommitdiff
path: root/game/client/econ/confirm_dialog.h
blob: dac868a372bd940964294276fd8e1f42cf615d17 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
//========= 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