From eb72caa7c14f3de512afa0e7fc5d05787f232cca Mon Sep 17 00:00:00 2001 From: Mikaël Capelle Date: Mon, 28 Sep 2020 22:55:55 +0200 Subject: Use localizedName() instead of name() for the list of plugins in the UI. --- src/settingsdialogplugins.cpp | 23 ++++++++++++++--------- src/settingsdialogplugins.h | 10 ++++++++++ 2 files changed, 24 insertions(+), 9 deletions(-) (limited to 'src') 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(qvariant_cast(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 -- cgit v1.3.1 From 69625912b822f5e7630648d76af2408f013f23ba Mon Sep 17 00:00:00 2001 From: Mikaël Capelle Date: Mon, 28 Sep 2020 22:56:12 +0200 Subject: Add a method to retrieve the localized names of the implemented plugin interfaces. --- src/plugincontainer.cpp | 82 +++++++++++++++++++++++++++++++++++++++++++++++++ src/plugincontainer.h | 32 +++++++++++++++++++ 2 files changed, 114 insertions(+) (limited to 'src') diff --git a/src/plugincontainer.cpp b/src/plugincontainer.cpp index d989fac9..e6a4e877 100644 --- a/src/plugincontainer.cpp +++ b/src/plugincontainer.cpp @@ -21,6 +21,88 @@ using namespace MOShared; namespace bf = boost::fusion; +template +struct PluginTypeName; + +template <> struct PluginTypeName { static QString get() { return {}; } }; +template <> struct PluginTypeName { static QString get() { return QT_TR_NOOP("Plugin"); } }; +template <> struct PluginTypeName { static QString get() { return QT_TR_NOOP("Diagnose"); } }; +template <> struct PluginTypeName { static QString get() { return QT_TR_NOOP("Game"); } }; +template <> struct PluginTypeName { static QString get() { return QT_TR_NOOP("Installer"); } }; +template <> struct PluginTypeName { static QString get() { return QT_TR_NOOP("Mod Page"); } }; +template <> struct PluginTypeName { static QString get() { return QT_TR_NOOP("Preview"); } }; +template <> struct PluginTypeName { static QString get() { return QT_TR_NOOP("Tool"); } }; +template <> struct PluginTypeName { static QString get() { return QT_TR_NOOP("Proxy"); } }; +template <> struct PluginTypeName { static QString get() { return QT_TR_NOOP("File Mapper"); } }; + +template class Mapper, class BfMap> +struct plugin_map_iterate_impl; + +template class Mapper> +struct plugin_map_iterate_impl> +{ + template + static auto apply(Reducer const& r, U &&u, Args const&... args) { + return std::forward(u); + } +}; + +template < + class Reducer, + template class Mapper, + class K, class V, class... Ps +> +struct plugin_map_iterate_impl, Ps... >> +{ + template + static auto apply(Reducer const& r, U&& u, Args const&... args) { + return plugin_map_iterate_impl>::apply(r, r(Mapper::get(args... ), u), args... ); + } +}; + +template