Compare commits

..

4 Commits

Author SHA1 Message Date
4b38e2e46e Test CRTP. 2023-11-24 13:45:11 +01:00
9fa37d125d Fix interfaces(). 2023-11-17 13:47:55 +01:00
00dbf4485a Implement interfaces(). 2023-11-17 13:44:45 +01:00
88670c1079 Add CLASSINFO() to enumerate supported interfaces. 2023-11-17 13:44:16 +01:00
5 changed files with 36 additions and 15 deletions

View File

@@ -7,6 +7,9 @@
#include <QObject> #include <QObject>
#include <QStringList> #include <QStringList>
class UnifiedDCVMCInterface;
template <typename T>
struct ATBAPPplugin { struct ATBAPPplugin {
enum class PLUGIN_STATE : quint8 { enum class PLUGIN_STATE : quint8 {
NOT_INITIALIZED = 0, NOT_INITIALIZED = 0,
@@ -54,14 +57,14 @@ struct ATBAPPplugin {
} }
}; };
using PLUGIN_STATE = ATBAPPplugin::PLUGIN_STATE; using PLUGIN_STATE = ATBAPPplugin<UnifiedDCVMCInterface>::PLUGIN_STATE;
using RESULT_STATE = ATBAPPplugin::RESULT_STATE; using RESULT_STATE = ATBAPPplugin<UnifiedDCVMCInterface>::RESULT_STATE;
using CASH_STATE = ATBAPPplugin::CASH_STATE; using CASH_STATE = ATBAPPplugin<UnifiedDCVMCInterface>::CASH_STATE;
using TICKET_VARIANT = ATBAPPplugin::TICKET_VARIANT; using TICKET_VARIANT = ATBAPPplugin<UnifiedDCVMCInterface>::TICKET_VARIANT;
using STEP = ATBAPPplugin::STEP; using STEP = ATBAPPplugin<UnifiedDCVMCInterface>::STEP;
using TERMINAL_STATE = ATBAPPplugin::TERMINAL_STATE; using TERMINAL_STATE = ATBAPPplugin<UnifiedDCVMCInterface>::TERMINAL_STATE;
Q_DECLARE_INTERFACE(ATBAPPplugin, //Q_DECLARE_INTERFACE(ATBAPPplugin,
"eu.atb.ptu.plugin.ATBAPPplugin/0.9") // "eu.atb.ptu.plugin.ATBAPPplugin/0.9")
#endif // ATBAPPPLUGIN_H #endif // ATBAPPPLUGIN_H

View File

@@ -181,6 +181,18 @@ void ATBVMCPlugin::reset() {
} }
QStringList ATBVMCPlugin::interfaces() const {
QStringList result;
int const count = this->metaObject()->classInfoCount();
for (int i = 0; i < count; ++i) {
QString const name(QString::fromLatin1(this->metaObject()->classInfo(i).name()));
QString const value(QString::fromLatin1(this->metaObject()->classInfo(i).value()));
if (name == "Interface") {
result << value;
}
}
return result;
}
#if QT_VERSION < 0x050000 #if QT_VERSION < 0x050000
Q_EXPORT_PLUGIN2(ATBVMCPlugin, ATBVMCPlugin) Q_EXPORT_PLUGIN2(ATBVMCPlugin, ATBVMCPlugin)

View File

@@ -15,6 +15,7 @@ class ATBVMCPlugin : public VMCInterface {
Q_OBJECT Q_OBJECT
Q_INTERFACES(VMCInterface) Q_INTERFACES(VMCInterface)
Q_CLASSINFO("Interface", "VMCInterface")
#if QT_VERSION >= 0x050000 #if QT_VERSION >= 0x050000
Q_PLUGIN_METADATA(IID "eu.atb.ptu.plugin.ATBVMCPlugin") Q_PLUGIN_METADATA(IID "eu.atb.ptu.plugin.ATBVMCPlugin")
@@ -42,6 +43,8 @@ public:
// helpers e.g. for debug / log // helpers e.g. for debug / log
virtual QString const &getString(RESULT_STATE resultState) override; virtual QString const &getString(RESULT_STATE resultState) override;
QStringList interfaces() const;
public slots: public slots:
virtual void onChangedProgramModeToSELL() override; virtual void onChangedProgramModeToSELL() override;
virtual void onChangedProgramModeToSERVICE() override; virtual void onChangedProgramModeToSERVICE() override;

View File

@@ -12,8 +12,9 @@
#include "ATBAPPplugin.h" #include "ATBAPPplugin.h"
class UnifiedDCVMCInterface : public ATBAPPplugin { class UnifiedDCVMCInterface : public ATBAPPplugin<UnifiedDCVMCInterface> {
Q_INTERFACES(ATBAPPplugin) //Q_INTERFACES(ATBAPPplugin)
//Q_CLASSINFO("Interface", "ATBAPPplugin")
public: public:
explicit UnifiedDCVMCInterface() = default; explicit UnifiedDCVMCInterface() = default;
@@ -44,7 +45,7 @@ public:
virtual QString const &getString(RESULT_STATE resultState) = 0; virtual QString const &getString(RESULT_STATE resultState) = 0;
public slots: //public slots:
virtual void onChangedProgramModeToSELL() = 0; virtual void onChangedProgramModeToSELL() = 0;
virtual void onChangedProgramModeToSERVICE() = 0; virtual void onChangedProgramModeToSERVICE() = 0;
virtual void onChangedProgramModeToIDLE() = 0; virtual void onChangedProgramModeToIDLE() = 0;
@@ -56,7 +57,7 @@ public slots:
virtual void reset() = 0; virtual void reset() = 0;
}; };
Q_DECLARE_INTERFACE(UnifiedDCVMCInterface, //Q_DECLARE_INTERFACE(UnifiedDCVMCInterface,
"eu.atb.ptu.plugin.UnifiedDCVMCInterface/1.0") // "eu.atb.ptu.plugin.UnifiedDCVMCInterface/1.0")
#endif // UNIFIED_DCVMC_INTERFACE_H_INCLUDED #endif // UNIFIED_DCVMC_INTERFACE_H_INCLUDED

View File

@@ -20,8 +20,10 @@ namespace nsVMCInterface {
class VMCInterface : public QObject, public UnifiedDCVMCInterface { class VMCInterface : public QObject, public UnifiedDCVMCInterface {
Q_OBJECT Q_OBJECT
Q_INTERFACES(ATBAPPplugin UnifiedDCVMCInterface) //Q_INTERFACES(ATBAPPplugin UnifiedDCVMCInterface)
//Q_INTERFACES(UnifiedDCVMCInterface)
//Q_CLASSINFO("Interface", "ATBAPPplugin")
//Q_CLASSINFO("Interface", "UnifiedDCVMCInterface")
public: public:
explicit VMCInterface(QObject *parent = nullptr) : QObject(parent) {} explicit VMCInterface(QObject *parent = nullptr) : QObject(parent) {}