diff --git a/src/kpluginselector.h b/src/kpluginselector.h --- a/src/kpluginselector.h +++ b/src/kpluginselector.h @@ -209,6 +209,13 @@ */ QStringList configurationArguments() const; + /** + * Shows the configuration dialog for the plugin @p pluginId if it's available + * + * @since 5.45 + */ + void showConfiguration(const QString &pluginId); + Q_SIGNALS: /** * Tells you whether the configuration is changed or not. diff --git a/src/kpluginselector.cpp b/src/kpluginselector.cpp --- a/src/kpluginselector.cpp +++ b/src/kpluginselector.cpp @@ -414,6 +414,26 @@ return d->kcmArguments; } +void KPluginSelector::showConfiguration(const QString& componentName) +{ + QModelIndex idx; + for (int i = 0, c = d->proxyModel->rowCount(); iproxyModel->index(i, 0); + const auto entry = currentIndex.data(KPluginSelector::Private::PluginEntryRole).value(); + if (entry->pluginInfo.pluginName() == componentName) { + idx = currentIndex; + break; + } + } + + if (idx.isValid()) { + auto delegate = static_cast(d->listView->itemDelegate()); + delegate->configure(idx); + } else { + qWarning() << "Could not find plugin" << componentName; + } +} + KPluginSelector::Private::PluginModel::PluginModel(KPluginSelector::Private *pluginSelector_d, QObject *parent) : QAbstractListModel(parent) , pluginSelector_d(pluginSelector_d) @@ -796,7 +816,11 @@ void KPluginSelector::Private::PluginDelegate::slotConfigureClicked() { - const QModelIndex index = focusedIndex(); + configure(focusedIndex()); +} + +void KPluginSelector::Private::PluginDelegate::configure(const QModelIndex& index) +{ const QAbstractItemModel *model = index.model(); PluginEntry *pluginEntry = model->data(index, PluginEntryRole).value(); diff --git a/src/kpluginselector_p.h b/src/kpluginselector_p.h --- a/src/kpluginselector_p.h +++ b/src/kpluginselector_p.h @@ -189,6 +189,7 @@ void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE; + void configure(const QModelIndex &idx); Q_SIGNALS: void changed(bool hasChanged);