summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/settingsdialogplugins.cpp23
-rw-r--r--src/settingsdialogplugins.h10
2 files changed, 24 insertions, 9 deletions
diff --git a/src/settingsdialogplugins.cpp b/src/settingsdialogplugins.cpp
index c84d0556..41430f1f 100644
--- a/src/settingsdialogplugins.cpp
+++ b/src/settingsdialogplugins.cpp
@@ -15,10 +15,10 @@ PluginsSettingsTab::PluginsSettingsTab(Settings& s, SettingsDialog& d)
for (IPlugin *plugin : settings().plugins().plugins()) {
if (handledNames.contains(plugin->name()))
continue;
- QListWidgetItem *listItem = new QListWidgetItem(plugin->name(), ui->pluginsList);
- listItem->setData(Qt::UserRole, QVariant::fromValue((void*)plugin));
- listItem->setData(Qt::UserRole + 1, settings().plugins().settings(plugin->name()));
- listItem->setData(Qt::UserRole + 2, settings().plugins().descriptions(plugin->name()));
+ QListWidgetItem *listItem = new QListWidgetItem(plugin->localizedName(), ui->pluginsList);
+ listItem->setData(ROLE_PLUGIN, QVariant::fromValue((void*)plugin));
+ listItem->setData(ROLE_SETTINGS, settings().plugins().settings(plugin->name()));
+ listItem->setData(ROLE_DESCRIPTIONS, settings().plugins().descriptions(plugin->name()));
ui->pluginsList->addItem(listItem);
handledNames.insert(plugin->name());
}
@@ -37,13 +37,18 @@ PluginsSettingsTab::PluginsSettingsTab(Settings& s, SettingsDialog& d)
QObject::connect(delShortcut, &QShortcut::activated, &dialog(), [&]{ deleteBlacklistItem(); });
}
+IPlugin* PluginsSettingsTab::plugin(QListWidgetItem* pluginItem) const
+{
+ return static_cast<IPlugin*>(qvariant_cast<void*>(pluginItem->data(ROLE_PLUGIN)));
+}
+
void PluginsSettingsTab::update()
{
// transfer plugin settings to in-memory structure
for (int i = 0; i < ui->pluginsList->count(); ++i) {
QListWidgetItem *item = ui->pluginsList->item(i);
settings().plugins().setSettings(
- item->text(), item->data(Qt::UserRole + 1).toMap());
+ plugin(item)->name(), item->data(ROLE_SETTINGS).toMap());
}
// set plugin blacklist
@@ -72,8 +77,8 @@ void PluginsSettingsTab::on_pluginsList_currentItemChanged(QListWidgetItem *curr
ui->versionLabel->setText(plugin->version().canonicalString());
ui->descriptionLabel->setText(plugin->description());
- QVariantMap settings = current->data(Qt::UserRole + 1).toMap();
- QVariantMap descriptions = current->data(Qt::UserRole + 2).toMap();
+ QVariantMap settings = current->data(ROLE_SETTINGS).toMap();
+ QVariantMap descriptions = current->data(ROLE_DESCRIPTIONS).toMap();
ui->pluginSettingsList->setEnabled(settings.count() != 0);
for (auto iter = settings.begin(); iter != settings.end(); ++iter) {
QTreeWidgetItem *newItem = new QTreeWidgetItem(QStringList(iter.key()));
@@ -107,13 +112,13 @@ void PluginsSettingsTab::deleteBlacklistItem()
void PluginsSettingsTab::storeSettings(QListWidgetItem *pluginItem)
{
if (pluginItem != nullptr) {
- QVariantMap settings = pluginItem->data(Qt::UserRole + 1).toMap();
+ QVariantMap settings = pluginItem->data(ROLE_SETTINGS).toMap();
for (int i = 0; i < ui->pluginSettingsList->topLevelItemCount(); ++i) {
const QTreeWidgetItem *item = ui->pluginSettingsList->topLevelItem(i);
settings[item->text(0)] = item->data(1, Qt::DisplayRole);
}
- pluginItem->setData(Qt::UserRole + 1, settings);
+ pluginItem->setData(ROLE_SETTINGS, settings);
}
}
diff --git a/src/settingsdialogplugins.h b/src/settingsdialogplugins.h
index 8e2dae2a..b793e5fd 100644
--- a/src/settingsdialogplugins.h
+++ b/src/settingsdialogplugins.h
@@ -16,6 +16,16 @@ private:
void on_pluginsList_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
void deleteBlacklistItem();
void storeSettings(QListWidgetItem *pluginItem);
+
+ /**
+ * @brief Retrieve the plugin associated to the given item in the list.
+ *
+ */
+ MOBase::IPlugin* plugin(QListWidgetItem *pluginItem) const;
+
+ constexpr static int ROLE_PLUGIN = Qt::UserRole;
+ constexpr static int ROLE_SETTINGS = Qt::UserRole + 1;
+ constexpr static int ROLE_DESCRIPTIONS = Qt::UserRole + 2;
};
#endif // SETTINGSDIALOGPLUGINS_H