28 #ifndef ADDININTERFACE_H 29 #define ADDININTERFACE_H 31 #include "commonGlobal.h" 33 #include "apiFunctionsInc.h" 34 #include "apiFunctionsGraphInc.h" 36 #include "sharedStructuresQt.h" 37 #include "sharedStructures.h" 44 #include <qsharedpointer.h> 46 #include <qapplication.h> 48 #if QT_VERSION < 0x050000 49 #include <qpluginloader.h> 50 #include <qdockwidget.h> 52 #include <QtCore/qpluginloader.h> 53 #include <QtWidgets/qdockwidget.h> 57 #if defined _DEBUG && defined(_MSC_VER) && defined(VISUAL_LEAK_DETECTOR_CMAKE) 59 #define NOMINMAX //instead min, max is defined as macro in winDef.h, included by vld.h 67 #if !defined(Q_MOC_RUN) || defined(ITOMCOMMONQT_MOC) //only moc this file in itomCommonQtLib but not in other libraries or executables linking against this itomCommonQtLib 70 #define PLUGIN_ITOM_API \ 72 void importItomApi(void** apiPtr) \ 73 {ito::ITOM_API_FUNCS = apiPtr;} \ 74 void importItomApiGraph(void** apiPtr) \ 75 { ito::ITOM_API_FUNCS_GRAPH = apiPtr;} \ 84 #define NEW_PLUGININSTANCE(PluginClass) \ 85 PluginClass* newInst = new PluginClass(); \ 86 newInst->setBasePlugin(this); \ 87 *addInInst = qobject_cast<ito::AddInBase*>(newInst); \ 88 m_InstList.append(*addInInst); 96 #define REMOVE_PLUGININSTANCE(PluginClass) \ 99 delete qobject_cast<PluginClass*>(*addInInst); \ 100 m_InstList.removeOne(*addInInst); \ 108 #define REGISTER_FILTERS_AND_WIDGETS \ 109 foreach(ito::AddInAlgo::FilterDef *f, newInst->m_filterList) \ 111 f->m_pBasePlugin = this; \ 113 foreach(ito::AddInAlgo::AlgoWidgetDef *w, newInst->m_algoWidgetList) \ 115 w->m_pBasePlugin = this; \ 250 QPluginLoader *m_loader;
252 virtual void importItomApi(
void** apiPtr) = 0;
253 virtual void importItomApiGraph(
void** apiPtr) = 0;
257 if (qobject_cast<QApplication*>(QCoreApplication::instance()))
268 void **m_apiFunctionsBasePtr;
269 void **m_apiFunctionsGraphBasePtr;
275 m_type(0), m_version(CREATEVERSION(0, 0, 0)), m_filename(
""),
276 m_maxItomVer(MAXVERSION), m_minItomVer(MINVERSION),
277 m_author(
""), m_description(
""), m_detaildescription(
""), m_license(
"LGPL with ITO itom-exception"), m_aboutThis(
""),
279 m_autoSavePolicy(
ito::
autoSaveNever), m_callInitInNewThread(true), m_apiFunctionsBasePtr(NULL), m_apiFunctionsGraphBasePtr(NULL), m_loader(NULL)
283 inline int getType(
void)
const {
return m_type; }
301 const QString
getAuthor(
void)
const {
return m_author; }
315 inline QList<ito::AddInBase *>
getInstList(
void) {
return m_InstList; }
316 inline const QList<ito::AddInBase *> getInstList(
void)
const {
return m_InstList; }
334 void setApiFunctions(
void **apiFunctions);
336 inline void setLoader(QPluginLoader *loader) { m_loader = loader; }
337 inline QPluginLoader * getLoader(
void) {
return m_loader; }
339 bool event(QEvent *e);
364 AddInRef(
void *p,
int t) : type(t), ptr(p) {}
370 const Param getParamRec(
const QString name,
bool *nameCheckOk = NULL)
const;
402 virtual int hasConfDialog(
void);
408 int createdByGUI()
const;
411 void setCreatedByGUI(
int value);
426 bool hasDockWidget(
void)
const;
432 QDockWidget* getDockWidget(
void)
const;
435 virtual void dockWidgetDefaultStyle(
bool &floating,
bool &visible, Qt::DockWidgetArea &defaultArea)
const;
449 int wasalive = m_alive;
467 bool isInitialized(
void)
const;
473 void setInitialized(
bool initialized);
483 QVector<ito::AddInBase::AddInRef *> *
getArgAddIns(
void) {
return &m_hwDecList; }
485 static int getMaximumThreadCount();
486 static RetVal setMaximumThreadCount(
int threadCount);
496 void setIdentifier(
const QString &identifier);
499 void createDockWidget(QString title, QDockWidget::DockWidgetFeatures features, Qt::DockWidgetAreas allowedAreas = Qt::AllDockWidgetAreas, QWidget *content = NULL);
502 ito::RetVal registerExecFunc(
const QString funcName,
const QVector<ito::Param> &
paramsMand,
const QVector<ito::Param> &
paramsOpt,
const QVector<ito::Param> &
paramsOut,
const QString infoString);
514 if (qobject_cast<QApplication*>(QCoreApplication::instance()))
528 inline void incRefCount(
void);
531 void decRefCount(
void);
544 static int m_instCounter;
557 void parametersChanged(QMap<QString, ito::Param> params);
577 virtual ito::RetVal execFunc(
const QString funcName, QSharedPointer<QVector<ito::ParamBase> > paramsMand, QSharedPointer<QVector<ito::ParamBase> > paramsOpt, QSharedPointer<QVector<ito::ParamBase> > paramsOut,
ItomSharedSemaphore *waitCond = NULL);
644 void runStatusChanged(
bool deviceStarted);
707 bool m_interruptFlag;
708 QMutex m_interruptMutex;
714 QVector<
int> m_currentStatus;
715 QVector<
double> m_currentPos;
716 QVector<
double> m_targetPos;
718 bool isMotorMoving()
const 721 foreach(
const int &i, m_currentStatus)
731 void sendStatusUpdate(
const bool statusOnly =
false);
732 void sendTargetUpdate();
739 virtual ito::RetVal waitForDone(
const int timeoutMS = -1,
const QVector<int> axis = QVector<int>() ,
const int flags = 0 ) = 0;
752 inline void setStatus(
int &status,
const int newFlags,
const int keepMask = 0) { status = (status & keepMask) | newFlags; }
765 inline void setStatus(
const QVector<int> &axis,
const int newFlags,
const int keepMask = 0)
767 foreach(
const int &i, axis)
769 setStatus(m_currentStatus[i], newFlags, keepMask);
783 inline void replaceStatus(
int &status,
const int existingFlag,
const int replaceFlag) {
if (status & existingFlag) { status = (status ^ existingFlag) | replaceFlag; } }
796 inline void replaceStatus(
const QVector<int> &axis,
const int existingFlag,
const int replaceFlag)
798 foreach(
const int &i, axis)
800 replaceStatus(m_currentStatus[i], existingFlag, replaceFlag);
813 QMutexLocker locker(&m_interruptMutex);
814 bool res = m_interruptFlag;
815 m_interruptFlag =
false;
830 QMutexLocker locker(&m_interruptMutex);
831 m_interruptFlag =
true;
847 void actuatorStatusChanged(QVector<int> status, QVector<double> actPosition);
858 void targetChanged(QVector<double> targetPositions);
885 virtual ito::RetVal requestStatusAndPosition(
bool sendCurrentPos,
bool sendTargetPos);
901 #if QT_VERSION < 0x050500 920 catAnalyseDataObject = 0x0002,
921 catPlotDataObject = 0x0004
927 iNotSpecified = 0x0000,
928 iReadDataObject = 0x0001,
929 iWriteDataObject = 0x0002,
930 iReadPointCloud = 0x0004,
931 iWritePointCloud = 0x0008,
932 iReadPolygonMesh = 0x0010,
933 iWritePolygonMesh = 0x0020,
934 iPlotSingleObject = 0x0040
937 #if QT_VERSION >= 0x050500 959 m_filterFunc(filterFunc),
960 m_paramFunc(filterParamFunc),
962 m_description(description),
963 m_category(category),
965 m_interfaceMeta(interfaceMeta)
997 m_widgetFunc(algoWidgetFunc),
998 m_paramFunc(algoWidgetParamFunc),
1000 m_description(description),
1001 m_category(category),
1002 m_interface(interf),
1003 m_interfaceMeta(interfaceMeta)
1021 ito::RetVal getFilterList(QHash<QString, FilterDef *> &fList)
const;
1022 ito::RetVal getAlgoWidgetList(QHash<QString, AlgoWidgetDef *> &awList)
const;
1024 ito::RetVal rejectAlgoWidget(
const QString &name);
1029 QHash<QString, FilterDef *> m_filterList;
1030 QHash<QString, AlgoWidgetDef *> m_algoWidgetList;
1032 static ito::RetVal prepareParamVectors(QVector<ito::Param> *paramsMand, QVector<ito::Param> *paramsOpt, QVector<ito::Param> *
paramsOut)
1036 return RetVal(
ito::retError, 0, tr(
"uninitialized vector for mandatory parameters!").toLatin1().data());
1040 return RetVal(
ito::retError, 0, tr(
"uninitialized vector for optional parameters!").toLatin1().data());
1044 return RetVal(
ito::retError, 0, tr(
"uninitialized vector for output parameters!").toLatin1().data());
1046 paramsMand->clear();
1060 #endif //#if !defined(Q_MOC_RUN) || defined(ITOMCOMMONQT_MOC) 1079 static const char* ito_AddInInterface_OldVersions[] = {
1080 "ito.AddIn.InterfaceBase/1.0",
1081 "ito.AddIn.InterfaceBase/1.1",
1082 "ito.AddIn.InterfaceBase/1.1.1",
1083 "ito.AddIn.InterfaceBase/1.1.2",
1084 "ito.AddIn.InterfaceBase/1.1.3",
1085 "ito.AddIn.InterfaceBase/1.1.4",
1086 "ito.AddIn.InterfaceBase/1.1.5",
1087 "ito.AddIn.InterfaceBase/1.1.6",
1088 "ito.AddIn.InterfaceBase/1.1.7",
1089 "ito.AddIn.InterfaceBase/1.1.8",
1090 "ito.AddIn.InterfaceBase/1.1.9",
1091 "ito.AddIn.InterfaceBase/1.1.10",
1092 "ito.AddIn.InterfaceBase/1.1.11",
1093 "ito.AddIn.InterfaceBase/1.1.12",
1094 "ito.AddIn.InterfaceBase/1.1.13",
1095 "ito.AddIn.InterfaceBase/1.1.14",
1096 "ito.AddIn.InterfaceBase/1.1.15",
1097 "ito.AddIn.InterfaceBase/1.1.16",
1098 "ito.AddIn.InterfaceBase/1.1.17",
1099 "ito.AddIn.InterfaceBase/1.1.18",
1100 "ito.AddIn.InterfaceBase/1.1.19",
1101 "ito.AddIn.InterfaceBase/1.1.20",
1102 "ito.AddIn.InterfaceBase/1.1.21",
1103 "ito.AddIn.InterfaceBase/1.1.22",
1104 "ito.AddIn.InterfaceBase/1.1.23",
1105 "ito.AddIn.InterfaceBase/1.1.24",
1106 "ito.AddIn.InterfaceBase/1.2.0",
1107 "ito.AddIn.InterfaceBase/1.2.1",
1108 "ito.AddIn.InterfaceBase/1.3.0",
1109 "ito.AddIn.InterfaceBase/1.3.1",
1110 "ito.AddIn.InterfaceBase/1.4.0",
1111 "ito.AddIn.InterfaceBase/2.0.0",
1112 "ito.AddIn.InterfaceBase/2.1.0",
1113 "ito.AddIn.InterfaceBase/2.2.0",
1114 "ito.AddIn.InterfaceBase/2.3.0",
1115 "ito.AddIn.InterfaceBase/2.4.0",
1116 "ito.AddIn.InterfaceBase/2.5.0",
1117 "ito.AddIn.InterfaceBase/2.6.0",
1122 #define CREATE_ADDININTERFACE_VERSION_STR(major,minor,patch) "ito.AddIn.InterfaceBase/"#major"."#minor"."#patch 1123 #define CREATE_ADDININTERFACE_VERSION(major,minor,patch) ((major<<16)|(minor<<8)|(patch)) 1125 #define ITOM_ADDININTERFACE_MAJOR 3 1126 #define ITOM_ADDININTERFACE_MINOR 0 1127 #define ITOM_ADDININTERFACE_PATCH 0 1128 #define ITOM_ADDININTERFACE_VERSION CREATE_ADDININTERFACE_VERSION(ITOM_ADDININTERFACE_MAJOR,ITOM_ADDININTERFACE_MINOR,ITOM_ADDININTERFACE_PATCH) 1129 static const char* ito_AddInInterface_CurrentVersion = CREATE_ADDININTERFACE_VERSION_STR(3, 0, 0);
AddInBasePrivate * aibp
pointer to private class of AddInBase defined in AddInInterface.cpp. This container is used to allow ...
Definition: addInInterface.h:540
Definition: addInInterface.h:178
Definition: addInInterface.h:164
tAutoLoadPolicy getAutoLoadPolicy(void) const
returns true if the plugin allows his own parameter load to be autoloaded by addin manager ...
Definition: addInInterface.h:295
PyObject * setParam(ito::AddInBase *addInObj, PyObject *args)
Definition: pythonPlugins.cpp:1048
const ito::RetVal getExecFuncList(QMap< QString, ExecFuncParams > **funcs)
returns list of registered additional functions
Definition: addInInterface.h:393
Definition: addInInterface.h:182
bool hasGuiSupport()
check if we have gui support
Definition: addInInterface.h:512
QString m_description
description of filter
Definition: addInInterface.h:974
AddInInterfaceBase()
default constructor
Definition: addInInterface.h:274
Definition: addInInterface.h:155
tPluginType
tPluginType enumeration
Definition: addInInterface.h:127
void setStatus(int &status, const int newFlags, const int keepMask=0)
sets status flags of given status variable
Definition: addInInterface.h:752
base class for all actuator plugin classes
Definition: addInInterface.h:700
dataObject contains a n-dimensional matrix
Definition: dataobj.h:496
Definition: addInInterface.h:151
ito::AddInAlgo::tAlgoInterface m_interface
algorithm interface, filter fits to (default: iNotSpecified)
Definition: addInInterface.h:976
QVector< ito::Param > m_initParamsMand
vector with the mandatory initialisation parameters, please only read this vector within the init-met...
Definition: addInInterface.h:244
Definition: addInInterface.h:149
const ito::RetVal getParamList(QMap< QString, Param > **paramNames)
returns a map with the parameters of this plugin.
Definition: addInInterface.h:385
QString m_description
a brief descrition of the plugin
Definition: addInInterface.h:239
void replaceStatus(const QVector< int > &axis, const int existingFlag, const int replaceFlag)
changes the status flags of the status of the given axes from one existing to a new value ...
Definition: addInInterface.h:796
Definition: typeDefs.h:60
Definition: addInInterface.h:161
Class for managing status values (like errors or warning)
Definition: retVal.h:54
class for parameter handling e.g. to pass paramters to plugins
Definition: param.h:251
Definition: addInInterface.h:130
const QString getAboutInfo(void) const
returns a detailed description of the plugin compile informations
Definition: addInInterface.h:309
base class for all dataIO plugin classes
Definition: addInInterface.h:633
Definition: addInInterface.h:157
int m_timerIntervalMS
Definition: addInInterface.h:650
Base class for all plugins.
Definition: addInInterface.h:356
bool m_autoGrabbingEnabled
Definition: addInInterface.h:651
QString m_name
name of filter
Definition: addInInterface.h:973
tAutoSavePolicy m_autoSavePolicy
Definition: addInInterface.h:248
tAutoLoadPolicy m_autoLoadPolicy
Definition: addInInterface.h:247
PyObject * getParam(ito::AddInBase *addInObj, PyObject *args)
Definition: pythonPlugins.cpp:741
tActuatorStatus
tActuatorStatus enumeration
Definition: addInInterface.h:146
ito::AddInInterfaceBase * m_pBasePlugin
interface (factory) instance of this plugin (will be automatically filled)
Definition: addInInterface.h:972
base class for all "algorithm" plugin classes
Definition: addInInterface.h:897
Definition: addInInterface.h:150
int getMaxItomVer(void) const
returns maximum supported version of main program
Definition: addInInterface.h:289
int getInstCount()
get number instantiated plugins
Definition: addInInterface.h:332
void sendParameterRequest()
immediately emits the signal parametersChanged
Definition: addInInterface.h:590
int m_version
plugin version
Definition: addInInterface.h:234
Definition: typeDefs.h:58
ito::RetVal(* t_filterParam)(QVector< ito::Param > *paramsMand, QVector< ito::Param > *paramsOpt, QVector< ito::Param > *paramsOut)
possible categories for filter or widget-methods
Definition: addInInterface.h:913
Definition: addInInterface.h:162
tAutoSavePolicy getAutoSavePolicy(void) const
returns true if the plugin allows his own parameter save to be autoloaded by addin manager ...
Definition: addInInterface.h:298
void replaceStatus(int &status, const int existingFlag, const int replaceFlag)
changes the status bit of the given status value from one existing to a new value.
Definition: addInInterface.h:783
Definition: addInInterface.h:129
Definition: addInInterface.cpp:117
virtual QVector< ito::Param > * getInitParamsMand(void)
returns a vector with the mandatory initialisation parameters
Definition: addInInterface.h:320
QVector< Param > paramsOpt
Definition: addInInterface.h:185
Definition: addInInterface.h:165
tAutoSavePolicy
Definition: addInInterface.h:177
QVector< Param > paramsMand
Definition: addInInterface.h:184
void setInterrupt()
set interrupt flag (thread-safe)
Definition: addInInterface.h:828
QString m_license
a short license string for the plugin, default value is "LGPL with ITO itom-exception" ...
Definition: addInInterface.h:241
Definition: apiFunctionsGraph.cpp:39
default: no category
Definition: addInInterface.h:918
bool hasGuiSupport()
check if we have gui support
Definition: addInInterface.h:255
int getRefCount(void) const
Returns the reference counter of this instance.
Definition: addInInterface.h:417
t_filter m_filterFunc
function pointer (unbounded, static) for filter-method
Definition: addInInterface.h:970
Definition: addInInterface.h:154
int getVersion(void) const
returns addIn version
Definition: addInInterface.h:285
bool getCallInitInNewThread(void) const
returns whether init-method should be called in new thread (default) or still in main thread ...
Definition: addInInterface.h:292
Definition: addInInterface.h:173
void setStatus(const QVector< int > &axis, const int newFlags, const int keepMask=0)
sets status flags of the status of the given axes
Definition: addInInterface.h:765
FilterDef()
< empty, default constructor
Definition: addInInterface.h:949
QVector< ito::Param > m_initParamsOpt
vector with the optional initialisation parameters, please only read this vector within the init-meth...
Definition: addInInterface.h:245
Definition: addInInterface.h:159
semaphore which can be used for asychronous thread communication. By using this class it is possible ...
Definition: sharedStructuresQt.h:57
int m_type
plugin type
Definition: addInInterface.h:233
Definition: addInInterface.h:172
Definition: addInInterface.h:362
Definition: addInInterface.h:179
virtual QVector< ito::Param > * getInitParamsOpt(void)
returns a vector with the optional initialisation parameters
Definition: addInInterface.h:322
QVector< ito::AddInBase::AddInRef * > m_hwDecList
list of hardware that was passed to the plugin on initialisation and whose refcounter was incremented...
Definition: addInInterface.h:535
Definition: addInInterface.h:131
QMutex m_refCountMutex
mutex for making the reference counting mechanism thread-safe.
Definition: addInInterface.h:537
int m_minItomVer
maximum supported version of the main program
Definition: addInInterface.h:237
static int maxThreadCount
maximum number of threads algorithms can use e.g. with OpenMP parallelization. This is a number betwe...
Definition: addInInterface.h:545
Definition: addInInterface.h:168
QString m_identifier
unique identifier (serial number, com-port...)
Definition: addInInterface.h:509
Definition: addInInterface.h:128
int m_timerID
Definition: addInInterface.h:649
QString m_author
the plugin author
Definition: addInInterface.h:238
forward declaration to private container class of AddInBase
Definition: addInInterface.h:224
QList< ito::AddInBase * > m_InstList
vector holding a list of the actual instantiated classes of the plugin
Definition: addInInterface.h:243
virtual void dockWidgetVisibilityChanged(bool)
overwrite this slot if you want to get informed when the dock-widget of the plugin becomes (in)visibl...
Definition: addInInterface.h:603
QVector< ito::AddInBase::AddInRef * > * getArgAddIns(void)
returns vector of AddInRef instances.
Definition: addInInterface.h:483
Definition: addInInterface.h:132
QMutex m_atomicMutex
mutex for protecting atomic getter and setter methods (e.g. alive and initialized) ...
Definition: addInInterface.h:539
tAutoLoadPolicy
Definition: addInInterface.h:171
int m_refCount
reference counter, used to avoid early deletes (0 means that one instance is holding one reference...
Definition: addInInterface.h:534
Definition: addInInterface.h:156
default: filter or widget does not fit to any interface
Definition: addInInterface.h:927
const QString getLicenseInfo(void) const
returns a detailed description of the plugin license
Definition: addInInterface.h:307
int getMinItomVer(void) const
returns minimum required version of main program
Definition: addInInterface.h:287
int getAutoGrabbing()
Definition: addInInterface.h:654
QSet< QObject * > m_autoGrabbingListeners
Definition: addInInterface.h:648
Definition: addInInterface.h:174
QList< ito::AddInBase * > getInstList(void)
returns a list of the actual intantiated classes from this plugin
Definition: addInInterface.h:315
void setAlive(void)
sets the alive-flag to 1 ("still alive")
Definition: addInInterface.h:460
tAlgoCategory
Definition: addInInterface.h:916
QMap< QString, ExecFuncParams > m_execFuncList
map with registered additional functions. funcExec-name -> (default mandParams, default optParams...
Definition: addInInterface.h:536
int isAlive(void)
returns the alive-flag of this plugin
Definition: addInInterface.h:446
const QString getAuthor(void) const
returns plugin author
Definition: addInInterface.h:301
const QString getDetailDescription(void) const
returns a detailed description of the plugin
Definition: addInInterface.h:305
int getType(void) const
returns addIn type
Definition: addInInterface.h:283
Definition: addInInterface.h:158
Definition: addInInterface.h:166
Definition: addInInterface.h:133
QString m_interfaceMeta
meta information if required by algorithm interface
Definition: addInInterface.h:977
QMap< QString, Param > m_params
map of the available parameters
Definition: addInInterface.h:507
Definition: apiFunctionsGraph.h:38
QString m_filename
plugin (library) filename on the disc
Definition: addInInterface.h:235
ito::AddInAlgo::tAlgoCategory m_category
category, filter belongs to (default: catNone)
Definition: addInInterface.h:975
Definition: addInInterface.h:152
bool isInterrupted()
returns interrupt flag (thread-safe)
Definition: addInInterface.h:811
bool m_callInitInNewThread
Definition: addInInterface.h:249
t_filterParam m_paramFunc
function pointer (unbounded, static) for filter's default parameter method
Definition: addInInterface.h:971
QVector< Param > paramsOut
Definition: addInInterface.h:186
int m_maxItomVer
minimum required version of the main program
Definition: addInInterface.h:236
const QString getDescription(void) const
returns a brief description of the plugin
Definition: addInInterface.h:303
int m_alive
member to check if thread is still responsive
Definition: addInInterface.h:538
tAlgoInterface
Definition: addInInterface.h:925
Definition: addInInterface.h:148
const QString getFilename(void) const
returns the plugin's filename
Definition: addInInterface.h:311
Definition: addInInterface.h:167
QString getIdentifier() const
retrieve the unique identifier of this instance
Definition: addInInterface.h:399
Definition: addInInterface.h:190
container for publishing filters provided by any plugin
Definition: addInInterface.h:945
QString m_detaildescription
a detail descrition of the plugin
Definition: addInInterface.h:240