4 * This file is part of LyX, the document processor.
5 * Licence details can be found in the file COPYING.
9 * Full author contact details are available in file CREDITS.
17 #include <QWaitCondition>
19 #include "support/bind.h"
20 #include "support/functional.h"
26 class IntoGuiThreadMover : public QObject
34 void callInGuiThread();
37 void triggerFunctionCall();
40 void doFunctionCall();
43 virtual void synchronousFunctionCall() = 0;
45 QWaitCondition condition_;
51 class InGuiThread : private IntoGuiThreadMover
65 template<class F, class P1>
68 return call(bind(f, ref(p1)));
71 template<class F, class P1, class P2>
72 R call(F f, P1& p1, P2& p2)
74 return call(bind(f, ref(p1), ref(p2)));
77 template<class F, class P1, class P2, class P3>
78 R call(F f, P1& p1, P2& p2, P3& p3)
80 return call(bind(f, ref(p1), ref(p2), ref(p3)));
83 template<class F, class P1, class P2, class P3, class P4>
84 R call(F f, P1& p1, P2& p2, P3& p3, P4& p4)
86 return call(bind(f, ref(p1), ref(p2), ref(p3), ref(p4)));
93 template<class F, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8>
94 R call(F f, P1& p1, P2& p2, P3& p3, P4& p4, P5& p5, P6& p6, P7& p7, P8& p8)
96 return call(bind(f, ref(p1), ref(p2), ref(p3), ref(p4), ref(p5), ref(p6), ref(p7), ref(p8)));
101 void synchronousFunctionCall()
103 return_value_ = func_();
112 // void specialisation
114 class InGuiThread<void> : private IntoGuiThreadMover
127 template<class F, class P1>
128 void call(F f, P1& p1)
130 call(bind(f, ref(p1)));
133 template<class F, class P1, class P2>
134 void call(F f, P1& p1, P2& p2)
136 call(bind(f, ref(p1), ref(p2)));
139 template<class F, class P1, class P2, class P3>
140 void call(F f, P1& p1, P2& p2, P3& p3)
142 call(bind(f, ref(p1), ref(p2), ref(p3)));
145 template<class F, class P1, class P2, class P3, class P4>
146 void call(F f, P1& p1, P2& p2, P3& p3, P4& p4)
148 call(bind(f, ref(p1), ref(p2), ref(p3), ref(p4)));
155 template<class F, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8>
156 void call(F f, P1& p1, P2& p2, P3& p3, P4& p4, P5& p5, P6& p6, P7& p7, P8& p8)
158 call(bind(f, ref(p1), ref(p2), ref(p3), ref(p4), ref(p5), ref(p6), ref(p7), ref(p8)));
163 void synchronousFunctionCall()
169 function<void()> func_;
173 } // namespace frontend
176 #endif // INGUITHREAD_H