//========= 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 *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