diff options
| author | Stanislaw Halik <sthalik@misaki.pl> | 2017-12-03 22:23:08 +0100 | 
|---|---|---|
| committer | Stanislaw Halik <sthalik@misaki.pl> | 2017-12-04 12:19:26 +0100 | 
| commit | b256886a5cb9f2ae3ebda70a2045b19ed9f4233e (patch) | |
| tree | 4fa1e46de224cf834a05824dc1eb86001bdb3300 /api | |
| parent | e89709a801e7874bc02c66848c638c6a0ccc85c1 (diff) | |
api: add status check for modules
Diffstat (limited to 'api')
| -rw-r--r-- | api/plugin-api.cpp | 21 | ||||
| -rw-r--r-- | api/plugin-api.hpp | 31 | 
2 files changed, 45 insertions, 7 deletions
| diff --git a/api/plugin-api.cpp b/api/plugin-api.cpp index c28b5d4e..eed377b0 100644 --- a/api/plugin-api.cpp +++ b/api/plugin-api.cpp @@ -26,6 +26,16 @@ void BaseDialog::closeEvent(QCloseEvent*)  bool ITracker::center() { return false; } +module_status ITracker::status_ok() +{ +    return module_status(); +} + +module_status ITracker::error(const QString& error) +{ +    return module_status(error); +} +  Metadata::Metadata() {}  IFilter::IFilter() {}  IFilterDialog::IFilterDialog() {} @@ -46,3 +56,14 @@ void BaseDialog::done(int)  IExtensionDialog::~IExtensionDialog()  {  } + +bool module_status::is_ok() const +{ +    return error.isEmpty(); +} + +module_status::module_status(const QString& error) : error(error) {} + +module_status module_status_mixin::status_ok() { return module_status(); } + +module_status module_status_mixin::error(const QString& error) { return module_status(error); } diff --git a/api/plugin-api.hpp b/api/plugin-api.hpp index 29f678f3..15a2cc48 100644 --- a/api/plugin-api.hpp +++ b/api/plugin-api.hpp @@ -82,8 +82,24 @@ struct OTR_API_EXPORT Metadata      virtual ~Metadata();  }; +struct OTR_API_EXPORT module_status final +{ +    QString error; + +    bool is_ok() const; +    module_status(const QString& error = QString()); +}; + +struct OTR_API_EXPORT module_status_mixin +{ +    static module_status status_ok(); +    static module_status error(const QString& error); + +    virtual module_status check_status() = 0; +}; +  // implement this in filters -struct OTR_API_EXPORT IFilter +struct OTR_API_EXPORT IFilter : module_status_mixin  {      IFilter(const IFilter&) = delete;      IFilter(IFilter&&) = delete; @@ -116,7 +132,7 @@ struct OTR_API_EXPORT IFilterDialog : public plugin_api::detail::BaseDialog      OPENTRACK_DECLARE_PLUGIN_INTERNAL(filter_class, IFilter, metadata_class, dialog_class, IFilterDialog)  // implement this in protocols -struct OTR_API_EXPORT IProtocol +struct OTR_API_EXPORT IProtocol : module_status_mixin  {      IProtocol(); @@ -126,10 +142,8 @@ struct OTR_API_EXPORT IProtocol      // optional destructor      virtual ~IProtocol(); -    // return true if protocol was properly initialized -    virtual bool correct() = 0;      // called 250 times a second with XYZ yaw pitch roll pose -    // try not to perform intense computation here. if you must, use a thread. +    // try not to perform intense computation here. use a thread.      virtual void pose(const double* headpose) = 0;      // return game name or placeholder text      virtual QString game_name() = 0; @@ -159,13 +173,16 @@ struct OTR_API_EXPORT ITracker      // optional destructor      virtual ~ITracker();      // start tracking, and grab a frame to display webcam video in, optionally -    virtual void start_tracker(QFrame* frame) = 0; +    virtual module_status start_tracker(QFrame* frame) = 0;      // return XYZ yaw pitch roll data. don't block here, use a separate thread for computation.      virtual void data(double *data) = 0;      // tracker notified of centering      // returning true makes identity the center pose      virtual bool center(); +    static module_status status_ok(); +    static module_status error(const QString& error); +      ITracker(const ITracker&) = delete;      ITracker(ITracker&&) = delete;      ITracker& operator=(const ITracker&) = delete; @@ -187,7 +204,7 @@ 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 +struct OTR_API_EXPORT IExtension : module_status_mixin  {      enum event_mask : unsigned      { | 
