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 "support/bind.h"
18 #include "support/functional.h"
24 class IntoGuiThreadMover : public QObject
32 void callInGuiThread();
39 void doFunctionCall();
42 virtual void synchronousFunctionCall() = 0;
47 class InGuiThread : private IntoGuiThreadMover
61 template<class F, class P1>
64 return call(bind(f, p1));
67 template<class F, class P1, class P2>
68 R call(F f, P1 p1, P2 p2)
70 return call(bind(f, p1, p2));
73 template<class F, class P1, class P2, class P3>
74 R call(F f, P1 p1, P2 p2, P3 p3)
76 return call(bind(f, p1, p2, p3));
79 template<class F, class P1, class P2, class P3, class P4>
80 R call(F f, P1 p1, P2 p2, P3 p3, P4 p4)
82 return call(bind(f, p1, p2, p3, p4));
89 template<class F, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8>
90 R call(F f, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8)
92 return call(bind(f, p1, p2, p3, p4, p5, p6, p7, p8));
97 void synchronousFunctionCall()
99 return_value_ = func_();
108 // void specialisation
110 class InGuiThread<void> : private IntoGuiThreadMover
123 template<class F, class P1>
124 void call(F f, P1 p1)
129 template<class F, class P1, class P2>
130 void call(F f, P1 p1, P2 p2)
132 call(bind(f, p1, p2));
135 template<class F, class P1, class P2, class P3>
136 void call(F f, P1 p1, P2 p2, P3 p3)
138 call(bind(f, p1, p2, p3));
141 template<class F, class P1, class P2, class P3, class P4>
142 void call(F f, P1 p1, P2 p2, P3 p3, P4 p4)
144 call(bind(f, p1, p2, p3, p4));
151 template<class F, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8>
152 void call(F f, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8)
154 call(bind(f, p1, p2, p3, p4, p5, p6, p7, p8));
159 void synchronousFunctionCall()
165 function<void()> func_;
169 } // namespace frontend