mirror of https://github.com/PCSX2/pcsx2.git
GS: More generic prerequisite checking for wx config
This commit is contained in:
parent
665db4bdad
commit
3b5a9f6c6a
|
@ -67,6 +67,20 @@ namespace
|
||||||
add_tooltip(temp_text, tooltip);
|
add_tooltip(temp_text, tooltip);
|
||||||
sizer->Add(temp_text, flags);
|
sizer->Add(temp_text, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct CheckboxPrereq
|
||||||
|
{
|
||||||
|
wxCheckBox* box;
|
||||||
|
explicit CheckboxPrereq(wxCheckBox* box)
|
||||||
|
: box(box)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator()()
|
||||||
|
{
|
||||||
|
return box->GetValue();
|
||||||
|
}
|
||||||
|
};
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
GSUIElementHolder::GSUIElementHolder(wxWindow* window)
|
GSUIElementHolder::GSUIElementHolder(wxWindow* window)
|
||||||
|
@ -74,7 +88,7 @@ GSUIElementHolder::GSUIElementHolder(wxWindow* window)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void GSUIElementHolder::addWithLabel(wxControl* control, UIElem::Type type, wxSizer* sizer, const char* label, const char* config_name, int tooltip, wxCheckBox* prereq, wxSizerFlags flags)
|
void GSUIElementHolder::addWithLabel(wxControl* control, UIElem::Type type, wxSizer* sizer, const char* label, const char* config_name, int tooltip, std::function<bool()> prereq, wxSizerFlags flags)
|
||||||
{
|
{
|
||||||
add_tooltip(control, tooltip);
|
add_tooltip(control, tooltip);
|
||||||
wxStaticText* text = new wxStaticText(m_window, wxID_ANY, label, wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT);
|
wxStaticText* text = new wxStaticText(m_window, wxID_ANY, label, wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT);
|
||||||
|
@ -84,7 +98,7 @@ void GSUIElementHolder::addWithLabel(wxControl* control, UIElem::Type type, wxSi
|
||||||
m_elems.emplace_back(type, control, config_name, prereq);
|
m_elems.emplace_back(type, control, config_name, prereq);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxCheckBox* GSUIElementHolder::addCheckBox(wxSizer* sizer, const char* label, const char* config_name, int tooltip, wxCheckBox* prereq)
|
wxCheckBox* GSUIElementHolder::addCheckBox(wxSizer* sizer, const char* label, const char* config_name, int tooltip, std::function<bool()> prereq)
|
||||||
{
|
{
|
||||||
wxCheckBox* box = new wxCheckBox(m_window, wxID_ANY, label);
|
wxCheckBox* box = new wxCheckBox(m_window, wxID_ANY, label);
|
||||||
add_tooltip(box, tooltip);
|
add_tooltip(box, tooltip);
|
||||||
|
@ -94,7 +108,7 @@ wxCheckBox* GSUIElementHolder::addCheckBox(wxSizer* sizer, const char* label, co
|
||||||
return box;
|
return box;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxChoice* GSUIElementHolder::addComboBoxAndLabel(wxSizer* sizer, const char* label, const char* config_name, const std::vector<GSSetting>* settings, int tooltip, wxCheckBox* prereq)
|
wxChoice* GSUIElementHolder::addComboBoxAndLabel(wxSizer* sizer, const char* label, const char* config_name, const std::vector<GSSetting>* settings, int tooltip, std::function<bool()> prereq)
|
||||||
{
|
{
|
||||||
wxArrayString temp;
|
wxArrayString temp;
|
||||||
add_settings_to_array_string(*settings, temp);
|
add_settings_to_array_string(*settings, temp);
|
||||||
|
@ -103,7 +117,7 @@ wxChoice* GSUIElementHolder::addComboBoxAndLabel(wxSizer* sizer, const char* lab
|
||||||
return choice;
|
return choice;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxSpinCtrl* GSUIElementHolder::addSpin(wxSizer* sizer, const char* config_name, int min, int max, int initial, int tooltip, wxCheckBox* prereq)
|
wxSpinCtrl* GSUIElementHolder::addSpin(wxSizer* sizer, const char* config_name, int min, int max, int initial, int tooltip, std::function<bool()> prereq)
|
||||||
{
|
{
|
||||||
wxSpinCtrl* spin = new wxSpinCtrl(m_window, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, min, max, initial);
|
wxSpinCtrl* spin = new wxSpinCtrl(m_window, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, min, max, initial);
|
||||||
add_tooltip(spin, tooltip);
|
add_tooltip(spin, tooltip);
|
||||||
|
@ -113,28 +127,28 @@ wxSpinCtrl* GSUIElementHolder::addSpin(wxSizer* sizer, const char* config_name,
|
||||||
return spin;
|
return spin;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxSpinCtrl* GSUIElementHolder::addSpinAndLabel(wxSizer* sizer, const char* label, const char* config_name, int min, int max, int initial, int tooltip, wxCheckBox* prereq)
|
wxSpinCtrl* GSUIElementHolder::addSpinAndLabel(wxSizer* sizer, const char* label, const char* config_name, int min, int max, int initial, int tooltip, std::function<bool()> prereq)
|
||||||
{
|
{
|
||||||
wxSpinCtrl* spin = new wxSpinCtrl(m_window, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, min, max, initial);
|
wxSpinCtrl* spin = new wxSpinCtrl(m_window, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, min, max, initial);
|
||||||
addWithLabel(spin, UIElem::Type::Spin, sizer, label, config_name, tooltip, prereq, wxSizerFlags().Centre().Left());
|
addWithLabel(spin, UIElem::Type::Spin, sizer, label, config_name, tooltip, prereq, wxSizerFlags().Centre().Left());
|
||||||
return spin;
|
return spin;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxSlider* GSUIElementHolder::addSliderAndLabel(wxSizer* sizer, const char* label, const char* config_name, int min, int max, int initial, int tooltip, wxCheckBox* prereq)
|
wxSlider* GSUIElementHolder::addSliderAndLabel(wxSizer* sizer, const char* label, const char* config_name, int min, int max, int initial, int tooltip, std::function<bool()> prereq)
|
||||||
{
|
{
|
||||||
wxSlider* slider = new wxSlider(m_window, wxID_ANY, initial, min, max, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_VALUE_LABEL);
|
wxSlider* slider = new wxSlider(m_window, wxID_ANY, initial, min, max, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_VALUE_LABEL);
|
||||||
addWithLabel(slider, UIElem::Type::Slider, sizer, label, config_name, tooltip, prereq);
|
addWithLabel(slider, UIElem::Type::Slider, sizer, label, config_name, tooltip, prereq);
|
||||||
return slider;
|
return slider;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxFilePickerCtrl* GSUIElementHolder::addFilePickerAndLabel(wxSizer* sizer, const char* label, const char* config_name, int tooltip, wxCheckBox* prereq)
|
wxFilePickerCtrl* GSUIElementHolder::addFilePickerAndLabel(wxSizer* sizer, const char* label, const char* config_name, int tooltip, std::function<bool()> prereq)
|
||||||
{
|
{
|
||||||
wxFilePickerCtrl* picker = new wxFilePickerCtrl(m_window, wxID_ANY);
|
wxFilePickerCtrl* picker = new wxFilePickerCtrl(m_window, wxID_ANY);
|
||||||
addWithLabel(picker, UIElem::Type::File, sizer, label, config_name, tooltip, prereq);
|
addWithLabel(picker, UIElem::Type::File, sizer, label, config_name, tooltip, prereq);
|
||||||
return picker;
|
return picker;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxDirPickerCtrl* GSUIElementHolder::addDirPickerAndLabel(wxSizer* sizer, const char* label, const char* config_name, int tooltip, wxCheckBox* prereq)
|
wxDirPickerCtrl* GSUIElementHolder::addDirPickerAndLabel(wxSizer* sizer, const char* label, const char* config_name, int tooltip, std::function<bool()> prereq)
|
||||||
{
|
{
|
||||||
wxDirPickerCtrl* picker = new wxDirPickerCtrl(m_window, wxID_ANY);
|
wxDirPickerCtrl* picker = new wxDirPickerCtrl(m_window, wxID_ANY);
|
||||||
addWithLabel(picker, UIElem::Type::Directory, sizer, label, config_name, tooltip, prereq);
|
addWithLabel(picker, UIElem::Type::Directory, sizer, label, config_name, tooltip, prereq);
|
||||||
|
@ -208,7 +222,7 @@ void GSUIElementHolder::Update()
|
||||||
for (const UIElem& elem : m_elems)
|
for (const UIElem& elem : m_elems)
|
||||||
{
|
{
|
||||||
if (elem.prereq)
|
if (elem.prereq)
|
||||||
elem.control->Enable(elem.prereq->GetValue());
|
elem.control->Enable(elem.prereq());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -270,7 +284,7 @@ HacksTab::HacksTab(wxWindow* parent)
|
||||||
{
|
{
|
||||||
auto* tab_box = new wxBoxSizer(wxVERTICAL);
|
auto* tab_box = new wxBoxSizer(wxVERTICAL);
|
||||||
|
|
||||||
auto* hacks_check = m_ui.addCheckBox(tab_box, "Enable User Hacks", "UserHacks");
|
CheckboxPrereq hacks_check(m_ui.addCheckBox(tab_box, "Enable User Hacks", "UserHacks"));
|
||||||
|
|
||||||
auto* rend_hacks_box = new wxStaticBoxSizer(wxVERTICAL, this, "Renderer Hacks");
|
auto* rend_hacks_box = new wxStaticBoxSizer(wxVERTICAL, this, "Renderer Hacks");
|
||||||
auto* upscale_hacks_box = new wxStaticBoxSizer(wxVERTICAL, this, "Upscale Hacks");
|
auto* upscale_hacks_box = new wxStaticBoxSizer(wxVERTICAL, this, "Upscale Hacks");
|
||||||
|
@ -359,6 +373,7 @@ RecTab::RecTab(wxWindow* parent)
|
||||||
auto* tab_box = new wxBoxSizer(wxVERTICAL);
|
auto* tab_box = new wxBoxSizer(wxVERTICAL);
|
||||||
|
|
||||||
auto* record_check = m_ui.addCheckBox(tab_box, "Enable Recording (F12)", "capture_enabled");
|
auto* record_check = m_ui.addCheckBox(tab_box, "Enable Recording (F12)", "capture_enabled");
|
||||||
|
CheckboxPrereq record_prereq(record_check);
|
||||||
auto* record_box = new wxStaticBoxSizer(wxVERTICAL, this, "Recording");
|
auto* record_box = new wxStaticBoxSizer(wxVERTICAL, this, "Recording");
|
||||||
auto* record_grid_box = new wxFlexGridSizer(2, 5, 5);
|
auto* record_grid_box = new wxFlexGridSizer(2, 5, 5);
|
||||||
record_grid_box->AddGrowableCol(1);
|
record_grid_box->AddGrowableCol(1);
|
||||||
|
@ -366,15 +381,15 @@ RecTab::RecTab(wxWindow* parent)
|
||||||
// Resolution
|
// Resolution
|
||||||
add_label(this, record_grid_box, "Resolution:");
|
add_label(this, record_grid_box, "Resolution:");
|
||||||
auto* res_box = new wxBoxSizer(wxHORIZONTAL);
|
auto* res_box = new wxBoxSizer(wxHORIZONTAL);
|
||||||
m_ui.addSpin(res_box, "CaptureWidth", 256, 8192, 640, -1, record_check);
|
m_ui.addSpin(res_box, "CaptureWidth", 256, 8192, 640, -1, record_prereq);
|
||||||
m_ui.addSpin(res_box, "CaptureHeight", 256, 8192, 480, -1, record_check);
|
m_ui.addSpin(res_box, "CaptureHeight", 256, 8192, 480, -1, record_prereq);
|
||||||
|
|
||||||
record_grid_box->Add(res_box);
|
record_grid_box->Add(res_box);
|
||||||
|
|
||||||
m_ui.addSpinAndLabel(record_grid_box, "Saving Threads:", "capture_threads", 1, 32, 4, -1, record_check);
|
m_ui.addSpinAndLabel(record_grid_box, "Saving Threads:", "capture_threads", 1, 32, 4, -1, record_prereq);
|
||||||
m_ui.addSpinAndLabel(record_grid_box, "PNG Compression Level:", "png_compression_level", 1, 9, 1, -1, record_check);
|
m_ui.addSpinAndLabel(record_grid_box, "PNG Compression Level:", "png_compression_level", 1, 9, 1, -1, record_prereq);
|
||||||
|
|
||||||
m_ui.addDirPickerAndLabel(record_grid_box, "Output Directory:", "capture_out_dir", -1, record_check);
|
m_ui.addDirPickerAndLabel(record_grid_box, "Output Directory:", "capture_out_dir", -1, record_prereq);
|
||||||
|
|
||||||
record_box->Add(record_grid_box, wxSizerFlags().Expand());
|
record_box->Add(record_grid_box, wxSizerFlags().Expand());
|
||||||
|
|
||||||
|
@ -398,7 +413,7 @@ PostTab::PostTab(wxWindow* parent)
|
||||||
m_ui.addCheckBox(shader_box, "Texture Filtering of Display", "linear_present", IDC_LINEAR_PRESENT);
|
m_ui.addCheckBox(shader_box, "Texture Filtering of Display", "linear_present", IDC_LINEAR_PRESENT);
|
||||||
m_ui.addCheckBox(shader_box, "FXAA Shader (PgUp)", "fxaa", IDC_FXAA);
|
m_ui.addCheckBox(shader_box, "FXAA Shader (PgUp)", "fxaa", IDC_FXAA);
|
||||||
|
|
||||||
auto* shade_boost_check = m_ui.addCheckBox(shader_box, "Enable Shade Boost", "ShadeBoost", IDC_SHADEBOOST);
|
CheckboxPrereq shade_boost_check(m_ui.addCheckBox(shader_box, "Enable Shade Boost", "ShadeBoost", IDC_SHADEBOOST));
|
||||||
|
|
||||||
auto* shade_boost_box = new wxStaticBoxSizer(wxVERTICAL, this, "Shade Boost");
|
auto* shade_boost_box = new wxStaticBoxSizer(wxVERTICAL, this, "Shade Boost");
|
||||||
auto* shader_boost_grid = new wxFlexGridSizer(2, 0, 5);
|
auto* shader_boost_grid = new wxFlexGridSizer(2, 0, 5);
|
||||||
|
@ -411,7 +426,7 @@ PostTab::PostTab(wxWindow* parent)
|
||||||
shade_boost_box->Add(shader_boost_grid, wxSizerFlags().Expand());
|
shade_boost_box->Add(shader_boost_grid, wxSizerFlags().Expand());
|
||||||
shader_box->Add(shade_boost_box, wxSizerFlags().Expand());
|
shader_box->Add(shade_boost_box, wxSizerFlags().Expand());
|
||||||
|
|
||||||
auto* ext_shader_check = m_ui.addCheckBox(shader_box, "Enable External Shader", "shaderfx", IDC_SHADER_FX);
|
CheckboxPrereq ext_shader_check(m_ui.addCheckBox(shader_box, "Enable External Shader", "shaderfx", IDC_SHADER_FX));
|
||||||
|
|
||||||
auto* ext_shader_box = new wxStaticBoxSizer(wxVERTICAL, this, "External Shader (Home)");
|
auto* ext_shader_box = new wxStaticBoxSizer(wxVERTICAL, this, "External Shader (Home)");
|
||||||
auto* ext_shader_grid = new wxFlexGridSizer(2, 0, 5);
|
auto* ext_shader_grid = new wxFlexGridSizer(2, 0, 5);
|
||||||
|
@ -444,7 +459,7 @@ OSDTab::OSDTab(wxWindow* parent)
|
||||||
{
|
{
|
||||||
auto* tab_box = new wxBoxSizer(wxVERTICAL);
|
auto* tab_box = new wxBoxSizer(wxVERTICAL);
|
||||||
|
|
||||||
auto* monitor_check = m_ui.addCheckBox(tab_box, "Enable Monitor", "osd_monitor_enabled", IDC_OSD_MONITOR);
|
CheckboxPrereq monitor_check(m_ui.addCheckBox(tab_box, "Enable Monitor", "osd_monitor_enabled", IDC_OSD_MONITOR));
|
||||||
|
|
||||||
auto* font_box = new wxStaticBoxSizer(wxVERTICAL, this, "Font");
|
auto* font_box = new wxStaticBoxSizer(wxVERTICAL, this, "Font");
|
||||||
auto* font_grid = new wxFlexGridSizer(2, 0, 5);
|
auto* font_grid = new wxFlexGridSizer(2, 0, 5);
|
||||||
|
@ -460,7 +475,7 @@ OSDTab::OSDTab(wxWindow* parent)
|
||||||
font_box->Add(font_grid, wxSizerFlags().Expand());
|
font_box->Add(font_grid, wxSizerFlags().Expand());
|
||||||
tab_box->Add(font_box, wxSizerFlags().Expand());
|
tab_box->Add(font_box, wxSizerFlags().Expand());
|
||||||
|
|
||||||
auto* log_check = m_ui.addCheckBox(tab_box, "Enable Log", "osd_log_enabled", IDC_OSD_LOG);
|
CheckboxPrereq log_check(m_ui.addCheckBox(tab_box, "Enable Log", "osd_log_enabled", IDC_OSD_LOG));
|
||||||
|
|
||||||
auto* log_box = new wxStaticBoxSizer(wxVERTICAL, this, "Log Messages");
|
auto* log_box = new wxStaticBoxSizer(wxVERTICAL, this, "Log Messages");
|
||||||
auto* log_grid = new wxFlexGridSizer(2, 5, 5);
|
auto* log_grid = new wxFlexGridSizer(2, 5, 5);
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include <wx/statline.h>
|
#include <wx/statline.h>
|
||||||
#include <wx/filepicker.h>
|
#include <wx/filepicker.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
class GSUIElementHolder
|
class GSUIElementHolder
|
||||||
{
|
{
|
||||||
|
@ -66,28 +67,30 @@ class GSUIElementHolder
|
||||||
Type type;
|
Type type;
|
||||||
wxControl* control;
|
wxControl* control;
|
||||||
const char* config;
|
const char* config;
|
||||||
wxCheckBox* prereq;
|
std::function<bool()> prereq;
|
||||||
|
|
||||||
UIElem(Type type, wxControl* control, const char* config, wxCheckBox* prereq)
|
UIElem(Type type, wxControl* control, const char* config, std::function<bool()> prereq)
|
||||||
: type(type), control(control), config(config), prereq(prereq)
|
: type(type), control(control), config(config), prereq(prereq)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static bool noPrereq() { return true; }
|
||||||
|
|
||||||
wxWindow* m_window;
|
wxWindow* m_window;
|
||||||
std::vector<UIElem> m_elems;
|
std::vector<UIElem> m_elems;
|
||||||
|
|
||||||
void addWithLabel(wxControl* control, UIElem::Type type, wxSizer* sizer, const char* label, const char* config_name, int tooltip, wxCheckBox* prereq, wxSizerFlags flags = wxSizerFlags().Centre().Expand().Left());
|
void addWithLabel(wxControl* control, UIElem::Type type, wxSizer* sizer, const char* label, const char* config_name, int tooltip, std::function<bool()> prereq, wxSizerFlags flags = wxSizerFlags().Centre().Expand().Left());
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GSUIElementHolder(wxWindow* window);
|
GSUIElementHolder(wxWindow* window);
|
||||||
wxCheckBox* addCheckBox(wxSizer* sizer, const char* label, const char* config_name, int tooltip = -1, wxCheckBox* prereq = nullptr);
|
wxCheckBox* addCheckBox(wxSizer* sizer, const char* label, const char* config_name, int tooltip = -1, std::function<bool()> prereq = noPrereq);
|
||||||
wxChoice* addComboBoxAndLabel(wxSizer* sizer, const char* label, const char* config_name, const std::vector<GSSetting>* settings, int tooltip = -1, wxCheckBox* prereq = nullptr);
|
wxChoice* addComboBoxAndLabel(wxSizer* sizer, const char* label, const char* config_name, const std::vector<GSSetting>* settings, int tooltip = -1, std::function<bool()> prereq = noPrereq);
|
||||||
wxSpinCtrl* addSpin(wxSizer* sizer, const char* config_name, int min, int max, int initial, int tooltip = -1, wxCheckBox* prereq = nullptr);
|
wxSpinCtrl* addSpin(wxSizer* sizer, const char* config_name, int min, int max, int initial, int tooltip = -1, std::function<bool()> prereq = noPrereq);
|
||||||
wxSpinCtrl* addSpinAndLabel(wxSizer* sizer, const char* label, const char* config_name, int min, int max, int initial, int tooltip = -1, wxCheckBox* prereq = nullptr);
|
wxSpinCtrl* addSpinAndLabel(wxSizer* sizer, const char* label, const char* config_name, int min, int max, int initial, int tooltip = -1, std::function<bool()> prereq = noPrereq);
|
||||||
wxSlider* addSliderAndLabel(wxSizer* sizer, const char* label, const char* config_name, int min, int max, int initial, int tooltip = -1, wxCheckBox* prereq = nullptr);
|
wxSlider* addSliderAndLabel(wxSizer* sizer, const char* label, const char* config_name, int min, int max, int initial, int tooltip = -1, std::function<bool()> prereq = noPrereq);
|
||||||
wxFilePickerCtrl* addFilePickerAndLabel(wxSizer* sizer, const char* label, const char* config_name, int tooltip = -1, wxCheckBox* prereq = nullptr);
|
wxFilePickerCtrl* addFilePickerAndLabel(wxSizer* sizer, const char* label, const char* config_name, int tooltip = -1, std::function<bool()> prereq = noPrereq);
|
||||||
wxDirPickerCtrl* addDirPickerAndLabel(wxSizer* sizer, const char* label, const char* config_name, int tooltip = -1, wxCheckBox* prereq = nullptr);
|
wxDirPickerCtrl* addDirPickerAndLabel(wxSizer* sizer, const char* label, const char* config_name, int tooltip = -1, std::function<bool()> prereq = noPrereq);
|
||||||
|
|
||||||
void Load();
|
void Load();
|
||||||
void Save();
|
void Save();
|
||||||
|
|
Loading…
Reference in New Issue