7#ifndef KISSYNCHRONIZEDCONNECTION_H
8#define KISSYNCHRONIZEDCONNECTION_H
10#include <kritaglobal_export.h>
17#include <QMutexLocker>
19#include <boost/bind/bind.hpp>
51 static int eventType();
52 static void registerSynchronizedEventBarrier(std::function<
void()> callback);
61 static void setAutoModeForUnittestsEnabled(
bool value);
62 static bool isAutoModeForUnittestsEnabled();
64 static void forceDeliverAllSynchronizedEvents();
67 bool event(QEvent *event)
override;
130template <
typename... Args>
147 void start(
const Args &...argsTuple) {
150 m_queue.emplace(std::make_tuple(argsTuple...));
169 template <
typename Dptr,
typename C,
typename R,
typename ...MemFnArgs>
171 static_assert (std::is_convertible<Dptr, const C*>::value,
"Source object should be convertible into the base of the member pointer");
172 static_assert (std::is_convertible<Dptr, const QObject*>::value,
"Source object should be convertible into QObject");
174 QObject::connect(
static_cast<const C*
>(
object), memfn,
185 template <
typename Dptr,
typename C,
typename R,
typename ...MemFnArgs>
187 static_assert (std::is_convertible<Dptr, C*>::value,
"Destination object should be convertible into the base of the member pointer");
192 std::tuple_size<ArgsTuple>::value>());
199 template <
typename Dptr1,
typename C1,
typename R1,
typename ...MemFnArgs1,
200 typename Dptr2,
typename C2,
typename R2,
typename ...MemFnArgs2>
202 Dptr2 object2, R2 (C2::* memfn2)(MemFnArgs2...)) {
215 template <
typename Dptr,
typename C,
typename R,
typename ...MemFnArgs, std::size_t ...Idx>
221 return boost::bind(memfn,
object, boost::arg<Idx>()...);
float value(const T *src, size_t ch)
Eigen::Matrix< double, 4, 2 > R
A base class for KisSynchronizedConnection.
virtual void deliverEventToReceiver()=0
void start(const Args &...argsTuple)
std::queue< ArgsTuple > m_queue
KisSynchronizedConnection()=default
bool hasPendingSignals() const
KisSynchronizedConnection(CallbackFunction callback)
void setCallback(CallbackFunction callback)
std::tuple< Args... > ArgsTuple
void connectSync(Dptr1 object1, R1(C1::*memfn1)(MemFnArgs1...), Dptr2 object2, R2(C2::*memfn2)(MemFnArgs2...))
void deliverEventToReceiver() override
void connectInputSignal(Dptr object, R(C::*memfn)(MemFnArgs...))
std::function< void(Args...)> CallbackFunction
QMutex m_inputConnectionMutex
void connectOutputSlot(Dptr object, R(C::*memfn)(MemFnArgs...))
CallbackFunction bindToMemberFunction(Dptr object, R(C::*memfn)(MemFnArgs...), std::index_sequence< Idx... >)
CallbackFunction m_callback
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
typedef void(QOPENGLF_APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC)(GLuint buffer)
typename detail::make_index_sequence_from_1_impl< Num >::type make_index_sequence_from_1
Event type used for synchronizing connection in KisSynchronizedConnection.
const QPointer< QObject > destination