From 7786a75feef8f012e9a403bb83319f2d306fe3df Mon Sep 17 00:00:00 2001 From: Mikaƫl Capelle Date: Wed, 30 Sep 2020 19:57:54 +0200 Subject: Make filter work and reorganize layout with QSplitters. --- src/settingsdialog.ui | 271 ++++++++++++++++++++++++------------------ src/settingsdialogplugins.cpp | 61 ++++++---- src/settingsdialogplugins.h | 9 ++ 3 files changed, 205 insertions(+), 136 deletions(-) diff --git a/src/settingsdialog.ui b/src/settingsdialog.ui index 67df1ec9..05a648de 100644 --- a/src/settingsdialog.ui +++ b/src/settingsdialog.ui @@ -6,8 +6,8 @@ 0 0 - 586 - 491 + 820 + 652 @@ -1038,130 +1038,172 @@ Plugins - + - - - + + + Qt::Vertical + + + 2 + + + + + 0 + 4 + + + - - - - 1 - - + + + + 0 + 0 + + + + Qt::Horizontal + + + 2 + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + Author: + + + + + + + + + + + + + + Version: + + + + + + + + + + + + + + + + + true + + + + + + + Description: + + + + + + + + + 0 + + + false + + + false + + + false + + + false + + + 170 + + + + Key + + + + + Value + + + + + + - - - - - - - - - - - - - - - - - - - - Author: - - - - - - - - - - - - - - Version: - - - - - - - - - - - - - - Description: - - - - - - - - - - true - - - - - + + + + + 0 + 1 + + + - - - 0 - - - false - - - false - - - false + + + Blacklisted Plugins (use <del> to remove): - - false - - - 170 - - - - Key - - - - - Value - - + + + - - - - - - - Blacklisted Plugins (use <del> to remove): - + - - - @@ -1625,7 +1667,6 @@ programs you are intentionally running. steamUserEdit steamPassEdit pluginSettingsList - pluginBlacklist appIDEdit mechanismBox hideUncheckedBox diff --git a/src/settingsdialogplugins.cpp b/src/settingsdialogplugins.cpp index e13f727e..75344ecf 100644 --- a/src/settingsdialogplugins.cpp +++ b/src/settingsdialogplugins.cpp @@ -8,16 +8,39 @@ using MOBase::IPlugin; PluginsSettingsTab::PluginsSettingsTab(Settings& s, PluginContainer* pluginContainer, SettingsDialog& d) - : SettingsTab(s, d) + : SettingsTab(s, d), m_pluginContainer(pluginContainer) { ui->pluginSettingsList->setStyleSheet("QTreeWidget::item {padding-right: 10px;}"); + populatePluginList(); + + // display plugin blacklist + for (const QString &pluginName : settings().plugins().blacklist()) { + ui->pluginBlacklist->addItem(pluginName); + } + + m_filter.setEdit(ui->pluginFilterEdit); + + QObject::connect( + ui->pluginsList, &QTreeWidget::currentItemChanged, + [&](auto* current, auto* previous) { on_pluginsList_currentItemChanged(current, previous); }); + + QShortcut *delShortcut = new QShortcut( + QKeySequence(Qt::Key_Delete), ui->pluginBlacklist); + QObject::connect(delShortcut, &QShortcut::activated, &dialog(), [&] { deleteBlacklistItem(); }); + QObject::connect(&m_filter, &MOBase::FilterWidget::changed, [&] { populatePluginList(); }); +} + +void PluginsSettingsTab::populatePluginList() +{ + ui->pluginsList->clear(); + // Create top-level tree widget: - QStringList pluginInterfaces = pluginContainer->pluginInterfaces(); + QStringList pluginInterfaces = m_pluginContainer->pluginInterfaces(); pluginInterfaces.sort(Qt::CaseInsensitive); std::map topItems; for (QString interfaceName : pluginInterfaces) { - auto *item = new QTreeWidgetItem(ui->pluginsList, { interfaceName }); + auto* item = new QTreeWidgetItem(ui->pluginsList, { interfaceName }); item->setFlags(item->flags() & ~Qt::ItemIsSelectable); auto font = item->font(0); font.setBold(true); @@ -29,11 +52,17 @@ PluginsSettingsTab::PluginsSettingsTab(Settings& s, PluginContainer* pluginConta // display plugin settings QSet handledNames; - for (IPlugin *plugin : settings().plugins().plugins()) { - if (handledNames.contains(plugin->name())) + for (IPlugin* plugin : settings().plugins().plugins()) { + if (handledNames.contains(plugin->name())) { continue; + } + if (!m_filter.matches([plugin](const QRegularExpression& regex) { + return regex.match(plugin->localizedName()).hasMatch(); + })) { + continue; + } QTreeWidgetItem* listItem = new QTreeWidgetItem( - topItems.at(pluginContainer->topImplementedInterface(plugin))); + topItems.at(m_pluginContainer->topImplementedInterface(plugin))); listItem->setData(0, Qt::DisplayRole, plugin->localizedName()); listItem->setData(0, ROLE_PLUGIN, QVariant::fromValue((void*)plugin)); listItem->setData(0, ROLE_SETTINGS, settings().plugins().settings(plugin->name())); @@ -46,23 +75,13 @@ PluginsSettingsTab::PluginsSettingsTab(Settings& s, PluginContainer* pluginConta handledNames.insert(plugin->name()); } - ui->pluginsList->sortByColumn(0, Qt::AscendingOrder); - - // display plugin blacklist - for (const QString &pluginName : settings().plugins().blacklist()) { - ui->pluginBlacklist->addItem(pluginName); + for (auto& [k, item] : topItems) { + if (item->childCount() == 0) { + item->setHidden(true); + } } - m_filter.setEdit(ui->pluginFilterEdit); - m_filter.setList(ui->pluginsList); - - QObject::connect( - ui->pluginsList, &QTreeWidget::currentItemChanged, - [&](auto* current, auto* previous) { on_pluginsList_currentItemChanged(current, previous); }); - - QShortcut *delShortcut = new QShortcut( - QKeySequence(Qt::Key_Delete), ui->pluginBlacklist); - QObject::connect(delShortcut, &QShortcut::activated, &dialog(), [&]{ deleteBlacklistItem(); }); + ui->pluginsList->sortByColumn(0, Qt::AscendingOrder); } IPlugin* PluginsSettingsTab::plugin(QTreeWidgetItem* pluginItem) const diff --git a/src/settingsdialogplugins.h b/src/settingsdialogplugins.h index e284b271..a09c34f1 100644 --- a/src/settingsdialogplugins.h +++ b/src/settingsdialogplugins.h @@ -19,6 +19,13 @@ private: void deleteBlacklistItem(); void storeSettings(QTreeWidgetItem *pluginItem); +private slots: + /** + * @brief Clear and repopulate the plugin list. + * + */ + void populatePluginList(); + /** * @brief Retrieve the plugin associated to the given item in the list. * @@ -31,6 +38,8 @@ private: private: + PluginContainer* m_pluginContainer; + MOBase::FilterWidget m_filter; }; -- cgit v1.3.1