Qt: Make multitap mode non-inheritable as well

This commit is contained in:
Stenzek 2024-11-03 20:26:52 +10:00
parent 98cce645a9
commit ac19768247
No known key found for this signature in database
3 changed files with 72 additions and 31 deletions

View File

@ -20,14 +20,16 @@ ControllerGlobalSettingsWidget::ControllerGlobalSettingsWidget(QWidget* parent,
ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.enableSDLSource, "InputSources", "SDL", true); ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.enableSDLSource, "InputSources", "SDL", true);
ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.enableSDLEnhancedMode, "InputSources", ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.enableSDLEnhancedMode, "InputSources",
"SDLControllerEnhancedMode", false); "SDLControllerEnhancedMode", false);
connect(m_ui.enableSDLSource, &QCheckBox::checkStateChanged, this, connect(m_ui.enableSDLSource, &QCheckBox::checkStateChanged, this,
&ControllerGlobalSettingsWidget::updateSDLOptionsEnabled); &ControllerGlobalSettingsWidget::updateSDLOptionsEnabled);
connect(m_ui.ledSettings, &QToolButton::clicked, this, &ControllerGlobalSettingsWidget::ledSettingsClicked); connect(m_ui.ledSettings, &QToolButton::clicked, this, &ControllerGlobalSettingsWidget::ledSettingsClicked);
#ifdef __APPLE__ #ifdef __APPLE__
ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.enableSDLIOKitDriver, "InputSources", "SDLIOKitDriver", true); ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.enableSDLIOKitDriver, "InputSources",
ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.enableSDLMFIDriver, "InputSources", "SDLMFIDriver", true); "SDLIOKitDriver", true);
ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.enableSDLMFIDriver, "InputSources",
"SDLMFIDriver", true);
#else #else
m_ui.sdlGridLayout->removeWidget(m_ui.enableSDLIOKitDriver); m_ui.sdlGridLayout->removeWidget(m_ui.enableSDLIOKitDriver);
delete m_ui.enableSDLIOKitDriver; delete m_ui.enableSDLIOKitDriver;
@ -38,9 +40,12 @@ ControllerGlobalSettingsWidget::ControllerGlobalSettingsWidget(QWidget* parent,
#endif #endif
#ifdef _WIN32 #ifdef _WIN32
ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.enableDInputSource, "InputSources", "DInput", false); ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.enableDInputSource, "InputSources", "DInput",
ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.enableXInputSource, "InputSources", "XInput", false); false);
ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.enableRawInput, "InputSources", "RawInput", false); ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.enableXInputSource, "InputSources", "XInput",
false);
ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.enableRawInput, "InputSources", "RawInput",
false);
#else #else
m_ui.mainLayout->removeWidget(m_ui.xinputGroup); m_ui.mainLayout->removeWidget(m_ui.xinputGroup);
delete m_ui.xinputGroup; delete m_ui.xinputGroup;
@ -52,9 +57,10 @@ ControllerGlobalSettingsWidget::ControllerGlobalSettingsWidget(QWidget* parent,
ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.enableMouseMapping, "UI", "EnableMouseMapping", ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.enableMouseMapping, "UI", "EnableMouseMapping",
false); false);
SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.multitapMode, "ControllerPorts", "MultitapMode", ControllerSettingWidgetBinder::BindWidgetToInputProfileEnumSetting(
&Settings::ParseMultitapModeName, &Settings::GetMultitapModeName, sif, m_ui.multitapMode, "ControllerPorts", "MultitapMode", &Settings::ParseMultitapModeName,
Settings::DEFAULT_MULTITAP_MODE); &Settings::GetMultitapModeName, &Settings::GetMultitapModeDisplayName, Settings::DEFAULT_MULTITAP_MODE,
MultitapMode::Count);
ControllerSettingWidgetBinder::BindWidgetToInputProfileFloat(sif, m_ui.pointerXScale, "ControllerPorts", ControllerSettingWidgetBinder::BindWidgetToInputProfileFloat(sif, m_ui.pointerXScale, "ControllerPorts",
"PointerXScale", 8.0f); "PointerXScale", 8.0f);
ControllerSettingWidgetBinder::BindWidgetToInputProfileFloat(sif, m_ui.pointerYScale, "ControllerPorts", ControllerSettingWidgetBinder::BindWidgetToInputProfileFloat(sif, m_ui.pointerYScale, "ControllerPorts",

View File

@ -98,28 +98,7 @@
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="1" column="1">
<widget class="QComboBox" name="multitapMode"> <widget class="QComboBox" name="multitapMode" />
<item>
<property name="text">
<string>Disabled</string>
</property>
</item>
<item>
<property name="text">
<string>Enable on Port 1 Only</string>
</property>
</item>
<item>
<property name="text">
<string>Enable on Port 2 Only</string>
</property>
</item>
<item>
<property name="text">
<string>Enable on Ports 1 and 2</string>
</property>
</item>
</widget>
</item> </item>
</layout> </layout>
</widget> </widget>

View File

@ -164,4 +164,60 @@ static void BindWidgetToInputProfileString(SettingsInterface* sif, WidgetType* w
}); });
} }
} }
/// Interface specific method of BindWidgetToEnumSetting().
template<typename WidgetType, typename DataType, typename ValueCountType>
static void BindWidgetToInputProfileEnumSetting(SettingsInterface* sif, WidgetType* widget, std::string section,
std::string key,
std::optional<DataType> (*from_string_function)(const char* str),
const char* (*to_string_function)(DataType value),
const char* (*to_display_name_function)(DataType value),
DataType default_value, ValueCountType value_count)
{
using Accessor = SettingWidgetBinder::SettingAccessor<WidgetType>;
using UnderlyingType = std::underlying_type_t<DataType>;
for (UnderlyingType i = 0; i < static_cast<UnderlyingType>(value_count); i++)
Accessor::addOption(widget, to_display_name_function(static_cast<DataType>(i)));
const std::string value =
sif ? sif->GetStringValue(section.c_str(), key.c_str(), to_string_function(default_value)) :
Host::GetBaseStringSettingValue(section.c_str(), key.c_str(), to_string_function(default_value));
const std::optional<DataType> typed_value = from_string_function(value.c_str());
if (typed_value.has_value())
Accessor::setIntValue(widget, static_cast<int>(static_cast<UnderlyingType>(typed_value.value())));
else
Accessor::setIntValue(widget, static_cast<int>(static_cast<UnderlyingType>(default_value)));
if (sif)
{
Accessor::connectValueChanged(
widget, [sif, widget, section = std::move(section), key = std::move(key), to_string_function]() {
if (std::optional<int> new_value = Accessor::getIntValue(widget); new_value.has_value())
{
const char* string_value =
to_string_function(static_cast<DataType>(static_cast<UnderlyingType>(new_value.value())));
sif->SetStringValue(section.c_str(), key.c_str(), string_value);
}
else
{
sif->DeleteValue(section.c_str(), key.c_str());
}
QtHost::SaveGameSettings(sif, true);
g_emu_thread->reloadGameSettings();
});
}
else
{
Accessor::connectValueChanged(
widget, [widget, section = std::move(section), key = std::move(key), to_string_function]() {
const DataType value = static_cast<DataType>(static_cast<UnderlyingType>(Accessor::getIntValue(widget)));
const char* string_value = to_string_function(value);
Host::SetBaseStringSettingValue(section.c_str(), key.c_str(), string_value);
Host::CommitBaseSettingChanges();
g_emu_thread->applySettings();
});
}
}
} // namespace ControllerSettingWidgetBinder } // namespace ControllerSettingWidgetBinder