QPICONNECT second version - variadic templates
This commit is contained in:
@@ -39,98 +39,32 @@
|
||||
|
||||
/// connect Qt signal "sig" of object "src" directly to PIP event handler "handler" of object "tgt"
|
||||
/// e.g. QPICONNECT(&qt_obj, someSignal, &pip_obj, someHandler)
|
||||
/// Returns QMetaObject::Connection
|
||||
#define QPICONNECT(src, sig, tgt, handler) \
|
||||
__qpiConnect(src, &decltype(__removePtr__(src))::sig, tgt, &(tgt)->__stat_eh_##handler##__);
|
||||
|
||||
|
||||
template<typename T> T __removePtr__(T*) {}
|
||||
template<typename T> QArgument<T> __qargument(const T & v) {return QArgument<T>(QMetaType::typeName(qMetaTypeId<T>()), v);}
|
||||
|
||||
|
||||
template <typename SR, typename O>
|
||||
void __piqConnect(PIObject * source, const char * event, void(*func)(void*), O * target, SR(O::*slot)()) {
|
||||
PIObject::piConnectLS(source, PIStringAscii(event), PIObject::__newFunctor(func, [target,slot](){(target->*slot)();}), LOCATION);
|
||||
}
|
||||
template <typename SR, typename O, typename T1>
|
||||
void __piqConnect(PIObject * source, const char * event, void(*func)(void*,T1), O * target, SR(O::*slot)(T1)) {
|
||||
PIObject::piConnectLS(source, PIStringAscii(event), PIObject::__newFunctor(func, [target,slot](T1 v1){(target->*slot)(v1);}), LOCATION);
|
||||
}
|
||||
template <typename SR, typename O, typename T1, typename T2>
|
||||
void __piqConnect(PIObject * source, const char * event, void(*func)(void*,T1,T2), O * target, SR(O::*slot)(T1, T2)) {
|
||||
PIObject::piConnectLS(source, PIStringAscii(event), PIObject::__newFunctor(func, [target,slot](T1 v1, T2 v2){(target->*slot)(v1, v2);}), LOCATION);
|
||||
}
|
||||
template <typename SR, typename O, typename T1, typename T2, typename T3>
|
||||
void __piqConnect(PIObject * source, const char * event, void(*func)(void*,T1,T2,T3), O * target, SR(O::*slot)(T1, T2, T3)) {
|
||||
PIObject::piConnectLS(source, PIStringAscii(event), PIObject::__newFunctor(func, [target,slot](T1 v1, T2 v2, T3 v3){(target->*slot)(v1, v2, v3);}), LOCATION);
|
||||
}
|
||||
template <typename SR, typename O, typename T1, typename T2, typename T3, typename T4>
|
||||
void __piqConnect(PIObject * source, const char * event, void(*func)(void*,T1,T2,T3,T4), O * target, SR(O::*slot)(T1, T2, T3, T4)) {
|
||||
PIObject::piConnectLS(source, PIStringAscii(event), PIObject::__newFunctor(func, [target,slot](T1 v1, T2 v2, T3 v3, T4 v4){(target->*slot)(v1, v2, v3, v4);}), LOCATION);
|
||||
template <typename SR, typename O, typename... ARGS>
|
||||
void __piqConnect(PIObject * source, const char * event, void(*func)(void*,ARGS...), O * target, SR(O::*slot)(ARGS...)) {
|
||||
PIObject::piConnectLS(source, PIStringAscii(event), PIObject::__newFunctor(func, [target,slot](ARGS... args){(target->*slot)(args...);}), LOCATION);
|
||||
}
|
||||
|
||||
|
||||
inline void __piqConnectQ(PIObject * source, const char * event, void(*func)(void*), QObject * target, const char * slot) {
|
||||
PIObject::piConnectLS(source, PIStringAscii(event), PIObject::__newFunctor(func, [target,slot](){
|
||||
QMetaObject::invokeMethod(target, slot, Qt::QueuedConnection);
|
||||
}), LOCATION);
|
||||
}
|
||||
template <typename T1>
|
||||
void __piqConnectQ(PIObject * source, const char * event, void(*func)(void*,T1), QObject * target, const char * slot) {
|
||||
PIObject::piConnectLS(source, PIStringAscii(event), PIObject::__newFunctor(func, [target,slot](T1 v1){
|
||||
//QMetaObject::invokeMethod(target, slot, (Qt::ConnectionType)type, QArgument<T1>(__PIVariantFunctions__<T1>::typeNameHelper().dataAscii(), v1));
|
||||
QMetaObject::invokeMethod(target, slot, Qt::QueuedConnection,
|
||||
QArgument<T1>(QMetaType::typeName(qMetaTypeId<T1>()), v1));
|
||||
}), LOCATION);
|
||||
}
|
||||
template <typename T1, typename T2>
|
||||
void __piqConnectQ(PIObject * source, const char * event, void(*func)(void*,T1,T2), QObject * target, const char * slot) {
|
||||
PIObject::piConnectLS(source, PIStringAscii(event), PIObject::__newFunctor(func, [target,slot](T1 v1, T2 v2){
|
||||
QMetaObject::invokeMethod(target, slot, Qt::QueuedConnection,
|
||||
QArgument<T1>(QMetaType::typeName(qMetaTypeId<T1>()), v1),
|
||||
QArgument<T2>(QMetaType::typeName(qMetaTypeId<T2>()), v2));
|
||||
}), LOCATION);
|
||||
}
|
||||
template <typename T1, typename T2, typename T3>
|
||||
void __piqConnectQ(PIObject * source, const char * event, void(*func)(void*,T1,T2,T3), QObject * target, const char * slot) {
|
||||
PIObject::piConnectLS(source, PIStringAscii(event), PIObject::__newFunctor(func, [target,slot](T1 v1, T2 v2, T3 v3){
|
||||
QMetaObject::invokeMethod(target, slot, Qt::QueuedConnection,
|
||||
QArgument<T1>(QMetaType::typeName(qMetaTypeId<T1>()), v1),
|
||||
QArgument<T2>(QMetaType::typeName(qMetaTypeId<T2>()), v2),
|
||||
QArgument<T3>(QMetaType::typeName(qMetaTypeId<T3>()), v3));
|
||||
}), LOCATION);
|
||||
}
|
||||
template <typename T1, typename T2, typename T3, typename T4>
|
||||
void __piqConnectQ(PIObject * source, const char * event, void(*func)(void*,T1,T2,T3,T4), QObject * target, const char * slot) {
|
||||
PIObject::piConnectLS(source, PIStringAscii(event), PIObject::__newFunctor(func, [target,slot](T1 v1, T2 v2, T3 v3, T4 v4){
|
||||
QMetaObject::invokeMethod(target, slot, Qt::QueuedConnection,
|
||||
QArgument<T1>(QMetaType::typeName(qMetaTypeId<T1>()), v1),
|
||||
QArgument<T2>(QMetaType::typeName(qMetaTypeId<T2>()), v2),
|
||||
QArgument<T3>(QMetaType::typeName(qMetaTypeId<T3>()), v3),
|
||||
QArgument<T4>(QMetaType::typeName(qMetaTypeId<T4>()), v4));
|
||||
template <typename... ARGS>
|
||||
void __piqConnectQ(PIObject * source, const char * event, void(*func)(void*,ARGS...), QObject * target, const char * slot) {
|
||||
PIObject::piConnectLS(source, PIStringAscii(event), PIObject::__newFunctor(func, [target,slot](ARGS... args){
|
||||
QMetaObject::invokeMethod(target, slot, Qt::QueuedConnection, __qargument(args)...);
|
||||
}), LOCATION);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
template <typename SR, typename O>
|
||||
void __qpiConnect(O * source, SR(O::*signal)(), PIObject * target, void(*handler)(void*)) {
|
||||
QObject::connect(source, signal, source, [target,handler](){handler(target);});
|
||||
}
|
||||
template <typename SR, typename O, typename T1>
|
||||
void __qpiConnect(O * source, SR(O::*signal)(T1), PIObject * target, void(*handler)(void*,T1)) {
|
||||
QObject::connect(source, signal, source, [target,handler](T1 v1){handler(target, v1);});
|
||||
}
|
||||
template <typename SR, typename O, typename T1, typename T2>
|
||||
void __qpiConnect(O * source, SR(O::*signal)(T1,T2), PIObject * target, void(*handler)(void*,T1,T2)) {
|
||||
QObject::connect(source, signal, source, [target,handler](T1 v1, T2 v2){handler(target, v1, v2);});
|
||||
}
|
||||
template <typename SR, typename O, typename T1, typename T2, typename T3>
|
||||
void __qpiConnect(O * source, SR(O::*signal)(T1,T2,T3), PIObject * target, void(*handler)(void*,T1,T2,T3)) {
|
||||
QObject::connect(source, signal, source, [target,handler](T1 v1, T2 v2, T3 v3){handler(target, v1, v2, v3);});
|
||||
}
|
||||
template <typename SR, typename O, typename T1, typename T2, typename T3, typename T4>
|
||||
void __qpiConnect(O * source, SR(O::*signal)(T1,T2,T3,T4), PIObject * target, void(*handler)(void*,T1,T2,T3,T4)) {
|
||||
QObject::connect(source, signal, source, [target,handler](T1 v1, T2 v2, T3 v3, T4 v4){handler(target, v1, v2, v3, v4);});
|
||||
template <typename SR, typename O, typename... ARGS>
|
||||
QMetaObject::Connection __qpiConnect(O * source, SR(O::*signal)(ARGS...), PIObject * target, void(*handler)(void*,ARGS...)) {
|
||||
return QObject::connect(source, signal, source, [target,handler](ARGS... args){handler(target, args...);});
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user