From 8c478cc330aeed29e59f83cc8f6eec5d93c143e8 Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Mon, 25 Mar 2024 19:14:16 +0100 Subject: [PATCH] Add control description to source selection --- data/locale/en-US.ini | 19 ++++++- plugins/base/utils/source-setting.cpp | 82 +++++++++++++++++++++------ 2 files changed, 82 insertions(+), 19 deletions(-) diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 50103adc..34fc7e26 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -1689,10 +1689,27 @@ AdvSceneSwitcher.enterText="--enter text--" AdvSceneSwitcher.enterURL="--enter URL--" AdvSceneSwitcher.selectHotkey="--select hotkey--" AdvSceneSwitcher.selectDisplay="--select display--" -AdvSceneSwitcher.selectSetting="--select setting--" AdvSceneSwitcher.invaildEntriesWillNotBeSaved="invalid entries will not be saved" AdvSceneSwitcher.selectWindowTip="Use \"OBS\" to specify OBS window\nUse \"Task Switching\"to specify ALT + TAB" +AdvSceneSwitcher.settings.suffix.type.invalid=" (Invalid)" +AdvSceneSwitcher.settings.suffix.type.bool=" (Bool)" +AdvSceneSwitcher.settings.suffix.type.int=" (Int)" +AdvSceneSwitcher.settings.suffix.type.float=" (Float)" +AdvSceneSwitcher.settings.suffix.type.text=" (Text)" +AdvSceneSwitcher.settings.suffix.type.path=" (Path)" +AdvSceneSwitcher.settings.suffix.type.list=" (List)" +AdvSceneSwitcher.settings.suffix.type.color=" (Color)" +AdvSceneSwitcher.settings.suffix.type.button=" (Button)" +AdvSceneSwitcher.settings.suffix.type.font=" (Font)" +AdvSceneSwitcher.settings.suffix.type.font=" (Font)" +AdvSceneSwitcher.settings.suffix.type.editableList=" (Editable list)" +AdvSceneSwitcher.settings.suffix.type.frameRate=" (Frame rate)" +AdvSceneSwitcher.settings.suffix.type.group=" (Group)" +AdvSceneSwitcher.settings.suffix.type.colorAlpha=" (Color alpha)" +AdvSceneSwitcher.setting.select="--select setting--" + + AdvSceneSwitcher.sceneItemSelection.configure="Configure scene item selection type" AdvSceneSwitcher.sceneItemSelection.type.sourceName="Source name" AdvSceneSwitcher.sceneItemSelection.type.sourceName.entry="{{nameConflictIndex}}{{sourceName}}" diff --git a/plugins/base/utils/source-setting.cpp b/plugins/base/utils/source-setting.cpp index 7aedb5ab..66d052b8 100644 --- a/plugins/base/utils/source-setting.cpp +++ b/plugins/base/utils/source-setting.cpp @@ -42,6 +42,68 @@ bool SourceSetting::operator==(const SourceSetting &other) const return _id == other._id; } +static const char *getPropertySuffix(obs_property_type type) +{ + switch (type) { + case OBS_PROPERTY_INVALID: + return "AdvSceneSwitcher.settings.suffix.type.invalid"; + case OBS_PROPERTY_BOOL: + return "AdvSceneSwitcher.settings.suffix.type.bool"; + case OBS_PROPERTY_INT: + return "AdvSceneSwitcher.settings.suffix.type.int"; + case OBS_PROPERTY_FLOAT: + return "AdvSceneSwitcher.settings.suffix.type.float"; + case OBS_PROPERTY_TEXT: + return "AdvSceneSwitcher.settings.suffix.type.text"; + case OBS_PROPERTY_PATH: + return "AdvSceneSwitcher.settings.suffix.type.path"; + case OBS_PROPERTY_LIST: + return "AdvSceneSwitcher.settings.suffix.type.list"; + case OBS_PROPERTY_COLOR: + return "AdvSceneSwitcher.settings.suffix.type.color"; + case OBS_PROPERTY_BUTTON: + return "AdvSceneSwitcher.settings.suffix.type.button"; + case OBS_PROPERTY_FONT: + return "AdvSceneSwitcher.settings.suffix.type.font"; + case OBS_PROPERTY_EDITABLE_LIST: + return "AdvSceneSwitcher.settings.suffix.type.editableList"; + case OBS_PROPERTY_FRAME_RATE: + return "AdvSceneSwitcher.settings.suffix.type.frameRate"; + case OBS_PROPERTY_GROUP: + return "AdvSceneSwitcher.settings.suffix.type.group"; + case OBS_PROPERTY_COLOR_ALPHA: + return "AdvSceneSwitcher.settings.suffix.type.colorAlpha"; + } + return ""; +} + +static void addSettingsHelper(obs_property_t *property, + std::vector &settings) +{ + do { + if (!property) { + continue; + } + auto type = obs_property_get_type(property); + + auto name = obs_property_name(property); + if (!name) { + continue; + } + auto description = obs_property_description(property); + if (!description) { + continue; + } + std::string descriptionWithSuffix = + std::string(description) + + obs_module_text(getPropertySuffix(type)); + auto longDescription = obs_property_long_description(property); + SourceSetting setting(name, descriptionWithSuffix, + longDescription ? longDescription : ""); + settings.emplace_back(setting); + } while (obs_property_next(&property)); +} + std::vector GetSoruceSettings(obs_source_t *source) { auto properties = obs_source_properties(source); @@ -50,23 +112,7 @@ std::vector GetSoruceSettings(obs_source_t *source) } std::vector settings; auto it = obs_properties_first(properties); - do { - if (!it) { - continue; - } - auto name = obs_property_name(it); - if (!name) { - continue; - } - auto description = obs_property_description(it); - if (!description) { - continue; - } - auto longDescription = obs_property_long_description(it); - SourceSetting setting(name, description, - longDescription ? longDescription : ""); - settings.emplace_back(setting); - } while (obs_property_next(&it)); + addSettingsHelper(it, settings); obs_properties_destroy(properties); return settings; } @@ -174,7 +220,7 @@ void SetSourceSetting(obs_source_t *source, const SourceSetting &setting, SourceSettingSelection::SourceSettingSelection(QWidget *parent) : QWidget(parent), _settings(new FilterComboBox( - this, obs_module_text("AdvSceneSwitcher.selectSetting"))), + this, obs_module_text("AdvSceneSwitcher.setting.select"))), _tooltip(new QLabel()) { QString path = GetThemeTypeName() == "Light"