diff --git a/source/frontend/pluginlist/pluginlistdialog.cpp b/source/frontend/pluginlist/pluginlistdialog.cpp index 3d5a20ac9..3847699d8 100644 --- a/source/frontend/pluginlist/pluginlistdialog.cpp +++ b/source/frontend/pluginlist/pluginlistdialog.cpp @@ -1178,7 +1178,9 @@ void PluginListDialog::showEvent(QShowEvent* const event) p->discovery.dialog->ch_updated->setChecked(true); p->discovery.dialog->ch_invalid->setChecked(false); p->discovery.dialog->group->setEnabled(false); + p->discovery.dialog->group_formats->hide(); p->discovery.dialog->progressBar->setFormat("Starting initial discovery..."); + p->discovery.dialog->adjustSize(); QObject::connect(p->discovery.dialog->b_skip, &QPushButton::clicked, this, &PluginListDialog::refreshPluginsSkip); @@ -1221,73 +1223,109 @@ void PluginListDialog::timerEvent(QTimerEvent* const event) } [[fallthrough]]; case PLUGIN_INTERNAL: - ui.label->setText(tr("Discovering LADSPA plugins...")); - path = p->paths.ladspa; - p->discovery.ptype = PLUGIN_LADSPA; - break; + if (p->discovery.dialog->ch_ladspa->isChecked() || !p->discovery.dialog->group_formats->isVisible()) + { + ui.label->setText(tr("Discovering LADSPA plugins...")); + path = p->paths.ladspa; + p->discovery.ptype = PLUGIN_LADSPA; + break; + } + [[fallthrough]]; case PLUGIN_LADSPA: - ui.label->setText(tr("Discovering DSSI plugins...")); - path = p->paths.dssi; - p->discovery.ptype = PLUGIN_DSSI; - break; + if (p->discovery.dialog->ch_dssi->isChecked() || !p->discovery.dialog->group_formats->isVisible()) + { + ui.label->setText(tr("Discovering DSSI plugins...")); + path = p->paths.dssi; + p->discovery.ptype = PLUGIN_DSSI; + break; + } + [[fallthrough]]; case PLUGIN_DSSI: #endif - if (p->discovery.btype == BINARY_NATIVE && p->paths.lv2.isNotEmpty()) + if (p->discovery.dialog->ch_lv2->isChecked() || !p->discovery.dialog->group_formats->isVisible()) { - ui.label->setText(tr("Discovering LV2 plugins...")); - path = p->paths.lv2; - p->discovery.ptype = PLUGIN_LV2; - break; + if (p->discovery.btype == BINARY_NATIVE && p->paths.lv2.isNotEmpty()) + { + ui.label->setText(tr("Discovering LV2 plugins...")); + path = p->paths.lv2; + p->discovery.ptype = PLUGIN_LV2; + break; + } } [[fallthrough]]; case PLUGIN_LV2: - ui.label->setText(tr("Discovering VST2 plugins...")); - path = p->paths.vst2; - p->discovery.ptype = PLUGIN_VST2; - break; + if (p->discovery.dialog->ch_vst2->isChecked() || !p->discovery.dialog->group_formats->isVisible()) + { + ui.label->setText(tr("Discovering VST2 plugins...")); + path = p->paths.vst2; + p->discovery.ptype = PLUGIN_VST2; + break; + } + [[fallthrough]]; case PLUGIN_VST2: - ui.label->setText(tr("Discovering VST3 plugins...")); - path = p->paths.vst3; - p->discovery.ptype = PLUGIN_VST3; - break; + if (p->discovery.dialog->ch_vst3->isChecked() || !p->discovery.dialog->group_formats->isVisible()) + { + ui.label->setText(tr("Discovering VST3 plugins...")); + path = p->paths.vst3; + p->discovery.ptype = PLUGIN_VST3; + break; + } + [[fallthrough]]; case PLUGIN_VST3: - ui.label->setText(tr("Discovering CLAP plugins...")); - path = p->paths.clap; - p->discovery.ptype = PLUGIN_CLAP; - break; + if (p->discovery.dialog->ch_clap->isChecked() || !p->discovery.dialog->group_formats->isVisible()) + { + ui.label->setText(tr("Discovering CLAP plugins...")); + path = p->paths.clap; + p->discovery.ptype = PLUGIN_CLAP; + break; + } + [[fallthrough]]; case PLUGIN_CLAP: #ifdef CARLA_OS_MAC - ui.label->setText(tr("Discovering AU plugins...")); - path = p->paths.au; - p->discovery.ptype = PLUGIN_AU; - break; + if (p->discovery.dialog->ch_au->isChecked() || !p->discovery.dialog->group_formats->isVisible()) + { + ui.label->setText(tr("Discovering AU plugins...")); + path = p->paths.au; + p->discovery.ptype = PLUGIN_AU; + break; + } + [[fallthrough]]; case PLUGIN_AU: #endif #ifndef CARLA_FRONTEND_ONLY_EMBEDDABLE_PLUGINS - if (p->discovery.btype == BINARY_NATIVE && p->paths.jsfx.isNotEmpty()) + if (p->discovery.dialog->ch_jsfx->isChecked() || !p->discovery.dialog->group_formats->isVisible()) { - ui.label->setText(tr("Discovering JSFX plugins...")); - path = p->paths.jsfx; - p->discovery.ptype = PLUGIN_JSFX; - break; + if (p->discovery.btype == BINARY_NATIVE && p->paths.jsfx.isNotEmpty()) + { + ui.label->setText(tr("Discovering JSFX plugins...")); + path = p->paths.jsfx; + p->discovery.ptype = PLUGIN_JSFX; + break; + } } [[fallthrough]]; case PLUGIN_JSFX: - if (p->discovery.btype == BINARY_NATIVE && p->paths.sf2.isNotEmpty()) + if (p->discovery.dialog->ch_sf2->isChecked() || !p->discovery.dialog->group_formats->isVisible()) { - ui.label->setText(tr("Discovering SF2 kits...")); - path = p->paths.sf2; - p->discovery.ptype = PLUGIN_SF2; - break; + if (p->discovery.btype == BINARY_NATIVE && p->paths.sf2.isNotEmpty()) + { + ui.label->setText(tr("Discovering SF2 kits...")); + path = p->paths.sf2; + p->discovery.ptype = PLUGIN_SF2; + break; + } } [[fallthrough]]; case PLUGIN_SF2: - if (p->discovery.btype == BINARY_NATIVE && p->paths.sfz.isNotEmpty()) + if (p->discovery.dialog->ch_sfz->isChecked() || !p->discovery.dialog->group_formats->isVisible()) { - ui.label->setText(tr("Discovering SFZ kits...")); - path = p->paths.sfz; - p->discovery.ptype = PLUGIN_SFZ; - break; + if (p->discovery.btype == BINARY_NATIVE && p->paths.sfz.isNotEmpty()) + { + ui.label->setText(tr("Discovering SFZ kits...")); + path = p->paths.sfz; + p->discovery.ptype = PLUGIN_SFZ; + break; + } } [[fallthrough]]; case PLUGIN_SFZ: @@ -1306,7 +1344,7 @@ void PluginListDialog::timerEvent(QTimerEvent* const event) if (p->timerId == 0) break; - if (p->discovery.dialog) + if (p->discovery.dialog != nullptr) p->discovery.dialog->progressBar->setFormat(ui.label->text()); p->discovery.handle = carla_plugin_discovery_start(p->discovery.tool.toUtf8().constData(), diff --git a/source/frontend/pluginlist/pluginrefreshdialog.hpp b/source/frontend/pluginlist/pluginrefreshdialog.hpp index ce7c34baf..5a637d4b9 100644 --- a/source/frontend/pluginlist/pluginrefreshdialog.hpp +++ b/source/frontend/pluginlist/pluginrefreshdialog.hpp @@ -14,8 +14,11 @@ // Plugin Refresh Dialog struct PluginRefreshDialog : QDialog, Ui_PluginRefreshDialog { - explicit PluginRefreshDialog(QWidget* const parent) - : QDialog(parent) + const bool _firstInit; + + explicit PluginRefreshDialog(QWidget* const parent, bool firstInit = false) + : QDialog(parent), + _firstInit(firstInit) { setupUi(this); @@ -27,6 +30,9 @@ struct PluginRefreshDialog : QDialog, Ui_PluginRefreshDialog { b_skip->setEnabled(false); ch_invalid->setEnabled(false); + if (_firstInit) + return; + // ------------------------------------------------------------------------------------------------------------ // Load settings @@ -41,6 +47,18 @@ struct PluginRefreshDialog : QDialog, Ui_PluginRefreshDialog { ch_updated->setChecked(true); ch_invalid->setChecked(settings.valueBool("PluginRefreshDialog/CheckInvalid", false)); + + group_formats->setChecked(settings.valueBool("PluginRefreshDialog/RestrictFormats", false)); + ch_ladspa->setChecked(settings.valueBool("PluginRefreshDialog/SearchLADSPA", true)); + ch_dssi->setChecked(settings.valueBool("PluginRefreshDialog/SearchDSSI", true)); + ch_lv2->setChecked(settings.valueBool("PluginRefreshDialog/SearchLV2", true)); + ch_vst2->setChecked(settings.valueBool("PluginRefreshDialog/SearchVST2", true)); + ch_vst3->setChecked(settings.valueBool("PluginRefreshDialog/SearchVST3", true)); + ch_clap->setChecked(settings.valueBool("PluginRefreshDialog/SearchCLAP", true)); + ch_au->setChecked(settings.valueBool("PluginRefreshDialog/SearchAU", true)); + ch_jsfx->setChecked(settings.valueBool("PluginRefreshDialog/SearchJSFX", true)); + ch_sf2->setChecked(settings.valueBool("PluginRefreshDialog/SearchSF2", true)); + ch_sfz->setChecked(settings.valueBool("PluginRefreshDialog/SearchSFZ", true)); } // ------------------------------------------------------------------------------------------------------------ @@ -55,10 +73,24 @@ struct PluginRefreshDialog : QDialog, Ui_PluginRefreshDialog { private Q_SLOTS: void saveSettings() { + if (_firstInit) + return; + QSafeSettings settings; settings.setValue("PluginRefreshDialog/Geometry", saveGeometry()); settings.setValue("PluginRefreshDialog/RefreshAll", ch_all->isChecked()); settings.setValue("PluginRefreshDialog/CheckInvalid", ch_invalid->isChecked()); + settings.setValue("PluginRefreshDialog/RestrictFormats", group_formats->isChecked()); + settings.setValue("PluginRefreshDialog/SearchLADSPA", ch_ladspa->isChecked()); + settings.setValue("PluginRefreshDialog/SearchDSSI", ch_dssi->isChecked()); + settings.setValue("PluginRefreshDialog/SearchLV2", ch_lv2->isChecked()); + settings.setValue("PluginRefreshDialog/SearchVST2", ch_vst2->isChecked()); + settings.setValue("PluginRefreshDialog/SearchVST3", ch_vst3->isChecked()); + settings.setValue("PluginRefreshDialog/SearchCLAP", ch_clap->isChecked()); + settings.setValue("PluginRefreshDialog/SearchAU", ch_au->isChecked()); + settings.setValue("PluginRefreshDialog/SearchJSFX", ch_jsfx->isChecked()); + settings.setValue("PluginRefreshDialog/SearchSF2", ch_sf2->isChecked()); + settings.setValue("PluginRefreshDialog/SearchSFZ", ch_sfz->isChecked()); } }; diff --git a/source/frontend/pluginlist/pluginrefreshdialog.ui b/source/frontend/pluginlist/pluginrefreshdialog.ui index b25da3c7d..a2c299f3c 100644 --- a/source/frontend/pluginlist/pluginrefreshdialog.ui +++ b/source/frontend/pluginlist/pluginrefreshdialog.ui @@ -6,14 +6,14 @@ 0 0 - 873 - 179 + 375 + 430 Plugin Refresh - + @@ -100,6 +100,152 @@ + + + + Restrict search formats + + + Qt::AlignCenter + + + true + + + + + + JSFX + + + + + + + AU + + + + + + + Qt::Horizontal + + + QSizePolicy::MinimumExpanding + + + + 120 + 1 + + + + + + + + SF2/3 + + + + + + + DSSI + + + + + + + CLAP + + + + + + + LV2 + + + + + + + VST3 + + + + + + + Qt::Horizontal + + + QSizePolicy::MinimumExpanding + + + + 120 + 1 + + + + + + + + LADSPA + + + + + + + SFZ + + + + + + + VST2 + + + + + + + Qt::Horizontal + + + QSizePolicy::MinimumExpanding + + + + 120 + 1 + + + + + + + + + + + Qt::Vertical + + + + 20 + 0 + + + +