28 #ifndef ADDININTERFACE_H
29 #define ADDININTERFACE_H
31 #include "commonGlobal.h"
33 #include "apiFunctionsInc.h"
34 #include "apiFunctionsGraphInc.h"
36 #include "addInInterfaceVersion.h"
37 #include "sharedStructuresQt.h"
38 #include "sharedStructures.h"
39 #include "functionCancellationAndObserver.h"
46 #include <qsharedpointer.h>
48 #include <qapplication.h>
49 #include <qscopedpointer.h>
50 #include <QtWidgets/qdockwidget.h>
53 #if defined _DEBUG && defined(_MSC_VER) && defined(VISUAL_LEAK_DETECTOR_CMAKE)
55 #define NOMINMAX //instead min, max is defined as macro in winDef.h, included by vld.h
63 #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 NEW_PLUGININSTANCE(PluginClass) \
71 PluginClass* newInst = new PluginClass(); \
72 newInst->setBasePlugin(this); \
73 *addInInst = qobject_cast<ito::AddInBase*>(newInst); \
74 m_InstList.append(*addInInst);
82 #define REMOVE_PLUGININSTANCE(PluginClass) \
85 (*addInInst)->deleteLater(); \
86 m_InstList.removeOne(*addInInst); \
94 #define REGISTER_FILTERS_AND_WIDGETS \
95 foreach(ito::AddInAlgo::FilterDef *f, newInst->m_filterList) \
97 f->m_pBasePlugin = this; \
99 foreach(ito::AddInAlgo::AlgoWidgetDef *w, newInst->m_algoWidgetList) \
101 w->m_pBasePlugin = this; \
105 #define PLUGIN_ITOM_API \
107 void importItomApi(void** apiPtr) \
108 {ito::ITOM_API_FUNCS = apiPtr;} \
109 void importItomApiGraph(void** apiPtr) \
110 { ito::ITOM_API_FUNCS_GRAPH = apiPtr;} \
112 virtual int getAddInInterfaceVersion() const \
113 { return ITOM_ADDININTERFACE_VERSION; } \
171 actuatorError = 0x10000,
211 QVector<Param> paramsMand;
212 QVector<Param> paramsOpt;
213 QVector<Param> paramsOut;
256 QScopedPointer<AddInInterfaceBasePrivate> d_ptr;
278 virtual void importItomApi(
void** apiPtr) = 0;
279 virtual void importItomApiGraph(
void** apiPtr) = 0;
284 if (qobject_cast<QApplication*>(QCoreApplication::instance()))
295 void **m_apiFunctionsBasePtr;
296 void **m_apiFunctionsGraphBasePtr;
308 virtual int getAddInInterfaceVersion()
const = 0;
311 inline int getType(
void)
const {
return m_type; }
329 const QString
getAuthor(
void)
const {
return m_author; }
343 inline QList<ito::AddInBase *>
getInstList(
void) {
return m_InstList; }
344 inline const QList<ito::AddInBase *> getInstList(
void)
const {
return m_InstList; }
362 void setApiFunctions(
void **apiFunctions);
365 void setLoader(QPluginLoader *loader);
366 QPluginLoader * getLoader(
void)
const;
368 bool event(QEvent *e);
393 AddInRef(
void *p,
int t) : type(t), ptr(p) {}
399 const Param getParamRec(
const QString name,
bool *nameCheckOk = NULL)
const;
431 virtual int hasConfDialog(
void);
437 int createdByGUI()
const;
440 void setCreatedByGUI(
int value);
446 int getRefCount(
void)
const;
452 bool hasDockWidget(
void)
const;
458 QDockWidget* getDockWidget(
void)
const;
461 virtual void dockWidgetDefaultStyle(
bool &floating,
bool &visible, Qt::DockWidgetArea &defaultArea)
const;
483 bool isInitialized(
void)
const;
489 void setInitialized(
bool initialized);
499 QVector<ito::AddInBase::AddInRef *> *
getArgAddIns(
void) {
return &m_hwDecList; }
513 QMutex& getUserMutex();
515 static int getMaximumThreadCount();
517 static RetVal setMaximumThreadCount(
int threadCount);
527 void setIdentifier(
const QString &identifier);
530 void createDockWidget(QString title, QDockWidget::DockWidgetFeatures features, Qt::DockWidgetAreas allowedAreas = Qt::AllDockWidgetAreas, QWidget *content = NULL);
533 ito::RetVal registerExecFunc(
const QString funcName,
const QVector<ito::Param> ¶msMand,
const QVector<ito::Param> ¶msOpt,
const QVector<ito::Param> ¶msOut,
const QString infoString);
545 if (qobject_cast<QApplication*>(QCoreApplication::instance()))
559 void incRefCount(
void);
562 void decRefCount(
void);
572 static
int m_instCounter;
573 static
int maxThreadCount;
585 void parametersChanged(QMap<QString,
ito::
Param> params);
618 void sendParameterRequest(){ emit parametersChanged(m_params); };
668 QScopedPointer<AddInDataIOPrivate> d_ptr;
675 void runStatusChanged(
bool deviceStarted);
745 QScopedPointer<AddInActuatorPrivate> d_ptr;
756 bool isMotorMoving()
const;
759 void sendStatusUpdate(
const bool statusOnly =
false);
760 void sendTargetUpdate();
767 virtual ito::RetVal waitForDone(
const int timeoutMS = -1,
const QVector<int> axis = QVector<int>() ,
const int flags = 0 ) = 0;
780 void setStatus(
int &status,
const int newFlags,
const int keepMask = 0);
793 void setStatus(
const QVector<int> &axis,
const int newFlags,
const int keepMask = 0);
805 void replaceStatus(
int &status,
const int existingFlag,
const int replaceFlag);
818 void replaceStatus(
const QVector<int> &axis,
const int existingFlag,
const int replaceFlag);
825 void initStatusAndPositions(
int numAxes,
int status,
double currentPosition = 0.0,
double targetPosition = 0.0,
bool sendUpdateSignals =
true);
834 bool isInterrupted();
853 void resetInterrupt();
864 ito::RetVal getLastSignalledStates(QVector<int> &status, QVector<double> ¤tPos, QVector<double> &targetPos);
877 void actuatorStatusChanged(QVector<int> status, QVector<double> actPosition);
888 void targetChanged(QVector<double> targetPositions);
917 virtual ito::RetVal requestStatusAndPosition(
bool sendCurrentPos,
bool sendTargetPos);
936 QScopedPointer<AddInAlgoPrivate> d_ptr;
940 typedef ito::RetVal (*t_filter) (QVector<ito::ParamBase> *paramsMand, QVector<ito::ParamBase> *paramsOpt, QVector<ito::ParamBase> *paramsOut);
941 typedef ito::RetVal (*t_filterExt) (QVector<ito::ParamBase> *paramsMand, QVector<ito::ParamBase> *paramsOpt, QVector<ito::ParamBase> *paramsOut, QSharedPointer<ito::FunctionCancellationAndObserver> observer);
942 typedef QWidget* (*t_algoWidget) (QVector<ito::ParamBase> *paramsMand, QVector<ito::ParamBase> *paramsOpt,
ito::RetVal &retValue);
943 typedef ito::RetVal (*t_filterParam)(QVector<ito::Param> *paramsMand, QVector<ito::Param> *paramsOpt, QVector<ito::Param> *paramsOut);
950 catAnalyseDataObject = 0x0002,
951 catPlotDataObject = 0x0004
957 iNotSpecified = 0x0000,
958 iReadDataObject = 0x0001,
959 iWriteDataObject = 0x0002,
960 iReadPointCloud = 0x0004,
961 iWritePointCloud = 0x0008,
962 iReadPolygonMesh = 0x0010,
963 iWritePolygonMesh = 0x0020,
964 iPlotSingleObject = 0x0040
969 Q_ENUM(tAlgoCategory)
970 Q_ENUM(tAlgoInterface)
989 QString interfaceMeta = QString()) :
990 m_filterFunc(filterFunc),
991 m_paramFunc(filterParamFunc),
993 m_description(description),
994 m_category(category),
996 m_interfaceMeta(interfaceMeta)
999 virtual ~FilterDef() {}
1010 FilterDef(
const FilterDef & );
1020 m_filterFuncExt(NULL)
1027 QString interfaceMeta = QString(),
bool hasStatusInfo =
true,
bool isCancellable =
true) :
1028 FilterDef(NULL, filterParamFunc, description, category, interf, interfaceMeta),
1029 m_filterFuncExt(filterFuncExt),
1030 m_hasStatusInformation(hasStatusInfo),
1031 m_isCancellable(isCancellable)
1034 virtual ~FilterDefExt() {}
1052 m_pBasePlugin(NULL),
1059 m_widgetFunc(algoWidgetFunc),
1060 m_paramFunc(algoWidgetParamFunc),
1061 m_pBasePlugin(NULL),
1062 m_description(description),
1063 m_category(category),
1064 m_interface(interf),
1065 m_interfaceMeta(interfaceMeta)
1083 ito::RetVal getFilterList(QHash<QString, FilterDef *> &fList)
const;
1084 ito::RetVal getAlgoWidgetList(QHash<QString, AlgoWidgetDef *> &awList)
const;
1086 ito::RetVal rejectAlgoWidget(
const QString &name);
1091 QHash<QString, FilterDef *> m_filterList;
1092 QHash<QString, AlgoWidgetDef *> m_algoWidgetList;
1095 static ito::RetVal prepareParamVectors(QVector<ito::Param> *paramsMand, QVector<ito::Param> *paramsOpt, QVector<ito::Param> *paramsOut);
1105 #endif //#if !defined(Q_MOC_RUN) || defined(ITOMCOMMONQT_MOC)
Definition: addInInterface.h:196
Definition: addInInterface.h:173
tAutoLoadPolicy getAutoLoadPolicy(void) const
returns true if the plugin allows his own parameter load to be autoloaded by addin manager ...
Definition: addInInterface.h:323
QVector< double > m_currentPos
Definition: addInInterface.h:753
PyObject * setParam(ito::AddInBase *addInObj, PyObject *args)
Definition: pythonPlugins.cpp:1347
const ito::RetVal getExecFuncList(QMap< QString, ExecFuncParams > **funcs)
returns list of registered additional functions
Definition: addInInterface.h:422
Definition: addInInterface.h:200
bool hasGuiSupport()
check if we have gui support
Definition: addInInterface.h:543
QString m_description
description of filter
Definition: addInInterface.h:1005
Definition: addInInterface.h:158
tPluginType
tPluginType enumeration
Definition: addInInterface.h:128
base class for all actuator plugin classes
Definition: addInInterface.h:738
dataObject contains a n-dimensional matrix
Definition: dataobj.h:511
Definition: addInInterface.h:154
ito::AddInAlgo::tAlgoInterface m_interface
algorithm interface, filter fits to (default: iNotSpecified)
Definition: addInInterface.h:1007
QVector< double > m_targetPos
Definition: addInInterface.h:754
QVector< ito::Param > m_initParamsMand
vector with the mandatory initialisation parameters, please only read this vector within the init-met...
Definition: addInInterface.h:271
Definition: addInInterface.h:152
const ito::RetVal getParamList(QMap< QString, Param > **paramNames)
returns a map with the parameters of this plugin.
Definition: addInInterface.h:414
QString m_description
a brief descrition of the plugin
Definition: addInInterface.h:266
Definition: addInInterface.h:166
Definition: addInInterface.h:169
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:283
Definition: addInInterface.h:132
const QString getAboutInfo(void) const
returns a detailed description of the plugin compile informations
Definition: addInInterface.h:337
base class for all dataIO plugin classes
Definition: addInInterface.h:661
Definition: addInInterface.h:162
int m_timerIntervalMS
Definition: addInInterface.h:681
Base class for all plugins.
Definition: addInInterface.h:385
bool m_autoGrabbingEnabled
Definition: addInInterface.h:682
QString m_name
name of filter
Definition: addInInterface.h:1004
tAutoSavePolicy m_autoSavePolicy
Definition: addInInterface.h:274
tAutoLoadPolicy m_autoLoadPolicy
Definition: addInInterface.h:273
PyObject * getParam(ito::AddInBase *addInObj, PyObject *args)
Definition: pythonPlugins.cpp:868
tActuatorStatus
tActuatorStatus enumeration
Definition: addInInterface.h:148
ito::AddInInterfaceBase * m_pBasePlugin
interface (factory) instance of this plugin (will be automatically filled)
Definition: addInInterface.h:1003
base class for all "algorithm" plugin classes
Definition: addInInterface.h:929
Definition: addInInterface.h:153
Definition: addInInterface.cpp:50
int getMaxItomVer(void) const
returns maximum supported version of main program
Definition: addInInterface.h:317
int getInstCount()
get number instantiated plugins
Definition: addInInterface.h:360
int m_version
plugin version
Definition: addInInterface.h:261
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:943
Definition: addInInterface.h:165
Definition: addInInterface.h:170
tAutoSavePolicy getAutoSavePolicy(void) const
returns true if the plugin allows his own parameter save to be autoloaded by addin manager ...
Definition: addInInterface.h:326
Definition: addInInterface.h:131
Definition: addInInterface.cpp:167
virtual QVector< ito::Param > * getInitParamsMand(void)
returns a vector with the mandatory initialisation parameters
Definition: addInInterface.h:348
QVector< Param > paramsOpt
Definition: addInInterface.h:204
Definition: addInInterface.h:175
tAutoSavePolicy
Definition: addInInterface.h:194
QVector< Param > paramsMand
Definition: addInInterface.h:203
QString m_license
a short license string for the plugin, default value is "LGPL with ITO itom-exception" ...
Definition: addInInterface.h:268
t_filterExt m_filterFuncExt
extended function pointer (unbounded, static) for filter-method
Definition: addInInterface.h:1036
Definition: apiFunctionsGraph.cpp:39
default: no category
Definition: addInInterface.h:948
bool hasGuiSupport()
check if we have gui support
Definition: addInInterface.h:282
extended FilterDef (derived from FilterDef) with a filterFunc of type f_filterExt instead of t_filter...
Definition: addInInterface.h:1014
t_filter m_filterFunc
function pointer (unbounded, static) for filter-method
Definition: addInInterface.h:1001
Definition: addInInterface.h:157
int getVersion(void) const
returns addIn version
Definition: addInInterface.h:313
bool getCallInitInNewThread(void) const
returns whether init-method should be called in new thread (default) or still in main thread ...
Definition: addInInterface.h:320
FilterDefExt()
< empty, default constructor
Definition: addInInterface.h:1018
Definition: addInInterface.h:190
FilterDef()
< empty, default constructor
Definition: addInInterface.h:977
QVector< ito::Param > m_initParamsOpt
vector with the optional initialisation parameters, please only read this vector within the init-meth...
Definition: addInInterface.h:272
Definition: addInInterface.h:164
semaphore which can be used for asychronous thread communication. By using this class it is possible ...
Definition: sharedStructuresQt.h:57
Definition: addInInterface.h:161
int m_type
plugin type
Definition: addInInterface.h:260
Definition: addInInterface.h:189
Definition: addInInterface.h:391
Definition: addInInterface.h:197
virtual QVector< ito::Param > * getInitParamsOpt(void)
returns a vector with the optional initialisation parameters
Definition: addInInterface.h:350
Definition: addInInterface.h:133
int m_minItomVer
maximum supported version of the main program
Definition: addInInterface.h:264
Definition: addInInterface.h:184
QString m_identifier
unique identifier (serial number, com-port...)
Definition: addInInterface.h:540
Definition: addInInterface.h:130
int m_timerID
Definition: addInInterface.h:680
QString m_author
the plugin author
Definition: addInInterface.h:265
forward declaration to private container class of AddInAlog
Definition: addInInterface.h:248
QList< ito::AddInBase * > m_InstList
vector holding a list of the actual instantiated classes of the plugin
Definition: addInInterface.h:270
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:631
QVector< ito::AddInBase::AddInRef * > * getArgAddIns(void)
returns vector of AddInRef instances.
Definition: addInInterface.h:499
Definition: addInInterface.h:134
tAutoLoadPolicy
Definition: addInInterface.h:187
Definition: addInInterface.h:159
default: filter or widget does not fit to any interface
Definition: addInInterface.h:957
const QString getLicenseInfo(void) const
returns a detailed description of the plugin license
Definition: addInInterface.h:335
int getMinItomVer(void) const
returns minimum required version of main program
Definition: addInInterface.h:315
int getAutoGrabbing()
Definition: addInInterface.h:685
QSet< QObject * > m_autoGrabbingListeners
Definition: addInInterface.h:679
Definition: addInInterface.h:191
QList< ito::AddInBase * > getInstList(void)
returns a list of the actual intantiated classes from this plugin
Definition: addInInterface.h:343
tAlgoCategory
Definition: addInInterface.h:946
QVector< int > m_currentStatus
Definition: addInInterface.h:752
const QString getAuthor(void) const
returns plugin author
Definition: addInInterface.h:329
const QString getDetailDescription(void) const
returns a detailed description of the plugin
Definition: addInInterface.h:333
int getType(void) const
returns addIn type
Definition: addInInterface.h:311
Definition: addInInterface.h:163
Definition: addInInterface.h:178
Definition: addInInterface.h:135
QString m_interfaceMeta
meta information if required by algorithm interface
Definition: addInInterface.h:1008
bool m_isCancellable
true, if filter listens to a possible interrupt flag in the optional observer and cancels the executi...
Definition: addInInterface.h:1038
QMap< QString, Param > m_params
map of the available parameters
Definition: addInInterface.h:538
Definition: apiFunctionsGraph.h:38
QString m_filename
plugin (library) filename on the disc
Definition: addInInterface.h:262
ito::AddInAlgo::tAlgoCategory m_category
category, filter belongs to (default: catNone)
Definition: addInInterface.h:1006
Definition: addInInterface.h:155
bool m_callInitInNewThread
Definition: addInInterface.h:275
t_filterParam m_paramFunc
function pointer (unbounded, static) for filter's default parameter method
Definition: addInInterface.h:1002
QVector< Param > paramsOut
Definition: addInInterface.h:205
int m_maxItomVer
minimum required version of the main program
Definition: addInInterface.h:263
const QString getDescription(void) const
returns a brief description of the plugin
Definition: addInInterface.h:331
Definition: addInInterface.cpp:1184
tAlgoInterface
Definition: addInInterface.h:955
Definition: addInInterface.h:151
const QString getFilename(void) const
returns the plugin's filename
Definition: addInInterface.h:339
bool m_hasStatusInformation
true, if filter updates status information to the optional observer
Definition: addInInterface.h:1037
Definition: addInInterface.cpp:1441
Definition: addInInterface.h:182
QString getIdentifier() const
retrieve the unique identifier of this instance
Definition: addInInterface.h:428
Definition: addInInterface.cpp:815
Definition: addInInterface.h:209
Definition: addInInterface.h:160
container for publishing filters provided by any plugin
Definition: addInInterface.h:973
QString m_detaildescription
a detail descrition of the plugin
Definition: addInInterface.h:267