SWMMVis  6.0.0-alpha.4
Qt6/C++ GIS-based graphical user interface for the SWMMVis engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
extensionmanager.h
Go to the documentation of this file.
1
10#pragma once
11
12#include "sdk/ExtensionHost.hpp"
13#include "sdk/IGuiExtension.hpp"
14#include <QSettings>
15#include <functional>
16#include <memory>
17#include <vector>
18
19namespace openswmmvis
20{
25 QString path;
26 QString state;
27 QString error;
28 QString warning;
29 bool enabled = true;
30 bool loaded = false;
31 bool requiresEngineAbi = false;
32 QList<OpenSWMM::Sdk::ExtensionInfo> children;
33};
34
36class ExtensionManager : public QObject
37{
38 Q_OBJECT
39public:
42 std::function<std::unique_ptr<OpenSWMM::Sdk::ExtensionHost>(const QString &)>;
48 QObject *parent = nullptr);
50 ~ExtensionManager() override;
52 static ExtensionManager *instance();
57 OpenSWMM::Sdk::CompatibilityManifest manifest() const { return mManifest; }
62 void setEngineRuntimeAbiTag(const QString &tag);
71 bool requiresEngineAbi, QString *warning = nullptr);
73 QList<GuiExtensionRecord> records() const { return mRecords; }
75 QStringList directories() const;
79 void addDirectory(const QString &path);
83 void setEnabled(const QString &id, bool enabled);
85 void rescan();
90 void start(HostFactory factory, bool safeMode = false);
92 void shutdown();
94 void refreshModels();
96 bool safeMode() const { return mSafeMode; }
97signals:
99 void changed();
100
101private:
102 struct Loaded;
104 QSettings *mSettings;
105 QList<GuiExtensionRecord> mRecords;
106 std::vector<std::unique_ptr<Loaded>> mLoaded;
107 QHash<QString, QString> mFailures, mWarnings;
108 bool mStarted = false, mSafeMode = false;
109};
110}
Public host services available to independently built GUI extensions.
Root interface and metadata for native GUI extensions.
Definition extensionmanager.h:37
~ExtensionManager() override
Stop initialized extensions and destroy their hosts without unloading native code.
Definition extensionmanager.cpp:55
void changed()
Notify inventory observers after a rescan, load or enable-state change.
void setEngineRuntimeAbiTag(const QString &tag)
Supply the engine-owned runtime identity before plugin discovery/loading.
Definition extensionmanager.cpp:116
void setEnabled(const QString &id, bool enabled)
Persist an enable-state change for the next application launch.
Definition extensionmanager.cpp:133
void rescan()
Rebuild metadata inventory without executing plugin code; preserve this session load failures.
Definition extensionmanager.cpp:145
QList< GuiExtensionRecord > records() const
Copy discovery and load diagnostics.
Definition extensionmanager.h:73
bool safeMode() const
Inspect startup safe mode.
Definition extensionmanager.h:96
std::function< std::unique_ptr< OpenSWMM::Sdk::ExtensionHost >(const QString &)> HostFactory
Factory transferring one initialized-service host to the loader for a validated plugin ID.
Definition extensionmanager.h:42
void refreshModels()
Materialize model facades before project state is restored on a newly loaded window.
Definition extensionmanager.cpp:315
OpenSWMM::Sdk::CompatibilityManifest manifest() const
Read the build manifest with the actual loaded engine identity applied.
Definition extensionmanager.h:57
void shutdown()
Join jobs, call plugin shutdown, then remove contributions in reverse load order; idempotent.
Definition extensionmanager.cpp:300
static OpenSWMM::Sdk::CompatibilityManifest buildManifest()
Read the manifest generated by this application build.
Definition extensionmanager.cpp:68
void addDirectory(const QString &path)
Persist an existing canonical directory and rescan metadata.
Definition extensionmanager.cpp:122
QStringList directories() const
Resolve app, user-data and additional extension directories.
Definition extensionmanager.cpp:105
static ExtensionManager * instance()
Obtain the application-owned GUI-thread manager.
Definition extensionmanager.cpp:60
static QString compatibilityError(const OpenSWMM::Sdk::CompatibilityManifest &host, const OpenSWMM::Sdk::CompatibilityManifest &plugin, bool requiresEngineAbi, QString *warning=nullptr)
Validate native metadata before instantiating the plugin.
Definition extensionmanager.cpp:74
QString path
Populated by the worker only after its own successful atomic creation.
Definition extensiontimeseriesaccess.cpp:32
std::vector< int > start
size = pixels + 1
Definition mesh2dresultsexport.cpp:762
Definition aquiferprovider.h:24
int parent
Definition planning.cpp:199
bool enabled
Definition planning.cpp:205
Definition Version.hpp:24
Owning metadata describing a native plugin or one of its hosted child extensions.
Definition IGuiExtension.hpp:23
One successfully initialized extension and its ordered owned lifetime resources.
Definition extensionmanager.cpp:39
Owning inventory entry, including failures and metadata-only discoveries.
Definition extensionmanager.h:22
QString state
Translated load, disable, safe-mode or restart status.
Definition extensionmanager.h:26
bool requiresEngineAbi
Engine fingerprint mismatch prevents loading.
Definition extensionmanager.h:31
OpenSWMM::Sdk::ExtensionInfo info
Embedded extension identity and display information.
Definition extensionmanager.h:23
QString error
Fatal compatibility or initialization diagnostic.
Definition extensionmanager.h:27
bool loaded
Native code initialized in this process.
Definition extensionmanager.h:30
bool enabled
Desired next-launch enable state.
Definition extensionmanager.h:29
QString warning
Nonfatal ABI or interrupted-operation recovery message.
Definition extensionmanager.h:28
QList< OpenSWMM::Sdk::ExtensionInfo > children
Cached plugin-hosted child metadata.
Definition extensionmanager.h:32
OpenSWMM::Sdk::CompatibilityManifest builtAgainst
Build identity from embedded metadata.
Definition extensionmanager.h:24
QString path
Canonical native-library path.
Definition extensionmanager.h:25