diff options
| author | isanae <14251494+isanae@users.noreply.github.com> | 2020-11-04 20:57:50 -0500 |
|---|---|---|
| committer | isanae <14251494+isanae@users.noreply.github.com> | 2020-11-04 20:57:50 -0500 |
| commit | e6a87a17987de5d8e462634777df31e2cae5c1a6 (patch) | |
| tree | 1d5fa9752f6949b62aa6a8148b07cea7b02d964c /src | |
| parent | f7b097e6ba3160b424204c719b615954601f76fe (diff) | |
added IPlugin::registered()
removed useless dummy interfaces because init() isn't called anymore
python plugins currently broken because init() isn't called on them
fixed create instance dialog being shown on startup even if portable instance existed
display a message when the last instance can't be found
fixed instance manager dialog failing to open the portable instance
Diffstat (limited to 'src')
| -rw-r--r-- | src/instancemanager.cpp | 8 | ||||
| -rw-r--r-- | src/instancemanagerdialog.cpp | 6 | ||||
| -rw-r--r-- | src/main.cpp | 37 | ||||
| -rw-r--r-- | src/modlist.cpp | 71 | ||||
| -rw-r--r-- | src/modlist.h | 20 | ||||
| -rw-r--r-- | src/organizerproxy.cpp | 206 | ||||
| -rw-r--r-- | src/organizerproxy.h | 56 | ||||
| -rw-r--r-- | src/plugincontainer.cpp | 35 | ||||
| -rw-r--r-- | src/plugincontainer.h | 2 | ||||
| -rw-r--r-- | src/pluginlist.cpp | 65 | ||||
| -rw-r--r-- | src/pluginlist.h | 19 |
11 files changed, 54 insertions, 471 deletions
diff --git a/src/instancemanager.cpp b/src/instancemanager.cpp index c79c5254..61c442be 100644 --- a/src/instancemanager.cpp +++ b/src/instancemanager.cpp @@ -334,13 +334,7 @@ std::optional<Instance> InstanceManager::currentInstance() const } } - QString path = instancePath(name); - if (!QFileInfo::exists(path)) { - // the previously used instance doesn't exist anymore - return {}; - } - - return Instance(QDir(path), false, profile); + return Instance(QDir(instancePath(name)), false, profile); } void InstanceManager::clearCurrentInstance() diff --git a/src/instancemanagerdialog.cpp b/src/instancemanagerdialog.cpp index 231835ba..282329a5 100644 --- a/src/instancemanagerdialog.cpp +++ b/src/instancemanagerdialog.cpp @@ -462,7 +462,11 @@ void InstanceManagerDialog::openSelectedInstance() return; } - InstanceManager::instance().setCurrentInstance(m_instances[i]->name()); + if (m_instances[i]->isPortable()) { + InstanceManager::instance().setCurrentInstance(""); + } else { + InstanceManager::instance().setCurrentInstance(m_instances[i]->name()); + } if (m_restartOnSelect) { ExitModOrganizer(Exit::Restart); diff --git a/src/main.cpp b/src/main.cpp index 8f7af77d..7b489aee 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -272,22 +272,22 @@ std::optional<int> handleCommandLine( return {}; } -void openInstanceManager(PluginContainer& pc, QWidget* parent); - std::optional<Instance> selectInstance() { + auto& m = InstanceManager::instance(); + NexusInterface ni(nullptr); PluginContainer pc(nullptr); pc.loadPlugins(); - if (InstanceManager::instance().instancePaths().empty()) { + if (m.instancePaths().empty() && !m.portableInstanceExists()) { // no instances configured CreateInstanceDialog dlg(pc, nullptr); if (dlg.exec() != QDialog::Accepted) { return {}; } - return InstanceManager::instance().currentInstance(); + return m.currentInstance(); } @@ -302,7 +302,7 @@ std::optional<Instance> selectInstance() return {}; } - return InstanceManager::instance().currentInstance(); + return m.currentInstance(); } enum class SetupInstanceResults @@ -650,13 +650,36 @@ int doOneRun( // resets things when MO is "restarted" resetForRestart(cl); - auto currentInstance = InstanceManager::instance().currentInstance(); + auto& m = InstanceManager::instance(); + auto currentInstance = m.currentInstance(); if (!currentInstance) { currentInstance = selectInstance(); - if (!currentInstance) + if (!currentInstance) { return 1; + } + } + else + { + if (!currentInstance->directory().exists()) { + // the previously used instance doesn't exist anymore + + if (m.instanceNames().empty() && !m.portableInstanceExists()) { + criticalOnTop(QObject::tr( + "Instance at '%1' not found. You must create a new instance") + .arg(currentInstance->directory().absolutePath())); + } else { + criticalOnTop(QObject::tr( + "Instance at '%1' not found. Select another instance.") + .arg(currentInstance->directory().absolutePath())); + } + + currentInstance = selectInstance(); + if (!currentInstance) { + return 1; + } + } } const QString dataPath = currentInstance->directory().path(); diff --git a/src/modlist.cpp b/src/modlist.cpp index c98464a9..04abfb01 100644 --- a/src/modlist.cpp +++ b/src/modlist.cpp @@ -1528,74 +1528,3 @@ void ModList::disableSelected(const QItemSelectionModel *selectionModel) m_Profile->setModsEnabled(QList<unsigned int>(), modsToDisable); } } - - -QString DummyModList::displayName(const QString&) const -{ - return {}; -} - -QStringList DummyModList::allMods() const -{ - return {}; -} - -QStringList DummyModList::allModsByProfilePriority(MOBase::IProfile*) const -{ - return {}; -} - -IModInterface* DummyModList::getMod(const QString&) const -{ - return nullptr; -} - -bool DummyModList::removeMod(MOBase::IModInterface*) -{ - return true; -} - -IModList::ModStates DummyModList::state(const QString&) const -{ - return 0; -} - -bool DummyModList::setActive(const QString&, bool) -{ - return true; -} - -int DummyModList::setActive(const QStringList&, bool) -{ - return 0; -} - -int DummyModList::priority(const QString&) const -{ - return -1; -} - -bool DummyModList::setPriority(const QString&, int) -{ - return true; -} - -bool DummyModList::onModInstalled(const std::function<void(IModInterface *)>&) -{ - return true; -} - -bool DummyModList::onModRemoved(const std::function<void(QString const&)>&) -{ - return true; -} - -bool DummyModList::onModStateChanged(const std::function<void(const std::map<QString, ModStates>&)>&) -{ - return true; -} - -bool DummyModList::onModMoved(const std::function<void (const QString &, int, int)>&) -{ - return true; -} diff --git a/src/modlist.h b/src/modlist.h index 1a469ee7..385ca04c 100644 --- a/src/modlist.h +++ b/src/modlist.h @@ -397,25 +397,5 @@ private: };
-
-class DummyModList : public MOBase::IModList
-{
-public:
- QString displayName(const QString &internalName) const override;
- QStringList allMods() const override;
- QStringList allModsByProfilePriority(MOBase::IProfile *profile = nullptr) const override;
- MOBase::IModInterface* getMod(const QString& name) const override;
- bool removeMod(MOBase::IModInterface *mod) override;
- ModStates state(const QString &name) const override;
- bool setActive(const QString &name, bool active) override;
- int setActive(const QStringList& names, bool active) override;
- int priority(const QString &name) const override;
- bool setPriority(const QString &name, int newPriority) override;
- bool onModInstalled(const std::function<void(MOBase::IModInterface *)>& func) override;
- bool onModRemoved(const std::function<void(QString const&)>& func) override;
- bool onModStateChanged(const std::function<void(const std::map<QString, ModStates>&)> &func) override;
- bool onModMoved(const std::function<void (const QString &, int, int)> &func) override;
-};
-
#endif // MODLIST_H
diff --git a/src/organizerproxy.cpp b/src/organizerproxy.cpp index b2a4f791..45efc00c 100644 --- a/src/organizerproxy.cpp +++ b/src/organizerproxy.cpp @@ -287,209 +287,3 @@ bool OrganizerProxy::onPluginSettingChanged(std::function<void(QString const&, c // Always call this one, otherwise plugin cannot detect they are being enabled / disabled:
return m_Proxied->onPluginSettingChanged(func);
}
-
-
-
-DummyOrganizerProxy::DummyOrganizerProxy(MOBase::IPlugin* plugin)
- : m_mods(new DummyModList), m_plugins(new DummyPluginList)
-{
-}
-
-DummyOrganizerProxy::~DummyOrganizerProxy() = default;
-
-IModRepositoryBridge *DummyOrganizerProxy::createNexusBridge() const
-{
- return nullptr;
-}
-
-QString DummyOrganizerProxy::profileName() const
-{
- return {};
-}
-
-QString DummyOrganizerProxy::profilePath() const
-{
- return {};
-}
-
-QString DummyOrganizerProxy::downloadsPath() const
-{
- return {};
-}
-
-QString DummyOrganizerProxy::overwritePath() const
-{
- return {};
-}
-
-QString DummyOrganizerProxy::basePath() const
-{
- return {};
-}
-
-QString DummyOrganizerProxy::modsPath() const
-{
- return {};
-}
-
-VersionInfo DummyOrganizerProxy::appVersion() const
-{
- return {};
-}
-
-IPluginGame *DummyOrganizerProxy::getGame(const QString &gameName) const
-{
- return nullptr;
-}
-
-IModInterface *DummyOrganizerProxy::createMod(MOBase::GuessedValue<QString> &name)
-{
- return nullptr;
-}
-
-void DummyOrganizerProxy::modDataChanged(IModInterface *mod)
-{
-}
-
-QVariant DummyOrganizerProxy::pluginSetting(const QString &pluginName, const QString &key) const
-{
- if (key == "enabled") {
- return true;
- }
-
- return {};
-}
-
-void DummyOrganizerProxy::setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value)
-{
-}
-
-QVariant DummyOrganizerProxy::persistent(const QString &pluginName, const QString &key, const QVariant &def) const
-{
- return {};
-}
-
-void DummyOrganizerProxy::setPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync)
-{
-}
-
-QString DummyOrganizerProxy::pluginDataPath() const
-{
- return qApp->applicationDirPath() + "/" + ToQString(AppConfig::pluginPath()) + "/data";
-}
-
-HANDLE DummyOrganizerProxy::startApplication(
- const QString& exe, const QStringList& args, const QString &cwd,
- const QString& profile, const QString &overwrite, bool ignoreOverwrite)
-{
- return INVALID_HANDLE_VALUE;
-}
-
-bool DummyOrganizerProxy::waitForApplication(HANDLE handle, LPDWORD exitCode) const
-{
- return true;
-}
-
-bool DummyOrganizerProxy::onAboutToRun(const std::function<bool (const QString &)> &func)
-{
- return true;
-}
-
-bool DummyOrganizerProxy::onFinishedRun(const std::function<void (const QString &, unsigned int)> &func)
-{
- return true;
-}
-
-bool DummyOrganizerProxy::onUserInterfaceInitialized(std::function<void(QMainWindow*)> const& func)
-{
- return true;
-}
-
-bool DummyOrganizerProxy::onProfileCreated(std::function<void(MOBase::IProfile*)> const& func)
-{
- return true;
-}
-
-bool DummyOrganizerProxy::onProfileRenamed(std::function<void(MOBase::IProfile*, QString const&, QString const&)> const& func)
-{
- return true;
-}
-
-bool DummyOrganizerProxy::onProfileRemoved(std::function<void(QString const&)> const& func)
-{
- return true;
-}
-
-bool DummyOrganizerProxy::onProfileChanged(std::function<void(MOBase::IProfile*, MOBase::IProfile*)> const& func)
-{
- return true;
-}
-
-bool DummyOrganizerProxy::onPluginSettingChanged(std::function<void(QString const&, const QString& key, const QVariant&, const QVariant&)> const& func)
-{
- return true;
-}
-
-void DummyOrganizerProxy::refresh(bool saveChanges)
-{
-}
-
-IModInterface *DummyOrganizerProxy::installMod(const QString &fileName, const QString &nameSuggestion)
-{
- return nullptr;
-}
-
-QString DummyOrganizerProxy::resolvePath(const QString &fileName) const
-{
- return {};
-}
-
-QStringList DummyOrganizerProxy::listDirectories(const QString &directoryName) const
-{
- return {};
-}
-
-QStringList DummyOrganizerProxy::findFiles(const QString &path, const std::function<bool(const QString&)> &filter) const
-{
- return {};
-}
-
-QStringList DummyOrganizerProxy::findFiles(const QString& path, const QStringList& globFilters) const
-{
- return {};
-}
-
-QStringList DummyOrganizerProxy::getFileOrigins(const QString &fileName) const
-{
- return {};
-}
-
-QList<MOBase::IOrganizer::FileInfo> DummyOrganizerProxy::findFileInfos(const QString &path, const std::function<bool (const MOBase::IOrganizer::FileInfo &)> &filter) const
-{
- return {};
-}
-
-MOBase::IDownloadManager *DummyOrganizerProxy::downloadManager() const
-{
- return nullptr;
-}
-
-MOBase::IPluginList *DummyOrganizerProxy::pluginList() const
-{
- return m_plugins.get();
-}
-
-MOBase::IModList *DummyOrganizerProxy::modList() const
-{
- return m_mods.get();
-}
-
-MOBase::IProfile *DummyOrganizerProxy::profile() const
-{
- return nullptr;
-}
-
-MOBase::IPluginGame const *DummyOrganizerProxy::managedGame() const
-{
- return nullptr;
-}
diff --git a/src/organizerproxy.h b/src/organizerproxy.h index 144a7732..6690d612 100644 --- a/src/organizerproxy.h +++ b/src/organizerproxy.h @@ -81,60 +81,4 @@ private: };
-
-class DummyOrganizerProxy : public MOBase::IOrganizer
-{
-public:
- DummyOrganizerProxy(MOBase::IPlugin* plugin);
- ~DummyOrganizerProxy();
-
- MOBase::IModRepositoryBridge *createNexusBridge() const override;
- QString profileName() const override;
- QString profilePath() const override;
- QString downloadsPath() const override;
- QString overwritePath() const override;
- QString basePath() const override;
- QString modsPath() const override;
- MOBase::VersionInfo appVersion() const override;
- MOBase::IPluginGame *getGame(const QString &gameName) const override;
- MOBase::IModInterface *createMod(MOBase::GuessedValue<QString> &name) override;
- void modDataChanged(MOBase::IModInterface *mod) override;
- QVariant pluginSetting(const QString &pluginName, const QString &key) const override;
- void setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value) override;
- QVariant persistent(const QString &pluginName, const QString &key, const QVariant &def = QVariant()) const override;
- void setPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync = true) override;
- QString pluginDataPath() const override;
- MOBase::IModInterface *installMod(const QString &fileName, const QString &nameSuggestion = QString()) override;
- QString resolvePath(const QString &fileName) const override;
- QStringList listDirectories(const QString &directoryName) const override;
- QStringList findFiles(const QString &path, const std::function<bool(const QString &)> &filter) const override;
- QStringList findFiles(const QString &path, const QStringList &globFilters) const override;
- QStringList getFileOrigins(const QString &fileName) const override;
- QList<FileInfo> findFileInfos(const QString &path, const std::function<bool(const FileInfo&)> &filter) const override;
-
- MOBase::IDownloadManager *downloadManager() const override;
- MOBase::IPluginList *pluginList() const override;
- MOBase::IModList *modList() const override;
- MOBase::IProfile *profile() const override;
- HANDLE startApplication(const QString &executable, const QStringList &args = QStringList(), const QString &cwd = "",
- const QString &profile = "", const QString &forcedCustomOverwrite = "", bool ignoreCustomOverwrite = false) override;
- bool waitForApplication(HANDLE handle, LPDWORD exitCode = nullptr) const override;
- void refresh(bool saveChanges = true) override;
-
- bool onAboutToRun(const std::function<bool(const QString&)> &func) override;
- bool onFinishedRun(const std::function<void (const QString&, unsigned int)> &func) override;
- bool onUserInterfaceInitialized(std::function<void(QMainWindow*)> const& func) override;
- bool onProfileCreated(std::function<void(MOBase::IProfile*)> const& func) override;
- bool onProfileRenamed(std::function<void(MOBase::IProfile*, QString const&, QString const&)> const& func) override;
- bool onProfileRemoved(std::function<void(QString const&)> const& func) override;
- bool onProfileChanged(std::function<void(MOBase::IProfile*, MOBase::IProfile*)> const& func) override;
- bool onPluginSettingChanged(std::function<void(QString const&, const QString& key, const QVariant&, const QVariant&)> const& func) override;
-
- MOBase::IPluginGame const *managedGame() const override;
-
-private:
- std::unique_ptr<MOBase::IPluginList> m_plugins;
- std::unique_ptr<MOBase::IModList> m_mods;
-};
-
#endif // ORGANIZERPROXY_H
diff --git a/src/plugincontainer.cpp b/src/plugincontainer.cpp index 6f2670dd..0c71e491 100644 --- a/src/plugincontainer.cpp +++ b/src/plugincontainer.cpp @@ -169,23 +169,19 @@ QObject* PluginContainer::as_qobject(MOBase::IPlugin* plugin) const return *it;
}
-bool PluginContainer::verifyPlugin(IPlugin *plugin)
+bool PluginContainer::initPlugin(IPlugin *plugin)
{
if (plugin == nullptr) {
return false;
}
- IOrganizer* proxy = nullptr;
-
if (m_Organizer) {
- proxy = new OrganizerProxy(m_Organizer, this, plugin);
- } else {
- proxy = new DummyOrganizerProxy(plugin);
- }
+ auto* proxy = new OrganizerProxy(m_Organizer, this, plugin);
- if (!plugin->init(proxy)) {
- log::warn("plugin failed to initialize");
- return false;
+ if (!plugin->init(proxy)) {
+ log::warn("plugin failed to initialize");
+ return false;
+ }
}
return true;
@@ -197,7 +193,6 @@ void PluginContainer::registerGame(IPluginGame *game) m_SupportedGames.insert({ game->gameName(), game });
}
-
bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName)
{
// Storing the original QObject* is a bit of a hack as I couldn't figure out any
@@ -210,10 +205,14 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName) log::debug("not an IPlugin");
return false;
}
+
plugin->setProperty("filename", fileName);
+
if (m_Organizer) {
m_Organizer->settings().plugins().registerPlugin(pluginObj);
}
+
+ pluginObj->registered();
}
{ // diagnosis plugin
@@ -233,14 +232,14 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName) }
{ // mod page plugin
IPluginModPage *modPage = qobject_cast<IPluginModPage*>(plugin);
- if (verifyPlugin(modPage)) {
+ if (initPlugin(modPage)) {
bf::at_key<IPluginModPage>(m_Plugins).push_back(modPage);
return true;
}
}
{ // game plugin
IPluginGame *game = qobject_cast<IPluginGame*>(plugin);
- if (verifyPlugin(game)) {
+ if (initPlugin(game)) {
bf::at_key<IPluginGame>(m_Plugins).push_back(game);
registerGame(game);
return true;
@@ -248,14 +247,14 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName) }
{ // tool plugins
IPluginTool *tool = qobject_cast<IPluginTool*>(plugin);
- if (verifyPlugin(tool)) {
+ if (initPlugin(tool)) {
bf::at_key<IPluginTool>(m_Plugins).push_back(tool);
return true;
}
}
{ // installer plugins
IPluginInstaller *installer = qobject_cast<IPluginInstaller*>(plugin);
- if (verifyPlugin(installer)) {
+ if (initPlugin(installer)) {
bf::at_key<IPluginInstaller>(m_Plugins).push_back(installer);
if (m_Organizer) {
m_Organizer->installationManager()->registerInstaller(installer);
@@ -265,7 +264,7 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName) }
{ // preview plugins
IPluginPreview *preview = qobject_cast<IPluginPreview*>(plugin);
- if (verifyPlugin(preview)) {
+ if (initPlugin(preview)) {
bf::at_key<IPluginPreview>(m_Plugins).push_back(preview);
m_PreviewGenerator.registerPlugin(preview);
return true;
@@ -273,7 +272,7 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName) }
{ // proxy plugins
IPluginProxy *proxy = qobject_cast<IPluginProxy*>(plugin);
- if (verifyPlugin(proxy)) {
+ if (initPlugin(proxy)) {
bf::at_key<IPluginProxy>(m_Plugins).push_back(proxy);
QStringList pluginNames = proxy->pluginList(
QCoreApplication::applicationDirPath() + "/" + ToQString(AppConfig::pluginPath()));
@@ -305,7 +304,7 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName) { // dummy plugins
// only initialize these, no processing otherwise
IPlugin *dummy = qobject_cast<IPlugin*>(plugin);
- if (verifyPlugin(dummy)) {
+ if (initPlugin(dummy)) {
bf::at_key<IPlugin>(m_Plugins).push_back(dummy);
return true;
}
diff --git a/src/plugincontainer.h b/src/plugincontainer.h index 07363ee7..bfbf1fa8 100644 --- a/src/plugincontainer.h +++ b/src/plugincontainer.h @@ -168,7 +168,7 @@ private: QObject* as_qobject(MOBase::IPlugin* plugin) const;
- bool verifyPlugin(MOBase::IPlugin *plugin);
+ bool initPlugin(MOBase::IPlugin *plugin);
void registerGame(MOBase::IPluginGame *game);
bool registerPlugin(QObject *pluginObj, const QString &fileName);
bool unregisterPlugin(QObject *pluginObj, const QString &fileName);
diff --git a/src/pluginlist.cpp b/src/pluginlist.cpp index bda360ba..8d04b592 100644 --- a/src/pluginlist.cpp +++ b/src/pluginlist.cpp @@ -1671,68 +1671,3 @@ void PluginList::managedGameChanged(const IPluginGame *gamePlugin) {
m_GamePlugin = gamePlugin;
}
-
-
-
-QStringList DummyPluginList::pluginNames() const
-{
- return {};
-}
-
-IPluginList::PluginStates DummyPluginList::state(const QString &name) const
-{
- return 0;
-}
-
-void DummyPluginList::setState(const QString &name, PluginStates state)
-{
-}
-
-int DummyPluginList::priority(const QString &name) const
-{
- return -1;
-}
-
-int DummyPluginList::loadOrder(const QString &name) const
-{
- return -1;
-}
-
-void DummyPluginList::setLoadOrder(const QStringList &pluginList)
-{
-}
-
-bool DummyPluginList::setPriority(const QString&, int)
-{
- return true;
-}
-
-bool DummyPluginList::isMaster(const QString &name) const
-{
- return false;
-}
-
-QStringList DummyPluginList::masters(const QString &name) const
-{
- return {};
-}
-
-QString DummyPluginList::origin(const QString &name) const
-{
- return {};
-}
-
-bool DummyPluginList::onRefreshed(const std::function<void()> &callback)
-{
- return true;
-}
-
-bool DummyPluginList::onPluginMoved(const std::function<void (const QString &, int, int)> &func)
-{
- return true;
-}
-
-bool DummyPluginList::onPluginStateChanged(const std::function<void (const std::map<QString, PluginStates>&)> &func)
-{
- return true;
-}
diff --git a/src/pluginlist.h b/src/pluginlist.h index 27c15056..0b49b86f 100644 --- a/src/pluginlist.h +++ b/src/pluginlist.h @@ -410,25 +410,6 @@ private: bool hasInfo(const ESPInfo& esp, const AdditionalInfo* info) const;
};
-
-class DummyPluginList : public MOBase::IPluginList
-{
-public:
- QStringList pluginNames() const override;
- PluginStates state(const QString &name) const override;
- void setState(const QString &name, PluginStates state) override;
- int priority(const QString &name) const override;
- int loadOrder(const QString &name) const override;
- void setLoadOrder(const QStringList &pluginList) override;
- bool setPriority(const QString& name, int newPriority) override;
- bool isMaster(const QString &name) const override;
- QStringList masters(const QString &name) const override;
- QString origin(const QString &name) const override;
- bool onRefreshed(const std::function<void()> &callback) override;
- bool onPluginMoved(const std::function<void (const QString &, int, int)> &func) override;
- bool onPluginStateChanged(const std::function<void (const std::map<QString, PluginStates>&)> &func) override;
-};
-
#pragma warning(pop)
#endif // PLUGINLIST_H
|
