mirror of https://github.com/PCSX2/pcsx2.git
Config: Add dynamic options to SettingInfo
This commit is contained in:
parent
b1ff979171
commit
8dba6a186f
|
@ -558,6 +558,28 @@ void ControllerCustomSettingsWidget::createSettingWidgets(ControllerBindingWidge
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SettingInfo::Type::StringList:
|
||||||
|
{
|
||||||
|
QComboBox* cb = new QComboBox(widget_parent);
|
||||||
|
cb->setObjectName(QString::fromUtf8(si.name));
|
||||||
|
if (si.get_options)
|
||||||
|
{
|
||||||
|
std::vector<std::pair<std::string, std::string>> options(si.get_options());
|
||||||
|
for (const auto& [name, display_name] : options)
|
||||||
|
cb->addItem(QString::fromStdString(display_name), QString::fromStdString(name));
|
||||||
|
}
|
||||||
|
else if (si.options)
|
||||||
|
{
|
||||||
|
for (u32 i = 0; si.options[i] != nullptr; i++)
|
||||||
|
cb->addItem(qApp->translate(cinfo->name, si.options[i]));
|
||||||
|
}
|
||||||
|
SettingWidgetBinder::BindWidgetToStringSetting(sif, cb, section, std::move(key_name), si.StringDefaultValue());
|
||||||
|
layout->addWidget(new QLabel(qApp->translate(cinfo->name, si.display_name), widget_parent), current_row, 0);
|
||||||
|
layout->addWidget(cb, current_row, 1, 1, 3);
|
||||||
|
current_row++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case SettingInfo::Type::Path:
|
case SettingInfo::Type::Path:
|
||||||
{
|
{
|
||||||
QLineEdit* le = new QLineEdit(widget_parent);
|
QLineEdit* le = new QLineEdit(widget_parent);
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
#include "common/emitter/tools.h"
|
#include "common/emitter/tools.h"
|
||||||
#include "common/General.h"
|
#include "common/General.h"
|
||||||
|
#include <array>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
@ -28,6 +29,8 @@ enum class CDVD_SourceType : uint8_t;
|
||||||
/// Generic setting information which can be reused in multiple components.
|
/// Generic setting information which can be reused in multiple components.
|
||||||
struct SettingInfo
|
struct SettingInfo
|
||||||
{
|
{
|
||||||
|
using GetOptionsCallback = std::vector<std::pair<std::string, std::string>>(*)();
|
||||||
|
|
||||||
enum class Type
|
enum class Type
|
||||||
{
|
{
|
||||||
Boolean,
|
Boolean,
|
||||||
|
@ -48,7 +51,8 @@ struct SettingInfo
|
||||||
const char* max_value;
|
const char* max_value;
|
||||||
const char* step_value;
|
const char* step_value;
|
||||||
const char* format;
|
const char* format;
|
||||||
const char* const* options;
|
const char* const* options; // For integer lists.
|
||||||
|
GetOptionsCallback get_options; // For string lists.
|
||||||
float multiplier;
|
float multiplier;
|
||||||
|
|
||||||
const char* StringDefaultValue() const;
|
const char* StringDefaultValue() const;
|
||||||
|
|
|
@ -404,32 +404,32 @@ static const char* s_dualshock2_invert_entries[] = {
|
||||||
static const SettingInfo s_dualshock2_settings[] = {
|
static const SettingInfo s_dualshock2_settings[] = {
|
||||||
{SettingInfo::Type::IntegerList, "InvertL", "Invert Left Stick",
|
{SettingInfo::Type::IntegerList, "InvertL", "Invert Left Stick",
|
||||||
"Inverts the direction of the left analog stick.",
|
"Inverts the direction of the left analog stick.",
|
||||||
"0", "0", "3", nullptr, nullptr, s_dualshock2_invert_entries, 0.0f},
|
"0", "0", "3", nullptr, nullptr, s_dualshock2_invert_entries, nullptr, 0.0f},
|
||||||
{SettingInfo::Type::IntegerList, "InvertR", "Invert Right Stick",
|
{SettingInfo::Type::IntegerList, "InvertR", "Invert Right Stick",
|
||||||
"Inverts the direction of the right analog stick.",
|
"Inverts the direction of the right analog stick.",
|
||||||
"0", "0", "3", nullptr, nullptr, s_dualshock2_invert_entries, 0.0f},
|
"0", "0", "3", nullptr, nullptr, s_dualshock2_invert_entries, nullptr, 0.0f},
|
||||||
{SettingInfo::Type::Float, "Deadzone", "Analog Deadzone",
|
{SettingInfo::Type::Float, "Deadzone", "Analog Deadzone",
|
||||||
"Sets the analog stick deadzone, i.e. the fraction of the stick movement which will be ignored.",
|
"Sets the analog stick deadzone, i.e. the fraction of the stick movement which will be ignored.",
|
||||||
"0.00", "0.00", "1.00", "0.01", "%.0f%%", nullptr, 100.0f},
|
"0.00", "0.00", "1.00", "0.01", "%.0f%%", nullptr, nullptr, 100.0f},
|
||||||
{SettingInfo::Type::Float, "AxisScale", "Analog Sensitivity",
|
{SettingInfo::Type::Float, "AxisScale", "Analog Sensitivity",
|
||||||
"Sets the analog stick axis scaling factor. A value between 1.30 and 1.40 is recommended when using recent "
|
"Sets the analog stick axis scaling factor. A value between 1.30 and 1.40 is recommended when using recent "
|
||||||
"controllers, e.g. DualShock 4, Xbox One Controller.",
|
"controllers, e.g. DualShock 4, Xbox One Controller.",
|
||||||
"1.33", "0.01", "2.00", "0.01", "%.0f%%", nullptr, 100.0f},
|
"1.33", "0.01", "2.00", "0.01", "%.0f%%", nullptr, nullptr, 100.0f},
|
||||||
{SettingInfo::Type::Float, "LargeMotorScale", "Large Motor Vibration Scale",
|
{SettingInfo::Type::Float, "LargeMotorScale", "Large Motor Vibration Scale",
|
||||||
"Increases or decreases the intensity of low frequency vibration sent by the game.",
|
"Increases or decreases the intensity of low frequency vibration sent by the game.",
|
||||||
"1.00", "0.00", "2.00", "0.01", "%.0f%%", nullptr, 100.0f},
|
"1.00", "0.00", "2.00", "0.01", "%.0f%%", nullptr, nullptr, 100.0f},
|
||||||
{SettingInfo::Type::Float, "SmallMotorScale", "Small Motor Vibration Scale",
|
{SettingInfo::Type::Float, "SmallMotorScale", "Small Motor Vibration Scale",
|
||||||
"Increases or decreases the intensity of high frequency vibration sent by the game.",
|
"Increases or decreases the intensity of high frequency vibration sent by the game.",
|
||||||
"1.00", "0.00", "2.00", "0.01", "%.0f%%", nullptr, 100.0f},
|
"1.00", "0.00", "2.00", "0.01", "%.0f%%", nullptr, nullptr, 100.0f},
|
||||||
{SettingInfo::Type::Float, "ButtonDeadzone", "Button/Trigger Deadzone",
|
{SettingInfo::Type::Float, "ButtonDeadzone", "Button/Trigger Deadzone",
|
||||||
"Sets the deadzone for activating buttons/triggers, i.e. the fraction of the trigger which will be ignored.",
|
"Sets the deadzone for activating buttons/triggers, i.e. the fraction of the trigger which will be ignored.",
|
||||||
"0.00", "0.00", "1.00", "0.01", "%.0f%%", nullptr, 100.0f},
|
"0.00", "0.00", "1.00", "0.01", "%.0f%%", nullptr, nullptr, 100.0f},
|
||||||
/*{SettingInfo::Type::Float, "InitialPressure", "Initial Pressure",
|
/*{SettingInfo::Type::Float, "InitialPressure", "Initial Pressure",
|
||||||
"Sets the pressure when the modifier button isn't held.",
|
"Sets the pressure when the modifier button isn't held.",
|
||||||
"1.00", "0.01", "1.00", "0.01", "%.0f%%", nullptr, 100.0f},*/
|
"1.00", "0.01", "1.00", "0.01", "%.0f%%", nullptr, nullptr, 100.0f},*/
|
||||||
{SettingInfo::Type::Float, "PressureModifier", "Modifier Pressure",
|
{SettingInfo::Type::Float, "PressureModifier", "Modifier Pressure",
|
||||||
"Sets the pressure when the modifier button is held.",
|
"Sets the pressure when the modifier button is held.",
|
||||||
"0.50", "0.01", "1.00", "0.01", "%.0f%%", nullptr, 100.0f},
|
"0.50", "0.01", "1.00", "0.01", "%.0f%%", nullptr, nullptr, 100.0f},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const PAD::ControllerInfo s_controller_info[] = {
|
static const PAD::ControllerInfo s_controller_info[] = {
|
||||||
|
|
Loading…
Reference in New Issue