diff options
| author | Mikaël Capelle <capelle.mikael@gmail.com> | 2020-11-17 12:30:59 +0100 |
|---|---|---|
| committer | Mikaël Capelle <capelle.mikael@gmail.com> | 2020-11-17 12:30:59 +0100 |
| commit | 1e67c3e68dbe4141c9cd3bfd7b29c747fca03753 (patch) | |
| tree | 7733cb4bb0086e6e9d018cae9171c2360d85498b /src | |
| parent | 9fd2a757fa0c25c72c6d8927924d0a8668e948c4 (diff) | |
Add core plugins and better messages.
Diffstat (limited to 'src')
| -rw-r--r-- | src/plugincontainer.cpp | 20 | ||||
| -rw-r--r-- | src/plugincontainer.h | 9 | ||||
| -rw-r--r-- | src/settingsdialogplugins.cpp | 13 |
3 files changed, 35 insertions, 7 deletions
diff --git a/src/plugincontainer.cpp b/src/plugincontainer.cpp index 8c2ece76..7884498c 100644 --- a/src/plugincontainer.cpp +++ b/src/plugincontainer.cpp @@ -101,6 +101,10 @@ QStringList PluginContainer::pluginInterfaces() // PluginRequirementProxy
+const std::set<QString> PluginRequirements::s_CorePlugins{
+ "INI Bakery"
+};
+
PluginRequirements::PluginRequirements(
PluginContainer* pluginContainer, MOBase::IPlugin* plugin, IOrganizer* proxy,
MOBase::IPluginProxy* pluginProxy)
@@ -193,6 +197,16 @@ bool PluginRequirements::canEnable() const return problems().empty();
}
+bool PluginRequirements::isCorePlugin() const
+{
+ // Let's consider game plugins as "core":
+ if (m_PluginContainer->implementInterface<IPluginGame>(m_Plugin)) {
+ return true;
+ }
+
+ return s_CorePlugins.contains(m_Plugin->name());
+}
+
bool PluginRequirements::hasRequirements() const
{
return !m_Requirements.empty();
@@ -405,7 +419,11 @@ bool PluginContainer::initPlugin(IPlugin *plugin, IPluginProxy *pluginProxy, boo auto [it, bl] = m_Requirements.emplace(plugin, PluginRequirements(this, plugin, proxy, pluginProxy));
- if (!skipInit && !plugin->init(proxy)) {
+ if (skipInit) {
+ return true;
+ }
+
+ if (!plugin->init(proxy)) {
log::warn("plugin failed to initialize");
return false;
}
diff --git a/src/plugincontainer.h b/src/plugincontainer.h index e9f0f453..36edfad9 100644 --- a/src/plugincontainer.h +++ b/src/plugincontainer.h @@ -40,6 +40,12 @@ public: bool canEnable() const;
/**
+ * @return true if this is a core plugin, i.e. a plugin that should not be
+ * manually enabled or disabled by the user.
+ */
+ bool isCorePlugin() const;
+
+ /**
* @return true if this plugin has requirements (satisfied or not).
*/
bool hasRequirements() const;
@@ -83,6 +89,9 @@ public: private:
+ // The list of "Core" plugins.
+ static const std::set<QString> s_CorePlugins;
+
// Accumulator version for requiredFor() to avoid infinite recursion.
void requiredFor(std::vector<MOBase::IPlugin*>& required, std::set<MOBase::IPlugin*>& visited) const;
diff --git a/src/settingsdialogplugins.cpp b/src/settingsdialogplugins.cpp index a86ba5c9..0c860fa0 100644 --- a/src/settingsdialogplugins.cpp +++ b/src/settingsdialogplugins.cpp @@ -241,7 +241,8 @@ void PluginsSettingsTab::on_checkboxEnabled_clicked(bool checked) if (m_pluginContainer->requirements(game).proxy() == plugin) { QMessageBox::warning( parentWidget(), QObject::tr("Cannot disable plugin"), - QObject::tr("This plugin is used by the current game plugin and cannot disabled."), QMessageBox::Ok); + QObject::tr("The '%1' plugin is used by the current game plugin and cannot disabled.") + .arg(plugin->localizedName()), QMessageBox::Ok); ui->enabledCheckbox->setChecked(true); return; } @@ -254,9 +255,9 @@ void PluginsSettingsTab::on_checkboxEnabled_clicked(bool checked) } pluginNames.sort(); QString message = QObject::tr( - "<p>Disabling this plugin will prevent the following plugins from working:</p><ul>%1</ul>" + "<p>Disabling the '%1' plugin will prevent the following plugins from working:</p><ul>%1</ul>" "<p>Do you want to continue? You will need to restart ModOrganizer2 for the change to take effect.</p>") - .arg("<li>" + pluginNames.join("</li><li>") + "</li>"); + .arg(plugin->localizedName()).arg("<li>" + pluginNames.join("</li><li>") + "</li>"); if (QMessageBox::critical( parentWidget(), QObject::tr("Really disable plugin?"), message, QMessageBox::Yes | QMessageBox::No) == QMessageBox::No) { @@ -275,8 +276,8 @@ void PluginsSettingsTab::on_checkboxEnabled_clicked(bool checked) } pluginNames.sort(); QString message = QObject::tr( - "<p>Disabling this plugin will also disable the following plugins:</p><ul>%1</ul><p>Do you want to continue?</p>") - .arg("<li>" + pluginNames.join("</li><li>") + "</li>"); + "<p>Disabling the '%1' plugin will also disable the following plugins:</p><ul>%1</ul><p>Do you want to continue?</p>") + .arg(plugin->localizedName()).arg("<li>" + pluginNames.join("</li><li>") + "</li>"); if (QMessageBox::warning( parentWidget(), QObject::tr("Really disable plugin?"), message, QMessageBox::Yes | QMessageBox::No) == QMessageBox::No) { @@ -310,7 +311,7 @@ void PluginsSettingsTab::on_pluginsList_currentItemChanged(QTreeWidgetItem *curr ui->descriptionLabel->setText(plugin->description()); ui->enabledCheckbox->setVisible( - !m_pluginContainer->implementInterface<MOBase::IPluginGame>(plugin) + !m_pluginContainer->requirements(plugin).isCorePlugin() && plugin->master().isEmpty()); ui->enabledCheckbox->setChecked(m_pluginContainer->isEnabled(plugin)); |
