diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index f62ec4de..4dc6dbb6 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -31,6 +31,7 @@ AdvSceneSwitcher.generalTab.generalBehavior.saveWindowGeo="Save window position AdvSceneSwitcher.generalTab.generalBehavior.showTrayNotifications="Show system tray notifications" AdvSceneSwitcher.generalTab.generalBehavior.disableUIHints="Disable UI hints" AdvSceneSwitcher.generalTab.generalBehavior.verticalMacroControls="Use permanent vertical controls on Macro tab" +AdvSceneSwitcher.generalTab.generalBehavior.hideLegacyTabs="Hide tabs which can be represented via macros" AdvSceneSwitcher.generalTab.priority="Priority" AdvSceneSwitcher.generalTab.priority.description="Switching methods priority (Highest priority is at the top)" AdvSceneSwitcher.generalTab.priority.threadPriority="Use thread priority" diff --git a/forms/advanced-scene-switcher.ui b/forms/advanced-scene-switcher.ui index 998d9091..df48295f 100644 --- a/forms/advanced-scene-switcher.ui +++ b/forms/advanced-scene-switcher.ui @@ -349,6 +349,30 @@ + + + + + + AdvSceneSwitcher.generalTab.generalBehavior.hideLegacyTabs + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + diff --git a/src/general.cpp b/src/general.cpp index ad79a158..97fd066c 100644 --- a/src/general.cpp +++ b/src/general.cpp @@ -202,6 +202,48 @@ void AdvSceneSwitcher::on_useVerticalMacroControls_stateChanged(int state) setupMacroTab(); } +bool isLegacyTab(const QString &name) +{ + return name == obs_module_text( + "AdvSceneSwitcher.transitionTab.title") || + name == obs_module_text( + "AdvSceneSwitcher.windowTitleTab.title") || + name == obs_module_text( + "AdvSceneSwitcher.executableTab.title") || + name == obs_module_text( + "AdvSceneSwitcher.screenRegionTab.title") || + name == obs_module_text("AdvSceneSwitcher.mediaTab.title") || + name == obs_module_text("AdvSceneSwitcher.fileTab.title") || + name == obs_module_text("AdvSceneSwitcher.randomTab.title") || + name == obs_module_text("AdvSceneSwitcher.timeTab.title") || + name == obs_module_text("AdvSceneSwitcher.idleTab.title") || + name == obs_module_text( + "AdvSceneSwitcher.sceneSequenceTab.title") || + name == obs_module_text("AdvSceneSwitcher.audioTab.title") || + name == obs_module_text("AdvSceneSwitcher.videoTab.title") || + name == obs_module_text("AdvSceneSwitcher.pauseTab.title") || + name == obs_module_text( + "AdvSceneSwitcher.sceneTriggerTab.title"); +} + +void AdvSceneSwitcher::on_hideLegacyTabs_stateChanged(int state) +{ + switcher->hideLegacyTabs = state; + + for (int idx = 0; idx < ui->tabWidget->count(); idx++) { + if (isLegacyTab(ui->tabWidget->tabText(idx))) { +#if defined(_WIN32) || defined(__APPLE__) + ui->tabWidget->setTabVisible(idx, !state); +#else + // TODO: Switch to setTabVisible() once QT 5.15 is more wide spread + ui->tabWidget->setTabEnabled(idx, !state); + ui->tabWidget->setStyleSheet( + "QTabBar::tab::disabled {width: 0; height: 0; margin: 0; padding: 0; border: none;} "); +#endif + } + } +} + QString getDefaultSaveLocation() { QString desktopPath = QStandardPaths::writableLocation( @@ -523,6 +565,7 @@ void SwitcherData::saveGeneralSettings(obs_data_t *obj) obs_data_set_bool(obj, "disableHints", disableHints); obs_data_set_bool(obj, "useVerticalMacroControls", useVerticalMacroControls); + obs_data_set_bool(obj, "hideLegacyTabs", hideLegacyTabs); obs_data_set_int(obj, "priority0", functionNamesByPriority[0]); obs_data_set_int(obj, "priority1", functionNamesByPriority[1]); @@ -598,6 +641,7 @@ void SwitcherData::loadGeneralSettings(obs_data_t *obj) disableHints = obs_data_get_bool(obj, "disableHints"); useVerticalMacroControls = obs_data_get_bool(obj, "useVerticalMacroControls"); + hideLegacyTabs = obs_data_get_bool(obj, "hideLegacyTabs"); obs_data_set_default_int(obj, "priority0", default_priority_0); obs_data_set_default_int(obj, "priority1", default_priority_1); @@ -813,6 +857,7 @@ void AdvSceneSwitcher::setupGeneralTab() ui->uiHintsDisable->setChecked(switcher->disableHints); ui->useVerticalMacroControls->setChecked( switcher->useVerticalMacroControls); + ui->hideLegacyTabs->setChecked(switcher->hideLegacyTabs); for (int p : switcher->functionNamesByPriority) { std::string s = ""; diff --git a/src/headers/advanced-scene-switcher.hpp b/src/headers/advanced-scene-switcher.hpp index 92b2d517..0c1053a0 100644 --- a/src/headers/advanced-scene-switcher.hpp +++ b/src/headers/advanced-scene-switcher.hpp @@ -171,6 +171,7 @@ public slots: void on_showTrayNotifications_stateChanged(int state); void on_uiHintsDisable_stateChanged(int state); void on_useVerticalMacroControls_stateChanged(int state); + void on_hideLegacyTabs_stateChanged(int state); void on_exportSettings_clicked(); void on_importSettings_clicked(); diff --git a/src/headers/switcher-data-structs.hpp b/src/headers/switcher-data-structs.hpp index 77afb296..7d0dd368 100644 --- a/src/headers/switcher-data-structs.hpp +++ b/src/headers/switcher-data-structs.hpp @@ -87,6 +87,7 @@ struct SwitcherData { bool verbose = false; bool disableHints = false; bool useVerticalMacroControls = false; + bool hideLegacyTabs = false; bool showSystemTrayNotifications = false; bool showFrame = false; bool transitionOverrideOverride = false;