diff options
Diffstat (limited to 'api')
-rw-r--r-- | api/lang/de_DE.ts | 11 | ||||
-rw-r--r-- | api/lang/zh_CN.ts | 2 | ||||
-rw-r--r-- | api/plugin-api.cpp | 25 | ||||
-rw-r--r-- | api/plugin-api.hpp | 58 | ||||
-rw-r--r-- | api/plugin-support.hpp | 22 |
5 files changed, 44 insertions, 74 deletions
diff --git a/api/lang/de_DE.ts b/api/lang/de_DE.ts new file mode 100644 index 00000000..688fe72b --- /dev/null +++ b/api/lang/de_DE.ts @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="de_DE"> +<context> + <name>module_status_mixin</name> + <message> + <source>Unknown error</source> + <translation>Unbekannter Fehler</translation> + </message> +</context> +</TS> diff --git a/api/lang/zh_CN.ts b/api/lang/zh_CN.ts index d29cce1b..26bf67a5 100644 --- a/api/lang/zh_CN.ts +++ b/api/lang/zh_CN.ts @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> -<TS version="2.1"> +<TS version="2.1" language="zh_CN"> <context> <name>module_status_mixin</name> <message> diff --git a/api/plugin-api.cpp b/api/plugin-api.cpp index 79f9b464..4d8d90e9 100644 --- a/api/plugin-api.cpp +++ b/api/plugin-api.cpp @@ -1,28 +1,28 @@ #include "plugin-api.hpp" - -#include <utility> +#include <QCloseEvent> +#include <QDebug> namespace plugin_api::detail { BaseDialog::BaseDialog() = default; -void BaseDialog::closeEvent(QCloseEvent*) +void BaseDialog::closeEvent(QCloseEvent* e) { if (isVisible()) - { - hide(); emit closing(); - } + e->accept(); } void BaseDialog::done(int) { if (isVisible()) - { - hide(); close(); - } } +bool BaseDialog::embeddable() noexcept { return false; } +void BaseDialog::save() {} +void BaseDialog::reload() {} +void BaseDialog::set_buttons_visible(bool) {} + } // ns plugin_api::detail // these exist so that vtable is emitted in a single compilation unit, not all of them. @@ -36,10 +36,14 @@ IFilter::IFilter() = default; IFilter::~IFilter() = default; IFilterDialog::IFilterDialog() = default; IFilterDialog::~IFilterDialog() = default; +void IFilterDialog::register_filter(IFilter*) {} +void IFilterDialog::unregister_filter() {} IProtocol::IProtocol() = default; IProtocol::~IProtocol() = default; IProtocolDialog::IProtocolDialog() = default; IProtocolDialog::~IProtocolDialog() = default; +void IProtocolDialog::register_protocol(IProtocol*){} +void IProtocolDialog::unregister_protocol() {} ITracker::ITracker() = default; ITracker::~ITracker() = default; bool ITracker::center() { return false; } @@ -47,14 +51,11 @@ ITrackerDialog::ITrackerDialog() = default; ITrackerDialog::~ITrackerDialog() = default; void ITrackerDialog::register_tracker(ITracker*) {} void ITrackerDialog::unregister_tracker() {} -IExtension::~IExtension() = default; -IExtensionDialog::~IExtensionDialog() = default; bool module_status::is_ok() const { return error.isNull(); } - module_status_mixin::~module_status_mixin() = default; module_status::module_status(const QString& error) : error(error) {} module_status::module_status() = default; diff --git a/api/plugin-api.hpp b/api/plugin-api.hpp index 263ee475..2d77bdf4 100644 --- a/api/plugin-api.hpp +++ b/api/plugin-api.hpp @@ -42,6 +42,10 @@ protected: BaseDialog(); public: void closeEvent(QCloseEvent *) override; + virtual bool embeddable() noexcept; + virtual void set_buttons_visible(bool x); // XXX TODO remove it once all modules are converted + virtual void save(); // XXX HACK should be pure virtual + virtual void reload(); // XXX HACK should be pure virtual -sh 20211214 signals: void closing(); private slots: @@ -55,15 +59,18 @@ private slots: #define OPENTRACK_DECLARE_PLUGIN_INTERNAL(ctor_class, ctor_ret_class, metadata_class, dialog_class, dialog_ret_class) \ extern "C" \ { \ - OTR_PLUGIN_EXPORT ctor_ret_class* GetConstructor(void) \ + OTR_PLUGIN_EXPORT ctor_ret_class* GetConstructor(void); \ + ctor_ret_class* GetConstructor(void) \ { \ return new ctor_class; \ } \ - OTR_PLUGIN_EXPORT Metadata_* GetMetadata(void) \ + OTR_PLUGIN_EXPORT Metadata_* GetMetadata(void); \ + Metadata_* GetMetadata(void) \ { \ return new metadata_class; \ } \ - OTR_PLUGIN_EXPORT dialog_ret_class* GetDialog(void) \ + OTR_PLUGIN_EXPORT dialog_ret_class* GetDialog(void); \ + dialog_ret_class* GetDialog(void) \ { \ return new dialog_class; \ } \ @@ -221,48 +228,3 @@ struct OTR_API_EXPORT ITrackerDialog : public plugin_api::detail::BaseDialog #define OPENTRACK_DECLARE_TRACKER(tracker_class, dialog_class, metadata_class) \ OPENTRACK_DECLARE_PLUGIN_INTERNAL(tracker_class, ITracker, metadata_class, dialog_class, ITrackerDialog) -struct OTR_API_EXPORT IExtension : module_status_mixin -{ - enum event_mask : unsigned - { - none = 0u, - on_raw = 1 << 0, - on_before_filter = 1 << 1, - on_before_mapping = 1 << 2, - on_finished = 1 << 3, - }; - - enum event_ordinal : unsigned - { - ev_raw = 0, - ev_before_filter = 1, - ev_before_mapping = 2, - ev_finished = 3, - - event_count = 4, - }; - - IExtension() = default; - ~IExtension() override; - - virtual event_mask hook_types() = 0; - - virtual void process_raw(Pose&) {} - virtual void process_before_filter(Pose&) {} - virtual void process_before_mapping(Pose&) {} - virtual void process_finished(Pose&) {} - - IExtension(const IExtension&) = delete; - IExtension& operator=(const IExtension&) = delete; -}; - -struct OTR_API_EXPORT IExtensionDialog : public plugin_api::detail::BaseDialog -{ - ~IExtensionDialog() override; - - virtual void register_extension(IExtension& ext) = 0; - virtual void unregister_extension() = 0; -}; - -#define OPENTRACK_DECLARE_EXTENSION(ext_class, dialog_class, metadata_class) \ - OPENTRACK_DECLARE_PLUGIN_INTERNAL(ext_class, IExtension, metadata_class, dialog_class, IExtensionDialog) diff --git a/api/plugin-support.hpp b/api/plugin-support.hpp index 9c0a3ae0..f577f62f 100644 --- a/api/plugin-support.hpp +++ b/api/plugin-support.hpp @@ -17,6 +17,8 @@ #include <QDebug> #include <QString> +#include <QStringView> +#include <QLatin1StringView> #include <QLibrary> #include <QDir> #include <QIcon> @@ -38,7 +40,6 @@ enum class dylib_type : unsigned Filter = 0xdeadbabe, Tracker = 0xcafebeef, Protocol = 0xdeadf00d, - Extension = 0xcafebabe, Video = 0xbadf00d, Invalid = (unsigned)-1, }; @@ -54,7 +55,7 @@ struct dylib final return; handle.setFileName(filename_); - handle.setLoadHints(QLibrary::DeepBindHint | QLibrary::PreventUnloadHint | QLibrary::ResolveAllSymbolsHint); + handle.setLoadHints(QLibrary::DeepBindHint | QLibrary::ResolveAllSymbolsHint); #ifdef __clang__ # pragma clang diagnostic push @@ -132,16 +133,16 @@ private: static QString trim_filename(const QString& in_) { - QStringRef in(&in_); + auto in = QStringView{in_}; - const int idx = in.lastIndexOf("/"); + const int idx = in.lastIndexOf(QLatin1StringView{"/"}); if (idx != -1) { in = in.mid(idx + 1); - if (in.startsWith(OPENTRACK_LIBRARY_PREFIX) && - in.endsWith("." OPENTRACK_LIBRARY_EXTENSION)) + if (in.startsWith(QLatin1StringView{OPENTRACK_LIBRARY_PREFIX}) && + in.endsWith(QLatin1StringView{"." OPENTRACK_LIBRARY_EXTENSION})) { constexpr unsigned pfx_len = sizeof(OPENTRACK_LIBRARY_PREFIX) - 1; constexpr unsigned rst_len = sizeof("." OPENTRACK_LIBRARY_EXTENSION) - 1; @@ -154,14 +155,13 @@ private: OPENTRACK_LIBRARY_PREFIX "opentrack-tracker-", OPENTRACK_LIBRARY_PREFIX "opentrack-proto-", OPENTRACK_LIBRARY_PREFIX "opentrack-filter-", - OPENTRACK_LIBRARY_PREFIX "opentrack-ext-", OPENTRACK_LIBRARY_PREFIX "opentrack-video-", }; for (auto name : names) { - if (in.startsWith(name)) - return in.mid(std::strlen(name)).toString(); + if (in.startsWith(QLatin1StringView{name})) + return in.mid((int)std::strlen(name)).toString(); } } } @@ -180,20 +180,17 @@ struct Modules final filter_modules(filter(type::Filter)), tracker_modules(filter(type::Tracker)), protocol_modules(filter(type::Protocol)), - extension_modules(filter(type::Extension)), video_modules(filter(type::Video)) {} dylib_list& filters() { return filter_modules; } dylib_list& trackers() { return tracker_modules; } dylib_list& protocols() { return protocol_modules; } - dylib_list& extensions() { return extension_modules; } private: dylib_list module_list; dylib_list filter_modules; dylib_list tracker_modules; dylib_list protocol_modules; - dylib_list extension_modules; dylib_list video_modules; static dylib_list& sorted(dylib_list& xs) @@ -229,7 +226,6 @@ private: { type::Filter, OPENTRACK_LIBRARY_PREFIX "opentrack-filter-*." OPENTRACK_LIBRARY_EXTENSION, }, { type::Tracker, OPENTRACK_LIBRARY_PREFIX "opentrack-tracker-*." OPENTRACK_LIBRARY_EXTENSION, }, { type::Protocol, OPENTRACK_LIBRARY_PREFIX "opentrack-proto-*." OPENTRACK_LIBRARY_EXTENSION, }, - { type::Extension, OPENTRACK_LIBRARY_PREFIX "opentrack-ext-*." OPENTRACK_LIBRARY_EXTENSION, }, { type::Video, OPENTRACK_LIBRARY_PREFIX "opentrack-video-*." OPENTRACK_LIBRARY_EXTENSION, dylib_load_none, }, }; |