Qt: Don't manually populate combos for enums

This commit is contained in:
Stenzek
2025-08-16 12:19:54 +10:00
parent 962198f769
commit 006de3a6df
5 changed files with 90 additions and 224 deletions

View File

@@ -22,21 +22,12 @@ AudioSettingsWidget::AudioSettingsWidget(SettingsWindow* dialog, QWidget* parent
m_ui.setupUi(this);
for (u32 i = 0; i < static_cast<u32>(AudioBackend::Count); i++)
m_ui.audioBackend->addItem(QString::fromUtf8(AudioStream::GetBackendDisplayName(static_cast<AudioBackend>(i))));
for (u32 i = 0; i < static_cast<u32>(AudioStretchMode::Count); i++)
{
m_ui.stretchMode->addItem(
QString::fromUtf8(AudioStream::GetStretchModeDisplayName(static_cast<AudioStretchMode>(i))));
}
SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.audioBackend, "Audio", "Backend",
&AudioStream::ParseBackendName, &AudioStream::GetBackendName,
AudioStream::DEFAULT_BACKEND);
SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.stretchMode, "Audio", "StretchMode",
&AudioStream::ParseStretchMode, &AudioStream::GetStretchModeName,
AudioStreamParameters::DEFAULT_STRETCH_MODE);
SettingWidgetBinder::BindWidgetToEnumSetting(
sif, m_ui.audioBackend, "Audio", "Backend", &AudioStream::ParseBackendName, &AudioStream::GetBackendName,
&AudioStream::GetBackendDisplayName, AudioStream::DEFAULT_BACKEND, AudioBackend::Count);
SettingWidgetBinder::BindWidgetToEnumSetting(
sif, m_ui.stretchMode, "Audio", "StretchMode", &AudioStream::ParseStretchMode, &AudioStream::GetStretchModeName,
&AudioStream::GetStretchModeDisplayName, AudioStreamParameters::DEFAULT_STRETCH_MODE, AudioStretchMode::Count);
SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.bufferMS, "Audio", "BufferMS",
AudioStreamParameters::DEFAULT_BUFFER_MS);
SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.outputLatencyMS, "Audio", "OutputLatencyMS",

View File

@@ -25,33 +25,19 @@ ConsoleSettingsWidget::ConsoleSettingsWidget(SettingsWindow* dialog, QWidget* pa
m_ui.setupUi(this);
for (u32 i = 0; i < static_cast<u32>(ConsoleRegion::Count); i++)
{
m_ui.region->addItem(QtUtils::GetIconForRegion(static_cast<ConsoleRegion>(i)),
QString::fromUtf8(Settings::GetConsoleRegionDisplayName(static_cast<ConsoleRegion>(i))));
}
for (u32 i = 0; i < static_cast<u32>(ForceVideoTimingMode::Count); i++)
{
const ForceVideoTimingMode mode = static_cast<ForceVideoTimingMode>(i);
const QIcon region_icon =
QtUtils::GetIconForRegion((mode == ForceVideoTimingMode::Disabled) ?
ConsoleRegion::Auto :
((mode == ForceVideoTimingMode::NTSC) ? ConsoleRegion::NTSC_U : ConsoleRegion::PAL));
m_ui.forceVideoTiming->addItem(region_icon, QString::fromUtf8(Settings::GetForceVideoTimingDisplayName(mode)));
}
for (u32 i = 0; i < static_cast<u32>(CPUExecutionMode::Count); i++)
{
m_ui.cpuExecutionMode->addItem(
QString::fromUtf8(Settings::GetCPUExecutionModeDisplayName(static_cast<CPUExecutionMode>(i))));
}
SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.region, "Console", "Region", &Settings::ParseConsoleRegionName,
&Settings::GetConsoleRegionName, Settings::DEFAULT_CONSOLE_REGION);
SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.forceVideoTiming, "GPU", "ForceVideoTiming",
&Settings::ParseForceVideoTimingName, &Settings::GetForceVideoTimingName,
Settings::DEFAULT_FORCE_VIDEO_TIMING_MODE);
&Settings::GetConsoleRegionName, &Settings::GetConsoleRegionDisplayName,
Settings::DEFAULT_CONSOLE_REGION, ConsoleRegion::Count,
&QtUtils::GetIconForRegion);
SettingWidgetBinder::BindWidgetToEnumSetting(
sif, m_ui.forceVideoTiming, "GPU", "ForceVideoTiming", &Settings::ParseForceVideoTimingName,
&Settings::GetForceVideoTimingName, &Settings::GetForceVideoTimingDisplayName,
Settings::DEFAULT_FORCE_VIDEO_TIMING_MODE, ForceVideoTimingMode::Count, +[](ForceVideoTimingMode mode) {
return QtUtils::GetIconForRegion(
(mode == ForceVideoTimingMode::Disabled) ?
ConsoleRegion::Auto :
((mode == ForceVideoTimingMode::NTSC) ? ConsoleRegion::NTSC_U : ConsoleRegion::PAL));
});
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.fastBoot, "BIOS", "PatchFastBoot", false);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.fastForwardBoot, "BIOS", "FastForwardBoot", false);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.enable8MBRAM, "Console", "Enable8MBRAM", false);
@@ -62,7 +48,8 @@ ConsoleSettingsWidget::ConsoleSettingsWidget(SettingsWindow* dialog, QWidget* pa
SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.cpuExecutionMode, "CPU", "ExecutionMode",
&Settings::ParseCPUExecutionMode, &Settings::GetCPUExecutionModeName,
Settings::DEFAULT_CPU_EXECUTION_MODE);
&Settings::GetCPUExecutionModeDisplayName,
Settings::DEFAULT_CPU_EXECUTION_MODE, CPUExecutionMode::Count);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.enableCPUClockSpeedControl, "CPU", "OverclockEnable", false);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.recompilerICache, "CPU", "RecompilerICache", false);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.cdromLoadImageToRAM, "CDROM", "LoadImageToRAM", false);

View File

@@ -59,22 +59,28 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget*
// Rendering Tab
SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.renderer, "GPU", "Renderer", &Settings::ParseRendererName,
&Settings::GetRendererName, Settings::DEFAULT_GPU_RENDERER);
&Settings::GetRendererName, &Settings::GetRendererDisplayName,
Settings::DEFAULT_GPU_RENDERER, GPURenderer::Count);
SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.textureFiltering, "GPU", "TextureFilter",
&Settings::ParseTextureFilterName, &Settings::GetTextureFilterName,
Settings::DEFAULT_GPU_TEXTURE_FILTER);
&Settings::GetTextureFilterDisplayName,
Settings::DEFAULT_GPU_TEXTURE_FILTER, GPUTextureFilter::Count);
SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.spriteTextureFiltering, "GPU", "SpriteTextureFilter",
&Settings::ParseTextureFilterName, &Settings::GetTextureFilterName,
Settings::DEFAULT_GPU_TEXTURE_FILTER);
&Settings::GetTextureFilterDisplayName,
Settings::DEFAULT_GPU_TEXTURE_FILTER, GPUTextureFilter::Count);
SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.gpuDitheringMode, "GPU", "DitheringMode",
&Settings::ParseGPUDitheringModeName, &Settings::GetGPUDitheringModeName,
Settings::DEFAULT_GPU_DITHERING_MODE);
&Settings::GetGPUDitheringModeDisplayName,
Settings::DEFAULT_GPU_DITHERING_MODE, GPUDitheringMode::MaxCount);
SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.gpuDownsampleMode, "GPU", "DownsampleMode",
&Settings::ParseDownsampleModeName, &Settings::GetDownsampleModeName,
Settings::DEFAULT_GPU_DOWNSAMPLE_MODE);
&Settings::GetDownsampleModeDisplayName,
Settings::DEFAULT_GPU_DOWNSAMPLE_MODE, GPUDownsampleMode::Count);
SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.displayAspectRatio, "Display", "AspectRatio",
&Settings::ParseDisplayAspectRatio, &Settings::GetDisplayAspectRatioName,
Settings::DEFAULT_DISPLAY_ASPECT_RATIO);
&Settings::GetDisplayAspectRatioDisplayName,
Settings::DEFAULT_DISPLAY_ASPECT_RATIO, DisplayAspectRatio::Count);
SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.customAspectRatioNumerator, "Display",
"CustomAspectRatioNumerator", 1);
SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.customAspectRatioDenominator, "Display",
@@ -82,13 +88,15 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget*
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.widescreenHack, "GPU", "WidescreenHack", false);
SettingWidgetBinder::BindWidgetToEnumSetting(
sif, m_ui.displayDeinterlacing, "GPU", "DeinterlacingMode", &Settings::ParseDisplayDeinterlacingMode,
&Settings::GetDisplayDeinterlacingModeName, Settings::DEFAULT_DISPLAY_DEINTERLACING_MODE);
&Settings::GetDisplayDeinterlacingModeName, &Settings::GetDisplayDeinterlacingModeDisplayName,
Settings::DEFAULT_DISPLAY_DEINTERLACING_MODE, DisplayDeinterlacingMode::Count);
SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.displayCropMode, "Display", "CropMode",
&Settings::ParseDisplayCropMode, &Settings::GetDisplayCropModeName,
Settings::DEFAULT_DISPLAY_CROP_MODE);
SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.displayScaling, "Display", "Scaling",
&Settings::ParseDisplayScaling, &Settings::GetDisplayScalingName,
Settings::DEFAULT_DISPLAY_SCALING);
&Settings::GetDisplayCropModeDisplayName,
Settings::DEFAULT_DISPLAY_CROP_MODE, DisplayCropMode::MaxCount);
SettingWidgetBinder::BindWidgetToEnumSetting(
sif, m_ui.displayScaling, "Display", "Scaling", &Settings::ParseDisplayScaling, &Settings::GetDisplayScalingName,
&Settings::GetDisplayScalingDisplayName, Settings::DEFAULT_DISPLAY_SCALING, DisplayScalingMode::Count);
SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.gpuDownsampleScale, "GPU", "DownsampleScale", 1);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.pgxpEnable, "GPU", "PGXPEnable", false);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.pgxpDepthBuffer, "GPU", "PGXPDepthBuffer", false);
@@ -123,13 +131,16 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget*
SettingWidgetBinder::BindWidgetToEnumSetting(
sif, m_ui.exclusiveFullscreenControl, "Display", "ExclusiveFullscreenControl",
&Settings::ParseDisplayExclusiveFullscreenControl, &Settings::GetDisplayExclusiveFullscreenControlName,
Settings::DEFAULT_DISPLAY_EXCLUSIVE_FULLSCREEN_CONTROL);
&Settings::GetDisplayExclusiveFullscreenControlDisplayName, Settings::DEFAULT_DISPLAY_EXCLUSIVE_FULLSCREEN_CONTROL,
DisplayExclusiveFullscreenControl::Count);
SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.displayAlignment, "Display", "Alignment",
&Settings::ParseDisplayAlignment, &Settings::GetDisplayAlignmentName,
Settings::DEFAULT_DISPLAY_ALIGNMENT);
&Settings::GetDisplayAlignmentDisplayName,
Settings::DEFAULT_DISPLAY_ALIGNMENT, DisplayAlignment::Count);
SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.displayRotation, "Display", "Rotation",
&Settings::ParseDisplayRotation, &Settings::GetDisplayRotationName,
Settings::DEFAULT_DISPLAY_ROTATION);
&Settings::GetDisplayRotationDisplayName,
Settings::DEFAULT_DISPLAY_ROTATION, DisplayRotation::Count);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.disableMailboxPresentation, "Display",
"DisableMailboxPresentation", false);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.automaticallyResizeWindow, "Display", "AutoResizeWindow",
@@ -139,10 +150,12 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget*
#endif
SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.gpuLineDetectMode, "GPU", "LineDetectMode",
&Settings::ParseLineDetectModeName, &Settings::GetLineDetectModeName,
Settings::DEFAULT_GPU_LINE_DETECT_MODE);
&Settings::GetLineDetectModeDisplayName,
Settings::DEFAULT_GPU_LINE_DETECT_MODE, GPULineDetectMode::Count);
SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.gpuWireframeMode, "GPU", "WireframeMode",
Settings::ParseGPUWireframeMode, Settings::GetGPUWireframeModeName,
Settings::DEFAULT_GPU_WIREFRAME_MODE);
&Settings::GetGPUWireframeModeDisplayName,
Settings::DEFAULT_GPU_WIREFRAME_MODE, GPUWireframeMode::Count);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.gpuThread, "GPU", "UseThread", true);
SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.maxQueuedFrames, "GPU", "MaxQueuedFrames",
Settings::DEFAULT_GPU_MAX_QUEUED_FRAMES);
@@ -214,16 +227,19 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget*
SettingWidgetBinder::BindWidgetToEnumSetting(
sif, m_ui.screenshotSize, "Display", "ScreenshotMode", &Settings::ParseDisplayScreenshotMode,
&Settings::GetDisplayScreenshotModeName, Settings::DEFAULT_DISPLAY_SCREENSHOT_MODE);
&Settings::GetDisplayScreenshotModeName, &Settings::GetDisplayScreenshotModeDisplayName,
Settings::DEFAULT_DISPLAY_SCREENSHOT_MODE, DisplayScreenshotMode::Count);
SettingWidgetBinder::BindWidgetToEnumSetting(
sif, m_ui.screenshotFormat, "Display", "ScreenshotFormat", &Settings::ParseDisplayScreenshotFormat,
&Settings::GetDisplayScreenshotFormatName, Settings::DEFAULT_DISPLAY_SCREENSHOT_FORMAT);
&Settings::GetDisplayScreenshotFormatName, &Settings::GetDisplayScreenshotFormatDisplayName,
Settings::DEFAULT_DISPLAY_SCREENSHOT_FORMAT, DisplayScreenshotFormat::Count);
SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.screenshotQuality, "Display", "ScreenshotQuality",
Settings::DEFAULT_DISPLAY_SCREENSHOT_QUALITY);
SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.mediaCaptureBackend, "MediaCapture", "Backend",
&MediaCapture::ParseBackendName, &MediaCapture::GetBackendName,
Settings::DEFAULT_MEDIA_CAPTURE_BACKEND);
&MediaCapture::GetBackendDisplayName,
Settings::DEFAULT_MEDIA_CAPTURE_BACKEND, MediaCaptureBackend::MaxCount);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.enableVideoCapture, "MediaCapture", "VideoCapture", true);
SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.videoCaptureWidth, "MediaCapture", "VideoWidth",
Settings::DEFAULT_MEDIA_CAPTURE_VIDEO_WIDTH);
@@ -672,57 +688,6 @@ GraphicsSettingsWidget::~GraphicsSettingsWidget() = default;
void GraphicsSettingsWidget::setupAdditionalUi()
{
// Rendering Tab
for (u32 i = 0; i < static_cast<u32>(GPURenderer::Count); i++)
{
m_ui.renderer->addItem(QString::fromUtf8(Settings::GetRendererDisplayName(static_cast<GPURenderer>(i))));
}
for (u32 i = 0; i < static_cast<u32>(GPUTextureFilter::Count); i++)
{
m_ui.textureFiltering->addItem(
QString::fromUtf8(Settings::GetTextureFilterDisplayName(static_cast<GPUTextureFilter>(i))));
m_ui.spriteTextureFiltering->addItem(
QString::fromUtf8(Settings::GetTextureFilterDisplayName(static_cast<GPUTextureFilter>(i))));
}
for (u32 i = 0; i < static_cast<u32>(GPUDitheringMode::MaxCount); i++)
{
m_ui.gpuDitheringMode->addItem(
QString::fromUtf8(Settings::GetGPUDitheringModeDisplayName(static_cast<GPUDitheringMode>(i))));
}
for (u32 i = 0; i < static_cast<u32>(GPUDownsampleMode::Count); i++)
{
m_ui.gpuDownsampleMode->addItem(
QString::fromUtf8(Settings::GetDownsampleModeDisplayName(static_cast<GPUDownsampleMode>(i))));
}
for (u32 i = 0; i < static_cast<u32>(DisplayAspectRatio::Count); i++)
{
m_ui.displayAspectRatio->addItem(
QString::fromUtf8(Settings::GetDisplayAspectRatioDisplayName(static_cast<DisplayAspectRatio>(i))));
}
for (u32 i = 0; i < static_cast<u32>(DisplayDeinterlacingMode::Count); i++)
{
m_ui.displayDeinterlacing->addItem(
QString::fromUtf8(Settings::GetDisplayDeinterlacingModeDisplayName(static_cast<DisplayDeinterlacingMode>(i))));
}
for (u32 i = 0; i < static_cast<u32>(DisplayCropMode::MaxCount); i++)
{
m_ui.displayCropMode->addItem(
QString::fromUtf8(Settings::GetDisplayCropModeDisplayName(static_cast<DisplayCropMode>(i))));
}
for (u32 i = 0; i < static_cast<u32>(DisplayScalingMode::Count); i++)
{
m_ui.displayScaling->addItem(
QString::fromUtf8(Settings::GetDisplayScalingDisplayName(static_cast<DisplayScalingMode>(i))));
}
// OSD Tab
const std::vector<std::string_view> fsui_theme_names = FullscreenUI::GetThemeNames();
@@ -732,60 +697,6 @@ void GraphicsSettingsWidget::setupAdditionalUi()
m_ui.fullscreenUITheme->addItem(QtUtils::StringViewToQString(fsui_theme_names[i]),
QString::fromUtf8(fsui_theme_values[i]));
}
// Advanced Tab
for (u32 i = 0; i < static_cast<u32>(DisplayExclusiveFullscreenControl::Count); i++)
{
m_ui.exclusiveFullscreenControl->addItem(QString::fromUtf8(
Settings::GetDisplayExclusiveFullscreenControlDisplayName(static_cast<DisplayExclusiveFullscreenControl>(i))));
}
for (u32 i = 0; i < static_cast<u32>(DisplayAlignment::Count); i++)
{
m_ui.displayAlignment->addItem(
QString::fromUtf8(Settings::GetDisplayAlignmentDisplayName(static_cast<DisplayAlignment>(i))));
}
for (u32 i = 0; i < static_cast<u32>(DisplayRotation::Count); i++)
{
m_ui.displayRotation->addItem(
QString::fromUtf8(Settings::GetDisplayRotationDisplayName(static_cast<DisplayRotation>(i))));
}
for (u32 i = 0; i < static_cast<u32>(GPULineDetectMode::Count); i++)
{
m_ui.gpuLineDetectMode->addItem(
QString::fromUtf8(Settings::GetLineDetectModeDisplayName(static_cast<GPULineDetectMode>(i))));
}
// Capture Tab
for (u32 i = 0; i < static_cast<u32>(DisplayScreenshotMode::Count); i++)
{
m_ui.screenshotSize->addItem(
QString::fromUtf8(Settings::GetDisplayScreenshotModeDisplayName(static_cast<DisplayScreenshotMode>(i))));
}
for (u32 i = 0; i < static_cast<u32>(DisplayScreenshotFormat::Count); i++)
{
m_ui.screenshotFormat->addItem(
QString::fromUtf8(Settings::GetDisplayScreenshotFormatDisplayName(static_cast<DisplayScreenshotFormat>(i))));
}
for (u32 i = 0; i < static_cast<u32>(MediaCaptureBackend::MaxCount); i++)
{
m_ui.mediaCaptureBackend->addItem(
QString::fromUtf8(MediaCapture::GetBackendDisplayName(static_cast<MediaCaptureBackend>(i))));
}
// Debugging Tab
for (u32 i = 0; i < static_cast<u32>(GPUWireframeMode::Count); i++)
{
m_ui.gpuWireframeMode->addItem(
QString::fromUtf8(Settings::GetGPUWireframeModeDisplayName(static_cast<GPUWireframeMode>(i))));
}
}
void GraphicsSettingsWidget::removePlatformSpecificUi()

View File

@@ -43,6 +43,7 @@ template<typename T>
struct SettingAccessor
{
static void addOption(T* widget, const char* value_name);
static void addOption(T* widget, const char* value_name, const QIcon& icon);
static bool getBoolValue(const T* widget);
static void setBoolValue(T* widget, bool value);
@@ -77,8 +78,6 @@ struct SettingAccessor
template<>
struct SettingAccessor<QLineEdit>
{
static void addOption(QLineEdit* widget, const char* value_name) {}
static bool getBoolValue(const QLineEdit* widget) { return widget->text().toInt() != 0; }
static void setBoolValue(QLineEdit* widget, bool value)
{
@@ -131,6 +130,10 @@ template<>
struct SettingAccessor<QComboBox>
{
static void addOption(QComboBox* widget, const char* value_name) { widget->addItem(QString::fromUtf8(value_name)); }
static void addOption(QComboBox* widget, const char* value_name, const QIcon& icon)
{
widget->addItem(icon, QString::fromUtf8(value_name));
}
static bool isNullValue(const QComboBox* widget) { return (widget->currentIndex() == 0); }
@@ -225,8 +228,6 @@ struct SettingAccessor<QComboBox>
template<>
struct SettingAccessor<QCheckBox>
{
static void addOption(QCheckBox* widget, const char* value_name) {}
static bool getBoolValue(const QCheckBox* widget) { return widget->isChecked(); }
static void setBoolValue(QCheckBox* widget, bool value) { widget->setChecked(value); }
static void makeNullableBool(QCheckBox* widget, bool globalValue) { widget->setTristate(true); }
@@ -300,8 +301,6 @@ struct SettingAccessor<QCheckBox>
template<>
struct SettingAccessor<QSlider>
{
static void addOption(QSlider* widget, const char* value_name) {}
static bool isNullable(const QSlider* widget) { return widget->property(NULLABLE_PROPERTY).toBool(); }
static bool getBoolValue(const QSlider* widget) { return widget->value() > 0; }
@@ -416,8 +415,6 @@ struct SettingAccessor<QSlider>
template<>
struct SettingAccessor<QSpinBox>
{
static void addOption(QSpinBox* widget, const char* value_name) {}
static bool isNullable(const QSpinBox* widget) { return widget->property(NULLABLE_PROPERTY).toBool(); }
static void updateFont(QSpinBox* widget, bool isNull)
@@ -555,8 +552,6 @@ struct SettingAccessor<QSpinBox>
template<>
struct SettingAccessor<QDoubleSpinBox>
{
static void addOption(QDoubleSpinBox* widget, const char* value_name) {}
static bool isNullable(const QDoubleSpinBox* widget) { return widget->property(NULLABLE_PROPERTY).toBool(); }
static void updateFont(QDoubleSpinBox* widget, bool isNull)
@@ -695,8 +690,6 @@ struct SettingAccessor<QDoubleSpinBox>
template<>
struct SettingAccessor<QAction>
{
static void addOption(QAction* widget, const char* value_name) {}
static bool getBoolValue(const QAction* widget) { return widget->isChecked(); }
static void setBoolValue(QAction* widget, bool value) { widget->setChecked(value); }
static void makeNullableBool(QAction* widget, bool globalSetting) { widget->setEnabled(false); }
@@ -1156,13 +1149,24 @@ inline void BindWidgetToEnumSetting(SettingsInterface* sif, WidgetType* widget,
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)
ValueCountType value_count, QIcon (*item_icon_function)(DataType value) = nullptr)
{
using Accessor = 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)));
if (item_icon_function)
{
for (UnderlyingType i = 0; i < static_cast<UnderlyingType>(value_count); i++)
{
Accessor::addOption(widget, to_display_name_function(static_cast<DataType>(i)),
item_icon_function(static_cast<DataType>(i)));
}
}
else
{
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(
Host::GetBaseStringSettingValue(section.c_str(), key.c_str(), to_string_function(default_value)));

View File

@@ -514,46 +514,30 @@ void SetupWizardDialog::setupGraphicsPage(bool initial)
SettingWidgetBinder::DisconnectWidget(m_ui.spriteTextureFiltering);
m_ui.spriteTextureFiltering->clear();
for (u32 i = 0; i < static_cast<u32>(GPUTextureFilter::Count); i++)
{
m_ui.textureFiltering->addItem(
QString::fromUtf8(Settings::GetTextureFilterDisplayName(static_cast<GPUTextureFilter>(i))));
m_ui.spriteTextureFiltering->addItem(
QString::fromUtf8(Settings::GetTextureFilterDisplayName(static_cast<GPUTextureFilter>(i))));
}
SettingWidgetBinder::BindWidgetToEnumSetting(nullptr, m_ui.textureFiltering, "GPU", "TextureFilter",
&Settings::ParseTextureFilterName, &Settings::GetTextureFilterName,
Settings::DEFAULT_GPU_TEXTURE_FILTER);
&Settings::GetTextureFilterDisplayName,
Settings::DEFAULT_GPU_TEXTURE_FILTER, GPUTextureFilter::Count);
SettingWidgetBinder::BindWidgetToEnumSetting(nullptr, m_ui.spriteTextureFiltering, "GPU", "SpriteTextureFilter",
&Settings::ParseTextureFilterName, &Settings::GetTextureFilterName,
Settings::DEFAULT_GPU_TEXTURE_FILTER);
&Settings::GetTextureFilterDisplayName,
Settings::DEFAULT_GPU_TEXTURE_FILTER, GPUTextureFilter::Count);
SettingWidgetBinder::DisconnectWidget(m_ui.gpuDitheringMode);
m_ui.gpuDitheringMode->clear();
for (u32 i = 0; i < static_cast<u32>(GPUDitheringMode::MaxCount); i++)
{
m_ui.gpuDitheringMode->addItem(
QString::fromUtf8(Settings::GetGPUDitheringModeDisplayName(static_cast<GPUDitheringMode>(i))));
}
SettingWidgetBinder::BindWidgetToEnumSetting(nullptr, m_ui.gpuDitheringMode, "GPU", "DitheringMode",
&Settings::ParseGPUDitheringModeName, &Settings::GetGPUDitheringModeName,
Settings::DEFAULT_GPU_DITHERING_MODE);
&Settings::GetGPUDitheringModeDisplayName,
Settings::DEFAULT_GPU_DITHERING_MODE, GPUDitheringMode::MaxCount);
SettingWidgetBinder::DisconnectWidget(m_ui.displayAspectRatio);
m_ui.displayAspectRatio->clear();
for (u32 i = 0; i < static_cast<u32>(DisplayAspectRatio::Count); i++)
{
m_ui.displayAspectRatio->addItem(
QString::fromUtf8(Settings::GetDisplayAspectRatioDisplayName(static_cast<DisplayAspectRatio>(i))));
}
SettingWidgetBinder::BindWidgetToEnumSetting(nullptr, m_ui.displayAspectRatio, "Display", "AspectRatio",
&Settings::ParseDisplayAspectRatio, &Settings::GetDisplayAspectRatioName,
Settings::DEFAULT_DISPLAY_ASPECT_RATIO);
&Settings::GetDisplayAspectRatioDisplayName,
Settings::DEFAULT_DISPLAY_ASPECT_RATIO, DisplayAspectRatio::Count);
SettingWidgetBinder::BindWidgetToIntSetting(nullptr, m_ui.customAspectRatioNumerator, "Display",
"CustomAspectRatioNumerator", 1);
SettingWidgetBinder::BindWidgetToIntSetting(nullptr, m_ui.customAspectRatioDenominator, "Display",
@@ -565,28 +549,18 @@ void SetupWizardDialog::setupGraphicsPage(bool initial)
SettingWidgetBinder::DisconnectWidget(m_ui.displayCropMode);
m_ui.displayCropMode->clear();
for (u32 i = 0; i < static_cast<u32>(DisplayCropMode::MaxCount); i++)
{
m_ui.displayCropMode->addItem(
QString::fromUtf8(Settings::GetDisplayCropModeDisplayName(static_cast<DisplayCropMode>(i))));
}
SettingWidgetBinder::BindWidgetToEnumSetting(nullptr, m_ui.displayCropMode, "Display", "CropMode",
&Settings::ParseDisplayCropMode, &Settings::GetDisplayCropModeName,
Settings::DEFAULT_DISPLAY_CROP_MODE);
&Settings::GetDisplayCropModeDisplayName,
Settings::DEFAULT_DISPLAY_CROP_MODE, DisplayCropMode::MaxCount);
SettingWidgetBinder::DisconnectWidget(m_ui.displayScaling);
m_ui.displayScaling->clear();
for (u32 i = 0; i < static_cast<u32>(DisplayScalingMode::Count); i++)
{
m_ui.displayScaling->addItem(
QString::fromUtf8(Settings::GetDisplayScalingDisplayName(static_cast<DisplayScalingMode>(i))));
}
SettingWidgetBinder::BindWidgetToEnumSetting(nullptr, m_ui.displayScaling, "Display", "Scaling",
&Settings::ParseDisplayScaling, &Settings::GetDisplayScalingName,
Settings::DEFAULT_DISPLAY_SCALING);
&Settings::GetDisplayScalingDisplayName,
Settings::DEFAULT_DISPLAY_SCALING, DisplayScalingMode::Count);
if (initial)
{
@@ -648,11 +622,10 @@ void SetupWizardDialog::updateAchievementsLoginState()
{
const u64 login_unix_timestamp =
StringUtil::FromChars<u64>(Host::GetBaseStringSettingValue("Cheevos", "LoginTimestamp", "0")).value_or(0);
const QString login_timestamp = QtHost::FormatNumber(Host::NumberFormatType::ShortDateTime,
static_cast<s64>(login_unix_timestamp));
m_ui.loginStatus->setText(tr("Username: %1\nLogin token generated on %2.")
.arg(QString::fromStdString(username))
.arg(login_timestamp));
const QString login_timestamp =
QtHost::FormatNumber(Host::NumberFormatType::ShortDateTime, static_cast<s64>(login_unix_timestamp));
m_ui.loginStatus->setText(
tr("Username: %1\nLogin token generated on %2.").arg(QString::fromStdString(username)).arg(login_timestamp));
m_ui.loginButton->setText(tr("Logout"));
}
else