summaryrefslogtreecommitdiff
path: root/gameui/OptionsDialog.h
blob: c21baa95442734a78d6bb5f11ef5793eac0448b2 (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
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//=============================================================================//

#ifndef OPTIONSDIALOG_H
#define OPTIONSDIALOG_H
#ifdef _WIN32
#pragma once
#endif

#include "vgui_controls/PropertyDialog.h"
#include "vgui_controls/KeyRepeat.h"

//-----------------------------------------------------------------------------
// Purpose: Holds all the game option pages
//-----------------------------------------------------------------------------
class COptionsDialog : public vgui::PropertyDialog
{
	DECLARE_CLASS_SIMPLE( COptionsDialog, vgui::PropertyDialog );

public:
	COptionsDialog(vgui::Panel *parent);
	~COptionsDialog();

	void Run();
	virtual void Activate();

	void OnKeyCodePressed( vgui::KeyCode code );

	vgui::PropertyPage* GetOptionsSubMultiplayer( void ) { return m_pOptionsSubMultiplayer; }

	MESSAGE_FUNC( OnGameUIHidden, "GameUIHidden" );	// called when the GameUI is hidden

private:
	class COptionsSubAudio *m_pOptionsSubAudio;
	class COptionsSubVideo *m_pOptionsSubVideo;
	vgui::PropertyPage *m_pOptionsSubMultiplayer;
};


#define OPTIONS_MAX_NUM_ITEMS 15

struct OptionData_t;

//-----------------------------------------------------------------------------
// Purpose: Holds all the game option pages
//-----------------------------------------------------------------------------
class COptionsDialogXbox : public vgui::Frame
{
	DECLARE_CLASS_SIMPLE( COptionsDialogXbox, vgui::Frame );

public:
	COptionsDialogXbox( vgui::Panel *parent, bool bControllerOptions = false );
	~COptionsDialogXbox();

	virtual void		ApplySchemeSettings( vgui::IScheme *pScheme );
	virtual void		ApplySettings( KeyValues *inResourceData );
	virtual void		OnClose();
	virtual void		OnKeyCodePressed( vgui::KeyCode code );
	virtual void		OnCommand(const char *command);

	virtual void		OnKeyCodeReleased( vgui::KeyCode code);
	virtual void		OnThink();

private:
	void	HandleInactiveKeyCodePressed( vgui::KeyCode code );
	void	HandleActiveKeyCodePressed( vgui::KeyCode code );
	void	HandleBindKeyCodePressed( vgui::KeyCode code );

	int		GetSelectionLabel( void ) { return m_iSelection - m_iScroll; }

	void	ActivateSelection( void );
	void	DeactivateSelection( void );

	void	ChangeSelection( int iChange );
	void	UpdateFooter( void );
	void	UpdateSelection( void );
	void	UpdateScroll( void );

	void	UncacheChoices( void );
	void	GetChoiceFromConvar( OptionData_t *pOption );
	void	ChangeValue( float fChange );
	void	UnbindOption( OptionData_t *pOption, int iLabel );

	void	UpdateValue( OptionData_t *pOption, int iLabel );
	void	UpdateBind( OptionData_t *pOption, int iLabel, ButtonCode_t codeIgnore = BUTTON_CODE_INVALID, ButtonCode_t codeAdd = BUTTON_CODE_INVALID );
	void	UpdateAllBinds( ButtonCode_t code );

	void	FillInDefaultBindings( void );

	bool	ShouldSkipOption( KeyValues *pKey );
	void	ReadOptionsFromFile( const char *pchFileName );
	void	SortOptions( void );

	void	InitializeSliderDefaults( void );

private:
	bool	m_bControllerOptions;
	bool	m_bOptionsChanged;
	bool	m_bOldForceEnglishAudio;

	CFooterPanel		*m_pFooter;

	CUtlVector<OptionData_t*>	*m_pOptions;

	bool			m_bSelectionActive;
	OptionData_t	*m_pSelectedOption;

	int		m_iSelection;
	int		m_iScroll;
	int		m_iSelectorYStart;
	int		m_iOptionSpacing;
	int		m_iNumItems;

	int		m_iXAxisState;
	int		m_iYAxisState;
	float	m_fNextChangeTime;

	vgui::Panel			*m_pOptionsSelectionLeft;
	vgui::Panel			*m_pOptionsSelectionLeft2;
	vgui::Label			*m_pOptionsUpArrow;
	vgui::Label			*m_pOptionsDownArrow;

	vgui::Label			*(m_pOptionLabels[ OPTIONS_MAX_NUM_ITEMS ]);
	vgui::Label			*(m_pValueLabels[ OPTIONS_MAX_NUM_ITEMS ]);
	vgui::AnalogBar		*(m_pValueBars[ OPTIONS_MAX_NUM_ITEMS ]);

	vgui::HFont			m_hLabelFont;
	vgui::HFont			m_hButtonFont;

	Color	m_SelectedColor;

	vgui::CKeyRepeatHandler	m_KeyRepeat;

	int m_nButtonGap;
};

#endif // OPTIONSDIALOG_H