From b44f9d17cb6cb4239db30ad693969a1aa4b360e8 Mon Sep 17 00:00:00 2001 From: Marco Martin Date: Tue, 27 Aug 2013 13:27:49 +0200 Subject: [PATCH] make the plugin selector combobox work --- src/shell/currentcontainmentactionsmodel.cpp | 29 ++++++++++++++----- src/shell/currentcontainmentactionsmodel.h | 3 +- .../ConfigurationContainmentActions.qml | 17 +++++++++++ 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/src/shell/currentcontainmentactionsmodel.cpp b/src/shell/currentcontainmentactionsmodel.cpp index 09bbdd668..ad3daf077 100644 --- a/src/shell/currentcontainmentactionsmodel.cpp +++ b/src/shell/currentcontainmentactionsmodel.cpp @@ -43,7 +43,8 @@ CurrentContainmentActionsModel::CurrentContainmentActionsModel(Plasma::Containme { QHash roleNames; roleNames[ActionRole] = "action"; - roleNames[PluginRole] = "plugin"; + roleNames[PluginNameRole] = "pluginName"; + roleNames[HasConfigurationInterfaceRole] = "hasConfigurationInterface"; setRoleNames(roleNames); @@ -59,12 +60,15 @@ CurrentContainmentActionsModel::CurrentContainmentActionsModel(Plasma::Containme QStandardItem *item = new QStandardItem(); item->setData(i.key(), ActionRole); - item->setData(i.value()->pluginInfo().pluginName(), PluginRole); - appendRow(item); + item->setData(i.value()->pluginInfo().pluginName(), PluginNameRole); + m_plugins[i.key()] = Plasma::PluginLoader::self()->loadContainmentActions(m_containment, i.value()->pluginInfo().pluginName()); m_plugins[i.key()]->setContainment(m_containment); KConfigGroup cfg(&m_baseCfg, i.key()); m_plugins[i.key()]->restore(cfg); + item->setData(m_plugins[i.key()]->pluginInfo().property("X-Plasma-HasConfigurationInterface").toBool(), HasConfigurationInterfaceRole); + + appendRow(item); } } @@ -102,33 +106,42 @@ bool CurrentContainmentActionsModel::append(const QString &action, const QString QStandardItem *item = new QStandardItem(); item->setData(action, ActionRole); - item->setData(plugin, PluginRole); - appendRow(item); + item->setData(plugin, PluginNameRole); + m_plugins[action] = Plasma::PluginLoader::self()->loadContainmentActions(m_containment, plugin); m_plugins[action]->setContainment(m_containment); //empty config: the new one will ne in default state KConfigGroup tempConfig(&m_tempConfigParent, "test"); m_plugins[action]->restore(tempConfig); + item->setData(m_plugins[action]->pluginInfo().property("X-Plasma-HasConfigurationInterface").toBool(), HasConfigurationInterfaceRole); + + appendRow(item); return true; } void CurrentContainmentActionsModel::update(int row, const QString &action, const QString &plugin) { - const QString oldPlugin = itemData(index(row, 0)).value(PluginRole).toString(); + const QString oldPlugin = itemData(index(row, 0)).value(PluginNameRole).toString(); + const QString oldTrigger = itemData(index(row, 0)).value(ActionRole).toString(); + + if (oldTrigger == action && oldPlugin == plugin) { + return; + } QModelIndex idx = index(row, 0); if (idx.isValid()) { setData(idx, action, ActionRole); - setData(idx, plugin, PluginRole); + setData(idx, plugin, PluginNameRole); - if (m_plugins.contains(action) && oldPlugin != plugin) { + if (!m_plugins.contains(action) || oldPlugin != plugin) { delete m_plugins[action]; m_plugins[action] = Plasma::PluginLoader::self()->loadContainmentActions(m_containment, plugin); m_plugins[action]->setContainment(m_containment); //empty config: the new one will ne in default state KConfigGroup tempConfig(&m_tempConfigParent, "test"); m_plugins[action]->restore(tempConfig); + setData(idx, m_plugins[action]->pluginInfo().property("X-Plasma-HasConfigurationInterface").toBool(), HasConfigurationInterfaceRole); } } } diff --git a/src/shell/currentcontainmentactionsmodel.h b/src/shell/currentcontainmentactionsmodel.h index 340ebbc3f..99e738067 100644 --- a/src/shell/currentcontainmentactionsmodel.h +++ b/src/shell/currentcontainmentactionsmodel.h @@ -37,7 +37,8 @@ class CurrentContainmentActionsModel : public QStandardItemModel public: enum Roles { ActionRole = Qt::UserRole+1, - PluginRole + PluginNameRole, + HasConfigurationInterfaceRole }; CurrentContainmentActionsModel(Plasma::Containment *cotainment, QObject *parent = 0); diff --git a/src/shell/qmlpackages/desktop/contents/configuration/ConfigurationContainmentActions.qml b/src/shell/qmlpackages/desktop/contents/configuration/ConfigurationContainmentActions.qml index 98e7d5fca..977739c22 100644 --- a/src/shell/qmlpackages/desktop/contents/configuration/ConfigurationContainmentActions.qml +++ b/src/shell/qmlpackages/desktop/contents/configuration/ConfigurationContainmentActions.qml @@ -47,13 +47,30 @@ Item { text: model.action } QtControls.ComboBox { + id: pluginsCombo Layout.fillWidth: true model: configDialog.containmentActionConfigModel textRole: "name" + property bool initialized: false + Component.onCompleted: { + for (var i = 0; i < configDialog.containmentActionConfigModel.count; ++i) { + if (configDialog.containmentActionConfigModel.get(i).pluginName == pluginName) { + pluginsCombo.currentIndex = i; + break; + } + } + pluginsCombo.initialized = true; + } + onCurrentIndexChanged: { + if (initialized && configDialog.containmentActionConfigModel.get(currentIndex).pluginName != pluginName) { + configDialog.currentContainmentActionsModel.update(index, action, configDialog.containmentActionConfigModel.get(currentIndex).pluginName); + } + } } QtControls.Button { iconName: "configure" width: height + enabled: model.hasConfigurationInterface onClicked: { configDialog.currentContainmentActionsModel.showConfiguration(index); }