source-engine/gameui/OptionsDialog.h

142 lines
3.9 KiB
C
Raw Normal View History

2020-04-22 16:56:21 +00:00
//========= 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