изменено: CMakeLists.txt
новый файл: cmake/Info.plist.in новый файл: default.nix новый файл: desktop.nix новый файл: packaging/linux/idef0-editor.desktop новый файл: packaging/linux/idef0.xml новый файл: packaging/windows/idef0-file-association.reg.in изменено: src/MainWindow.cpp изменено: src/MainWindow.h изменено: src/items/ArrowItem.cpp изменено: src/items/ArrowItem.h изменено: src/items/BlockItem.cpp изменено: src/items/BlockItem.h изменено: src/items/DiagramScene.cpp изменено: src/items/DiagramScene.h новый файл: src/plugins/Manual.md новый файл: src/plugins/PluginApi.h новый файл: src/plugins/PluginManager.cpp новый файл: src/plugins/PluginManager.h новый файл: src/plugins/color/ColorsPlugin.cpp новый файл: src/plugins/color/ColorsPlugin.h новый файл: src/plugins/color/translations/colors_en.ts новый файл: src/plugins/color/translations/colors_fr.ts новый файл: src/plugins/color/translations/colors_ru.ts новый файл: translations/README.txt новый файл: translations/idef0_en.ts новый файл: translations/idef0_fr.ts новый файл: translations/idef0_ru.ts
This commit is contained in:
parent
f6f0598ff2
commit
630c952382
28 changed files with 2720 additions and 90 deletions
55
src/plugins/PluginManager.h
Normal file
55
src/plugins/PluginManager.h
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
#pragma once
|
||||
|
||||
#include <QObject>
|
||||
#include <QLibrary>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include "plugins/PluginApi.h"
|
||||
|
||||
class QMenu;
|
||||
class MainWindow;
|
||||
class DiagramScene;
|
||||
|
||||
class PluginManager final : public QObject {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit PluginManager(MainWindow* window, QMenu* pluginsMenu, QObject* parent = nullptr);
|
||||
void loadPlugins();
|
||||
|
||||
QMenu* pluginsMenu() const;
|
||||
DiagramScene* currentScene() const;
|
||||
QWidget* window() const;
|
||||
|
||||
private:
|
||||
struct HostContext {
|
||||
PluginManager* manager = nullptr;
|
||||
QString pluginPath;
|
||||
QByteArray pluginDirUtf8;
|
||||
Idef0Host host;
|
||||
};
|
||||
struct LoadedPlugin {
|
||||
std::unique_ptr<QLibrary> lib;
|
||||
std::unique_ptr<HostContext> ctx;
|
||||
LoadedPlugin() = default;
|
||||
LoadedPlugin(std::unique_ptr<QLibrary>&& l, std::unique_ptr<HostContext>&& c)
|
||||
: lib(std::move(l)), ctx(std::move(c)) {}
|
||||
LoadedPlugin(LoadedPlugin&&) noexcept = default;
|
||||
LoadedPlugin& operator=(LoadedPlugin&&) noexcept = default;
|
||||
LoadedPlugin(const LoadedPlugin&) = delete;
|
||||
LoadedPlugin& operator=(const LoadedPlugin&) = delete;
|
||||
};
|
||||
|
||||
QStringList pluginSearchPaths() const;
|
||||
std::unique_ptr<HostContext> makeContext(const QString& pluginPath);
|
||||
void addAction(const QString& text, Idef0ActionCallback cb, void* userData, HostContext* ctx);
|
||||
static size_t apiSelectedItems(void* opaque, Idef0SelectedItem* out, size_t max);
|
||||
static bool apiSetItemColor(void* opaque, int kind, int id, const char* color_hex);
|
||||
static bool apiClearItemColor(void* opaque, int kind, int id);
|
||||
static void apiAddMenuAction(void* opaque, const char* text, Idef0ActionCallback cb, void* user_data);
|
||||
static const char* apiPluginDir(void* opaque);
|
||||
|
||||
MainWindow* m_window = nullptr;
|
||||
QMenu* m_pluginsMenu = nullptr;
|
||||
std::vector<LoadedPlugin> m_plugins;
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue