diff options
Diffstat (limited to 'src/settingsdialogplugins.cpp')
| -rw-r--r-- | src/settingsdialogplugins.cpp | 44 |
1 files changed, 34 insertions, 10 deletions
diff --git a/src/settingsdialogplugins.cpp b/src/settingsdialogplugins.cpp index 1e2117cf..15c0b424 100644 --- a/src/settingsdialogplugins.cpp +++ b/src/settingsdialogplugins.cpp @@ -31,14 +31,10 @@ PluginsSettingsTab::PluginsSettingsTab(Settings& s, PluginContainer* pluginConta // display plugin settings QSet<QString> handledNames; 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(); - })) { + if (handledNames.contains(plugin->name()) || !plugin->master().isEmpty()) { continue; } + QTreeWidgetItem* listItem = new QTreeWidgetItem( topItems.at(m_pluginContainer->topImplementedInterface(plugin))); listItem->setData(0, Qt::DisplayRole, plugin->localizedName()); @@ -46,6 +42,18 @@ PluginsSettingsTab::PluginsSettingsTab(Settings& s, PluginContainer* pluginConta listItem->setData(0, ROLE_SETTINGS, settings().plugins().settings(plugin->name())); listItem->setData(0, ROLE_DESCRIPTIONS, settings().plugins().descriptions(plugin->name())); + // Handle child item: + auto children = m_pluginContainer->requirements(plugin).children(); + for (auto* child : children) { + QTreeWidgetItem* childItem = new QTreeWidgetItem(listItem); + childItem->setData(0, Qt::DisplayRole, child->localizedName()); + childItem->setData(0, ROLE_PLUGIN, QVariant::fromValue((void*)child)); + childItem->setData(0, ROLE_SETTINGS, settings().plugins().settings(child->name())); + childItem->setData(0, ROLE_DESCRIPTIONS, settings().plugins().descriptions(child->name())); + + handledNames.insert(child->name()); + } + handledNames.insert(plugin->name()); } @@ -90,7 +98,13 @@ void PluginsSettingsTab::updateListItems() bool inactive = !m_pluginContainer->implementInterface<IPluginGame>(plugin) && !m_pluginContainer->isEnabled(plugin); - // TODO: Better display. + + auto font = item->font(0); + font.setItalic(inactive); + item->setFont(0, font); + for (auto k = 0; k < item->childCount(); ++k) { + item->child(k)->setFont(0, font); + } } } @@ -108,9 +122,18 @@ void PluginsSettingsTab::filterPluginList() auto* item = topLevelItem->child(j); auto* plugin = this->plugin(item); - if (m_filter.matches([plugin](const QRegularExpression& regex) { + // Check the item or the child - If any match (item or child), the whole + // group is displayed. + bool match = m_filter.matches([plugin](const QRegularExpression& regex) { return regex.match(plugin->localizedName()).hasMatch(); - })) { + }); + for (auto* child : m_pluginContainer->requirements(plugin).children()) { + m_filter.matches([child](const QRegularExpression& regex) { + return regex.match(child->localizedName()).hasMatch(); + }); + } + + if (match) { found = true; item->setHidden(false); @@ -251,7 +274,8 @@ void PluginsSettingsTab::on_pluginsList_currentItemChanged(QTreeWidgetItem *curr ui->descriptionLabel->setText(plugin->description()); ui->enabledCheckbox->setVisible( - !m_pluginContainer->implementInterface<MOBase::IPluginGame>(plugin)); + !m_pluginContainer->implementInterface<MOBase::IPluginGame>(plugin) + && plugin->master().isEmpty()); ui->enabledCheckbox->setChecked(m_pluginContainer->isEnabled(plugin)); QVariantMap settings = current->data(0, ROLE_SETTINGS).toMap(); |
