settings,configuration: Add a default suffix

This commit is contained in:
lat9nq 2023-06-21 05:04:21 -04:00
parent 9de50d6194
commit 926f3e3d3e
9 changed files with 93 additions and 74 deletions

View File

@ -137,8 +137,15 @@ struct Values {
SwitchableSetting<AudioMode, true> sound_index{linkage, AudioMode::Stereo, SwitchableSetting<AudioMode, true> sound_index{linkage, AudioMode::Stereo,
AudioMode::Mono, AudioMode::Surround, AudioMode::Mono, AudioMode::Surround,
"sound_index", Category::SystemAudio}; "sound_index", Category::SystemAudio};
SwitchableSetting<u8, true> volume{ SwitchableSetting<u8, true> volume{linkage,
linkage, 100, 0, 200, "volume", Category::Audio, Specialization::Scalar, true, true}; 100,
0,
200,
"volume",
Category::Audio,
Specialization::Scalar | Specialization::Percentage,
true,
true};
Setting<bool, false> audio_muted{ Setting<bool, false> audio_muted{
linkage, false, "audio_muted", Category::Audio, Specialization::Default, false}; linkage, false, "audio_muted", Category::Audio, Specialization::Default, false};
Setting<bool, false> dump_audio_commands{ Setting<bool, false> dump_audio_commands{
@ -156,7 +163,7 @@ struct Values {
9999, 9999,
"speed_limit", "speed_limit",
Category::Core, Category::Core,
Specialization::Countable, Specialization::Countable | Specialization::Percentage,
true, true,
true, true,
&use_speed_limit}; &use_speed_limit};
@ -268,9 +275,16 @@ struct Values {
Specialization::Default, Specialization::Default,
true, true,
true}; true};
SwitchableSetting<int, true> fsr_sharpening_slider{ SwitchableSetting<int, true> fsr_sharpening_slider{linkage,
linkage, 25, 0, 200, "fsr_sharpening_slider", Category::Renderer, Specialization::Scalar, 25,
true, true}; 0,
200,
"fsr_sharpening_slider",
Category::Renderer,
Specialization::Scalar |
Specialization::Percentage,
true,
true};
SwitchableSetting<u8, false> bg_red{ SwitchableSetting<u8, false> bg_red{
linkage, 0, "bg_red", Category::Renderer, Specialization::Default, true, true}; linkage, 0, "bg_red", Category::Renderer, Specialization::Default, true, true};

View File

@ -7,8 +7,8 @@
namespace Settings { namespace Settings {
BasicSetting::BasicSetting(Linkage& linkage, const std::string& name, enum Category category_, BasicSetting::BasicSetting(Linkage& linkage, const std::string& name, enum Category category_,
bool save_, bool runtime_modifiable_, bool save_, bool runtime_modifiable_, u32 specialization_,
enum Specialization specialization_, BasicSetting* other_setting_) BasicSetting* other_setting_)
: label{name}, category{category_}, id{linkage.count}, save{save_}, : label{name}, category{category_}, id{linkage.count}, save{save_},
runtime_modifiable{runtime_modifiable_}, specialization{specialization_}, runtime_modifiable{runtime_modifiable_}, specialization{specialization_},
other_setting{other_setting_} { other_setting{other_setting_} {
@ -40,7 +40,7 @@ Category BasicSetting::Category() const {
return category; return category;
} }
Specialization BasicSetting::Specialization() const { u32 BasicSetting::Specialization() const {
return specialization; return specialization;
} }

View File

@ -43,15 +43,21 @@ enum class Category : u32 {
MaxEnum, MaxEnum,
}; };
enum class Specialization : u32 { constexpr u8 SpecializationTypeMask = 0xf;
Default, constexpr u8 SpecializationAttributeMask = 0xf0;
Time, constexpr u8 SpecializationAttributeOffset = 4;
Hex,
List, enum Specialization : u8 {
RuntimeList, Default = 0,
Scalar, Time = 1,
Countable, Hex = 2,
Paired, List = 3,
RuntimeList = 4,
Scalar = 5,
Countable = 6,
Paired = 7,
Percentage = (1 << SpecializationAttributeOffset),
}; };
bool IsConfiguringGlobal(); bool IsConfiguringGlobal();
@ -75,7 +81,7 @@ public:
class BasicSetting { class BasicSetting {
protected: protected:
explicit BasicSetting(Linkage& linkage, const std::string& name, enum Category category_, explicit BasicSetting(Linkage& linkage, const std::string& name, enum Category category_,
bool save_, bool runtime_modifiable_, Specialization spec, bool save_, bool runtime_modifiable_, u32 specialization,
BasicSetting* other_setting); BasicSetting* other_setting);
public: public:
@ -195,7 +201,7 @@ public:
/** /**
* @returns Extra metadata for data representation in frontend implementations. * @returns Extra metadata for data representation in frontend implementations.
*/ */
[[nodiscard]] enum Specialization Specialization() const; [[nodiscard]] u32 Specialization() const;
/** /**
* @returns Another BasicSetting if one is paired, or nullptr otherwise. * @returns Another BasicSetting if one is paired, or nullptr otherwise.
@ -241,8 +247,7 @@ private:
const bool save; ///< Suggests if the setting should be saved and read to a frontend config const bool save; ///< Suggests if the setting should be saved and read to a frontend config
const bool const bool
runtime_modifiable; ///< Suggests if the setting can be modified while a guest is running runtime_modifiable; ///< Suggests if the setting can be modified while a guest is running
const enum Specialization const u32 specialization; ///< Extra data to identify representation of a setting
specialization; ///< Extra data to identify representation of a setting
BasicSetting* const other_setting; ///< A paired setting BasicSetting* const other_setting; ///< A paired setting
}; };

View File

@ -35,8 +35,7 @@ public:
* @param category_ Category of the setting AKA INI group * @param category_ Category of the setting AKA INI group
*/ */
explicit Setting(Linkage& linkage, const Type& default_val, const std::string& name, explicit Setting(Linkage& linkage, const Type& default_val, const std::string& name,
enum Category category_, enum Category category_, u32 specialization = Specialization::Default,
enum Specialization specialization = Specialization::Default,
bool save_ = true, bool runtime_modifiable_ = false, bool save_ = true, bool runtime_modifiable_ = false,
BasicSetting* other_setting = nullptr) BasicSetting* other_setting = nullptr)
requires(!ranged) requires(!ranged)
@ -57,9 +56,8 @@ public:
*/ */
explicit Setting(Linkage& linkage, const Type& default_val, const Type& min_val, explicit Setting(Linkage& linkage, const Type& default_val, const Type& min_val,
const Type& max_val, const std::string& name, enum Category category_, const Type& max_val, const std::string& name, enum Category category_,
enum Specialization specialization = Specialization::Default, u32 specialization = Specialization::Default, bool save_ = true,
bool save_ = true, bool runtime_modifiable_ = false, bool runtime_modifiable_ = false, BasicSetting* other_setting = nullptr)
BasicSetting* other_setting = nullptr)
requires(ranged) requires(ranged)
: BasicSetting(linkage, name, category_, save_, runtime_modifiable_, specialization, : BasicSetting(linkage, name, category_, save_, runtime_modifiable_, specialization,
other_setting), other_setting),
@ -237,8 +235,7 @@ public:
* @param category_ Category of the setting AKA INI group * @param category_ Category of the setting AKA INI group
*/ */
explicit SwitchableSetting(Linkage& linkage, const Type& default_val, const std::string& name, explicit SwitchableSetting(Linkage& linkage, const Type& default_val, const std::string& name,
Category category_, Category category_, u32 specialization = Specialization::Default,
enum Specialization specialization = Specialization::Default,
bool save_ = true, bool runtime_modifiable_ = false, bool save_ = true, bool runtime_modifiable_ = false,
BasicSetting* other_setting = nullptr) BasicSetting* other_setting = nullptr)
requires(!ranged) requires(!ranged)
@ -261,8 +258,8 @@ public:
*/ */
explicit SwitchableSetting(Linkage& linkage, const Type& default_val, const Type& min_val, explicit SwitchableSetting(Linkage& linkage, const Type& default_val, const Type& min_val,
const Type& max_val, const std::string& name, Category category_, const Type& max_val, const std::string& name, Category category_,
enum Specialization specialization = Specialization::Default, u32 specialization = Specialization::Default, bool save_ = true,
bool save_ = true, bool runtime_modifiable_ = false, bool runtime_modifiable_ = false,
BasicSetting* other_setting = nullptr) BasicSetting* other_setting = nullptr)
requires(ranged) requires(ranged)
: Setting<Type, true>{ : Setting<Type, true>{

View File

@ -43,17 +43,7 @@ void ConfigureAudio::Setup(const ConfigurationShared::Builder& builder) {
push(Settings::Category::SystemAudio); push(Settings::Category::SystemAudio);
for (auto* setting : settings) { for (auto* setting : settings) {
auto* widget = [&]() { auto* widget = builder.BuildWidget(setting, apply_funcs);
// TODO (lat9nq): Let the system manage sink_id
if (setting->Id() == Settings::values.volume.Id()) {
// volume needs to be a slider (default is line edit)
return builder.BuildWidget(setting, apply_funcs, nullptr,
ConfigurationShared::RequestType::Slider,
tr("%1%", "Volume percentage (e.g. 50%)"));
} else {
return builder.BuildWidget(setting, apply_funcs);
}
}();
if (widget == nullptr) { if (widget == nullptr) {
continue; continue;
@ -66,6 +56,7 @@ void ConfigureAudio::Setup(const ConfigurationShared::Builder& builder) {
layout.addWidget(widget); layout.addWidget(widget);
if (setting->Id() == Settings::values.sink_id.Id()) { if (setting->Id() == Settings::values.sink_id.Id()) {
// TODO (lat9nq): Let the system manage sink_id
sink_combo_box = widget->combobox; sink_combo_box = widget->combobox;
InitializeAudioSinkComboBox(); InitializeAudioSinkComboBox();

View File

@ -232,10 +232,10 @@ void ConfigureGraphics::Setup(const ConfigurationShared::Builder& builder) {
for (const auto setting : Settings::values.linkage.by_category[Settings::Category::Renderer]) { for (const auto setting : Settings::values.linkage.by_category[Settings::Category::Renderer]) {
ConfigurationShared::Widget* widget = [&]() { ConfigurationShared::Widget* widget = [&]() {
if (setting->Id() == Settings::values.fsr_sharpening_slider.Id()) { if (setting->Id() == Settings::values.fsr_sharpening_slider.Id()) {
// FSR needs a reversed slider // FSR needs a reversed slider and a 0.5 multiplier
return builder.BuildWidget( return builder.BuildWidget(
setting, apply_funcs, ConfigurationShared::RequestType::ReverseSlider, true, setting, apply_funcs, ConfigurationShared::RequestType::ReverseSlider, true,
0.5f, nullptr, tr("%1%", "FSR sharpening percentage (e.g. 50%)")); 0.5f, nullptr, tr("%", "FSR sharpening percentage (e.g. 50%)"));
} else { } else {
return builder.BuildWidget(setting, apply_funcs); return builder.BuildWidget(setting, apply_funcs);
} }

View File

@ -106,16 +106,7 @@ void ConfigureSystem::Setup(const ConfigurationShared::Builder& builder) {
push(Settings::values.linkage.by_category[Settings::Category::System]); push(Settings::values.linkage.by_category[Settings::Category::System]);
for (auto setting : settings) { for (auto setting : settings) {
ConfigurationShared::Widget* widget = [this, setting, &builder]() { ConfigurationShared::Widget* widget = builder.BuildWidget(setting, apply_funcs);
if (setting->Id() == Settings::values.speed_limit.Id()) {
// speed_limit must be specified to translate the percentage
return builder.BuildWidget(setting, apply_funcs, &Settings::values.use_speed_limit,
ConfigurationShared::RequestType::SpinBox,
tr("%", "Limit speed percentage (e.g. 50%)"));
} else {
return builder.BuildWidget(setting, apply_funcs);
}
}();
if (widget == nullptr) { if (widget == nullptr) {
continue; continue;

View File

@ -50,6 +50,20 @@ static std::string RelevantDefault(const Settings::BasicSetting& setting) {
return Settings::IsConfiguringGlobal() ? setting.DefaultToString() : setting.ToStringGlobal(); return Settings::IsConfiguringGlobal() ? setting.DefaultToString() : setting.ToStringGlobal();
} }
static QString DefaultSuffix(QWidget* parent, Settings::BasicSetting& setting) {
const auto tr = [parent](const char* text, const char* context) {
return parent->tr(text, context);
};
if ((setting.Specialization() & Settings::SpecializationAttributeMask) ==
Settings::Specialization::Percentage) {
std::string context{fmt::format("{} percentage (e.g. 50%)", setting.GetLabel())};
return tr("%", context.c_str());
}
return QStringLiteral("");
}
QPushButton* Widget::CreateRestoreGlobalButton(bool using_global, QWidget* parent) { QPushButton* Widget::CreateRestoreGlobalButton(bool using_global, QWidget* parent) {
restore_button_count++; restore_button_count++;
@ -180,7 +194,7 @@ QWidget* Widget::CreateLineEdit(std::function<std::string()>& serializer,
return line_edit; return line_edit;
} }
QWidget* Widget::CreateSlider(bool reversed, float multiplier, const QString& format, QWidget* Widget::CreateSlider(bool reversed, float multiplier, const QString& given_suffix,
std::function<std::string()>& serializer, std::function<std::string()>& serializer,
std::function<void()>& restore_func, std::function<void()>& restore_func,
const std::function<void()>& touch) { const std::function<void()>& touch) {
@ -205,7 +219,10 @@ QWidget* Widget::CreateSlider(bool reversed, float multiplier, const QString& fo
int max_val = std::stoi(setting.MaxVal()); int max_val = std::stoi(setting.MaxVal());
const QString use_format = format == QStringLiteral("") ? QStringLiteral("%1") : format; QString suffix =
given_suffix == QStringLiteral("") ? DefaultSuffix(this, setting) : given_suffix;
const QString use_format = QStringLiteral("%1").append(suffix);
QObject::connect(slider, &QAbstractSlider::valueChanged, [=](int value) { QObject::connect(slider, &QAbstractSlider::valueChanged, [=](int value) {
int present = (reversed ? max_val - value : value) * multiplier + 0.5f; int present = (reversed ? max_val - value : value) * multiplier + 0.5f;
@ -228,7 +245,8 @@ QWidget* Widget::CreateSlider(bool reversed, float multiplier, const QString& fo
return container; return container;
} }
QWidget* Widget::CreateSpinBox(const QString& suffix, std::function<std::string()>& serializer, QWidget* Widget::CreateSpinBox(const QString& given_suffix,
std::function<std::string()>& serializer,
std::function<void()>& restore_func, std::function<void()>& restore_func,
const std::function<void()>& touch) { const std::function<void()>& touch) {
const int min_val = const int min_val =
@ -237,6 +255,9 @@ QWidget* Widget::CreateSpinBox(const QString& suffix, std::function<std::string(
setting.Ranged() ? std::stoi(setting.MaxVal()) : std::numeric_limits<int>::max(); setting.Ranged() ? std::stoi(setting.MaxVal()) : std::numeric_limits<int>::max();
const int default_val = std::stoi(setting.ToString()); const int default_val = std::stoi(setting.ToString());
QString suffix =
given_suffix == QStringLiteral("") ? DefaultSuffix(this, setting) : given_suffix;
spinbox = new QSpinBox(this); spinbox = new QSpinBox(this);
spinbox->setRange(min_val, max_val); spinbox->setRange(min_val, max_val);
spinbox->setValue(default_val); spinbox->setValue(default_val);
@ -338,7 +359,7 @@ QWidget* Widget::CreateDateTimeEdit(bool disabled, bool restrict,
void Widget::SetupComponent(const QString& label, std::function<void()>& load_func, bool managed, void Widget::SetupComponent(const QString& label, std::function<void()>& load_func, bool managed,
RequestType request, float multiplier, RequestType request, float multiplier,
Settings::BasicSetting* other_setting, const QString& string) { Settings::BasicSetting* other_setting, const QString& suffix) {
created = true; created = true;
const auto type = setting.TypeId(); const auto type = setting.TypeId();
@ -391,7 +412,7 @@ void Widget::SetupComponent(const QString& label, std::function<void()>& load_fu
if (request != RequestType::Default) { if (request != RequestType::Default) {
return request; return request;
} }
switch (setting.Specialization()) { switch (setting.Specialization() & Settings::SpecializationTypeMask) {
case Settings::Specialization::Default: case Settings::Specialization::Default:
return RequestType::Default; return RequestType::Default;
case Settings::Specialization::Time: case Settings::Specialization::Time:
@ -422,7 +443,7 @@ void Widget::SetupComponent(const QString& label, std::function<void()>& load_fu
switch (request) { switch (request) {
case RequestType::Slider: case RequestType::Slider:
case RequestType::ReverseSlider: case RequestType::ReverseSlider:
data_component = CreateSlider(request == RequestType::ReverseSlider, multiplier, string, data_component = CreateSlider(request == RequestType::ReverseSlider, multiplier, suffix,
serializer, restore_func, touch); serializer, restore_func, touch);
break; break;
case RequestType::Default: case RequestType::Default:
@ -434,7 +455,7 @@ void Widget::SetupComponent(const QString& label, std::function<void()>& load_fu
serializer, restore_func, touch); serializer, restore_func, touch);
break; break;
case RequestType::SpinBox: case RequestType::SpinBox:
data_component = CreateSpinBox(string, serializer, restore_func, touch); data_component = CreateSpinBox(suffix, serializer, restore_func, touch);
break; break;
case RequestType::HexEdit: case RequestType::HexEdit:
data_component = CreateHexEdit(serializer, restore_func, touch); data_component = CreateHexEdit(serializer, restore_func, touch);
@ -527,7 +548,7 @@ Widget::Widget(Settings::BasicSetting* setting_, const TranslationMap& translati
const ComboboxTranslationMap& combobox_translations_, QWidget* parent_, const ComboboxTranslationMap& combobox_translations_, QWidget* parent_,
bool runtime_lock_, std::forward_list<std::function<void(bool)>>& apply_funcs_, bool runtime_lock_, std::forward_list<std::function<void(bool)>>& apply_funcs_,
RequestType request, bool managed, float multiplier, RequestType request, bool managed, float multiplier,
Settings::BasicSetting* other_setting, const QString& string) Settings::BasicSetting* other_setting, const QString& suffix)
: QWidget(parent_), parent{parent_}, translations{translations_}, : QWidget(parent_), parent{parent_}, translations{translations_},
combobox_enumerations{combobox_translations_}, setting{*setting_}, apply_funcs{apply_funcs_}, combobox_enumerations{combobox_translations_}, setting{*setting_}, apply_funcs{apply_funcs_},
runtime_lock{runtime_lock_} { runtime_lock{runtime_lock_} {
@ -555,7 +576,7 @@ Widget::Widget(Settings::BasicSetting* setting_, const TranslationMap& translati
std::function<void()> load_func = []() {}; std::function<void()> load_func = []() {};
SetupComponent(label, load_func, managed, request, multiplier, other_setting, string); SetupComponent(label, load_func, managed, request, multiplier, other_setting, suffix);
if (!created) { if (!created) {
LOG_WARNING(Frontend, "No widget was created for \"{}\"", setting.GetLabel()); LOG_WARNING(Frontend, "No widget was created for \"{}\"", setting.GetLabel());
@ -587,7 +608,7 @@ Builder::~Builder() = default;
Widget* Builder::BuildWidget(Settings::BasicSetting* setting, Widget* Builder::BuildWidget(Settings::BasicSetting* setting,
std::forward_list<std::function<void(bool)>>& apply_funcs, std::forward_list<std::function<void(bool)>>& apply_funcs,
RequestType request, bool managed, float multiplier, RequestType request, bool managed, float multiplier,
Settings::BasicSetting* other_setting, const QString& string) const { Settings::BasicSetting* other_setting, const QString& suffix) const {
if (!Settings::IsConfiguringGlobal() && !setting->Switchable()) { if (!Settings::IsConfiguringGlobal() && !setting->Switchable()) {
return nullptr; return nullptr;
} }
@ -598,14 +619,14 @@ Widget* Builder::BuildWidget(Settings::BasicSetting* setting,
} }
return new Widget(setting, *translations, *combobox_translations, parent, runtime_lock, return new Widget(setting, *translations, *combobox_translations, parent, runtime_lock,
apply_funcs, request, managed, multiplier, other_setting, string); apply_funcs, request, managed, multiplier, other_setting, suffix);
} }
Widget* Builder::BuildWidget(Settings::BasicSetting* setting, Widget* Builder::BuildWidget(Settings::BasicSetting* setting,
std::forward_list<std::function<void(bool)>>& apply_funcs, std::forward_list<std::function<void(bool)>>& apply_funcs,
Settings::BasicSetting* other_setting, RequestType request, Settings::BasicSetting* other_setting, RequestType request,
const QString& string) const { const QString& suffix) const {
return BuildWidget(setting, apply_funcs, request, true, 1.0f, other_setting, string); return BuildWidget(setting, apply_funcs, request, true, 1.0f, other_setting, suffix);
} }
const ComboboxTranslationMap& Builder::ComboboxTranslations() const { const ComboboxTranslationMap& Builder::ComboboxTranslations() const {

View File

@ -58,14 +58,14 @@ public:
* @param managed Set true if the caller will set up component data and handling * @param managed Set true if the caller will set up component data and handling
* @param multiplier Value to multiply the slider feedback label * @param multiplier Value to multiply the slider feedback label
* @param other_setting Second setting to modify, to replace the label with a checkbox * @param other_setting Second setting to modify, to replace the label with a checkbox
* @param string Set to specify formats for Slider feedback labels or SpinBox * @param suffix Set to specify formats for Slider feedback labels or SpinBox
*/ */
explicit Widget(Settings::BasicSetting* setting, const TranslationMap& translations, explicit Widget(Settings::BasicSetting* setting, const TranslationMap& translations,
const ComboboxTranslationMap& combobox_translations, QWidget* parent, const ComboboxTranslationMap& combobox_translations, QWidget* parent,
bool runtime_lock, std::forward_list<std::function<void(bool)>>& apply_funcs_, bool runtime_lock, std::forward_list<std::function<void(bool)>>& apply_funcs_,
RequestType request = RequestType::Default, bool managed = true, RequestType request = RequestType::Default, bool managed = true,
float multiplier = 1.0f, Settings::BasicSetting* other_setting = nullptr, float multiplier = 1.0f, Settings::BasicSetting* other_setting = nullptr,
const QString& string = QStringLiteral("")); const QString& suffix = QStringLiteral(""));
virtual ~Widget(); virtual ~Widget();
/** /**
@ -95,7 +95,7 @@ public:
private: private:
void SetupComponent(const QString& label, std::function<void()>& load_func, bool managed, void SetupComponent(const QString& label, std::function<void()>& load_func, bool managed,
RequestType request, float multiplier, RequestType request, float multiplier,
Settings::BasicSetting* other_setting, const QString& string); Settings::BasicSetting* other_setting, const QString& suffix);
QLabel* CreateLabel(const QString& text); QLabel* CreateLabel(const QString& text);
QWidget* CreateCheckBox(Settings::BasicSetting* bool_setting, const QString& label, QWidget* CreateCheckBox(Settings::BasicSetting* bool_setting, const QString& label,
@ -111,7 +111,7 @@ private:
bool managed = true); bool managed = true);
QWidget* CreateHexEdit(std::function<std::string()>& serializer, QWidget* CreateHexEdit(std::function<std::string()>& serializer,
std::function<void()>& restore_func, const std::function<void()>& touch); std::function<void()>& restore_func, const std::function<void()>& touch);
QWidget* CreateSlider(bool reversed, float multiplier, const QString& format, QWidget* CreateSlider(bool reversed, float multiplier, const QString& suffix,
std::function<std::string()>& serializer, std::function<std::string()>& serializer,
std::function<void()>& restore_func, const std::function<void()>& touch); std::function<void()>& restore_func, const std::function<void()>& touch);
QWidget* CreateDateTimeEdit(bool disabled, bool restrict, QWidget* CreateDateTimeEdit(bool disabled, bool restrict,
@ -140,13 +140,13 @@ public:
std::forward_list<std::function<void(bool)>>& apply_funcs, std::forward_list<std::function<void(bool)>>& apply_funcs,
RequestType request = RequestType::Default, bool managed = true, RequestType request = RequestType::Default, bool managed = true,
float multiplier = 1.0f, Settings::BasicSetting* other_setting = nullptr, float multiplier = 1.0f, Settings::BasicSetting* other_setting = nullptr,
const QString& string = QStringLiteral("")) const; const QString& suffix = QStringLiteral("")) const;
Widget* BuildWidget(Settings::BasicSetting* setting, Widget* BuildWidget(Settings::BasicSetting* setting,
std::forward_list<std::function<void(bool)>>& apply_funcs, std::forward_list<std::function<void(bool)>>& apply_funcs,
Settings::BasicSetting* other_setting, Settings::BasicSetting* other_setting,
RequestType request = RequestType::Default, RequestType request = RequestType::Default,
const QString& string = QStringLiteral("")) const; const QString& suffix = QStringLiteral("")) const;
const ComboboxTranslationMap& ComboboxTranslations() const; const ComboboxTranslationMap& ComboboxTranslations() const;