// Copyright 2010 Dolphin Emulator Project // Licensed under GPLv2+ // Refer to the license.txt file included. #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include "Common/CommonTypes.h" #include "Core/Config/GraphicsSettings.h" class DolphinSlider; struct VideoConfig; class wxBoxSizer; class wxControl; class wxPanel; template class BoolSetting : public W { public: BoolSetting(wxWindow* parent, const wxString& label, const wxString& tooltip, const Config::ConfigInfo& setting, bool reverse = false, long style = 0); void UpdateValue(wxCommandEvent& ev) { Config::SetBaseOrCurrent(m_setting, (ev.GetInt() != 0) != m_reverse); ev.Skip(); } private: Config::ConfigInfo m_setting; const bool m_reverse; }; template class RefBoolSetting : public W { public: RefBoolSetting(wxWindow* parent, const wxString& label, const wxString& tooltip, bool& setting, bool reverse = false, long style = 0); void UpdateValue(wxCommandEvent& ev) { m_setting = (ev.GetInt() != 0) != m_reverse; ev.Skip(); } private: bool& m_setting; const bool m_reverse; }; typedef BoolSetting SettingCheckBox; class IntegerSetting : public wxSpinCtrl { public: IntegerSetting(wxWindow* parent, const wxString& label, const Config::ConfigInfo& setting, int minVal, int maxVal, long style = 0); void UpdateValue(wxCommandEvent& ev) { Config::SetBaseOrCurrent(m_setting, ev.GetInt()); ev.Skip(); } private: Config::ConfigInfo m_setting; }; class SettingChoice : public wxChoice { public: SettingChoice(wxWindow* parent, const Config::ConfigInfo& setting, const wxString& tooltip, int num = 0, const wxString choices[] = nullptr, long style = 0); void UpdateValue(wxCommandEvent& ev); private: Config::ConfigInfo m_setting; }; template class SettingRadioButton : public wxRadioButton { public: SettingRadioButton(wxWindow* parent, const wxString& label, const wxString& tooltip, const Config::ConfigInfo& setting, const ValueType& value, long style = 0) : wxRadioButton(parent, wxID_ANY, label, wxDefaultPosition, wxDefaultSize, style), m_setting(setting), m_value(value) { SetToolTip(tooltip); SetValue(Config::Get(m_setting) == m_value); Bind(wxEVT_RADIOBUTTON, &SettingRadioButton::UpdateValue, this); } void UpdateValue(wxCommandEvent& ev) { if (ev.IsChecked()) Config::SetBaseOrCurrent(m_setting, m_value); ev.Skip(); } private: Config::ConfigInfo m_setting; ValueType m_value; }; class VideoConfigDiag : public wxDialog { public: VideoConfigDiag(wxWindow* parent, const std::string& title); protected: void Event_Backend(wxCommandEvent& ev); void Event_ProgressiveScan(wxCommandEvent& ev); void Event_SafeTextureCache(wxCommandEvent& ev); void Event_PPShader(wxCommandEvent& ev); void Event_ConfigurePPShader(wxCommandEvent& ev); void Event_StereoDepth(wxCommandEvent& ev); void Event_StereoConvergence(wxCommandEvent& ev); void Event_StereoMode(wxCommandEvent& ev); void Event_Close(wxCommandEvent&); // Enables/disables UI elements depending on current config void OnUpdateUI(wxUpdateUIEvent& ev); // Creates controls and connects their enter/leave window events to Evt_Enter/LeaveControl SettingCheckBox* CreateCheckBox(wxWindow* parent, const wxString& label, const wxString& description, const Config::ConfigInfo& setting, bool reverse = false, long style = 0); RefBoolSetting* CreateCheckBoxRefBool(wxWindow* parent, const wxString& label, const wxString& description, bool& setting); SettingChoice* CreateChoice(wxWindow* parent, const Config::ConfigInfo& setting, const wxString& description, int num = 0, const wxString choices[] = nullptr, long style = 0); template SettingRadioButton* CreateRadioButton(wxWindow* parent, const wxString& label, const wxString& description, const Config::ConfigInfo& setting, const ValueType& value, long style = 0) { auto* const rb = new SettingRadioButton(parent, label, wxString(), setting, value, style); RegisterControl(rb, description); return rb; } // Same as above but only connects enter/leave window events wxControl* RegisterControl(wxControl* const control, const wxString& description); void Evt_EnterControl(wxMouseEvent& ev); void Evt_LeaveControl(wxMouseEvent& ev); void CreateDescriptionArea(wxPanel* const page, wxBoxSizer* const sizer); void PopulatePostProcessingShaders(); void PopulateAAList(); void OnAAChanged(wxCommandEvent& ev); wxChoice* choice_backend; wxChoice* choice_adapter; wxStaticText* label_backend; wxStaticText* label_adapter; wxStaticText* text_aamode; wxChoice* choice_aamode; DolphinSlider* conv_slider; wxStaticText* label_display_resolution; wxButton* button_config_pp; SettingCheckBox* borderless_fullscreen; RefBoolSetting* render_to_main_checkbox; SettingCheckBox* cache_hires_textures; wxCheckBox* progressive_scan_checkbox; wxCheckBox* vertex_rounding_checkbox; wxChoice* choice_ppshader; std::map ctrl_descs; // maps setting controls to their descriptions std::map desc_texts; // maps dialog tabs (which are the parents of the // setting controls) to their description text // objects VideoConfig& vconfig; size_t m_msaa_modes; };