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, p1));
71 template<class F, class P1, class P2>
72 R call(F f, P1 p1, P2 p2)
74 return call(bind(f, p1, 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, p1, p2, 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, p1, p2, p3, 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, p1, p2, p3, p4, p5, p6, p7, 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)
133 template<class F, class P1, class P2>
134 void call(F f, P1 p1, P2 p2)
136 call(bind(f, p1, 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, p1, p2, 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, p1, p2, p3, 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, p1, p2, p3, p4, p5, p6, p7, p8));
163 void synchronousFunctionCall()
169 function<void()> func_;
173 } // namespace frontend
176 #endif // INGUITHREAD_H