summaryrefslogtreecommitdiff
path: root/libs/pbd/pbd/signals.h
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2011-09-26 22:22:14 +0000
committerCarl Hetherington <carl@carlh.net>2011-09-26 22:22:14 +0000
commitfa590d385bdd7ca2336e9c6e65bc0ca2ece758be (patch)
tree655ef7dc1f2d25e5c17d68262b17691a62293f93 /libs/pbd/pbd/signals.h
parent1f1abd06466ee8391272c71fd6e185482dec1765 (diff)
Add Signal5.
git-svn-id: svn://localhost/ardour2/branches/3.0@10134 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/pbd/pbd/signals.h')
-rw-r--r--libs/pbd/pbd/signals.h52
1 files changed, 52 insertions, 0 deletions
diff --git a/libs/pbd/pbd/signals.h b/libs/pbd/pbd/signals.h
index 668490f97f..1acc6022b0 100644
--- a/libs/pbd/pbd/signals.h
+++ b/libs/pbd/pbd/signals.h
@@ -323,6 +323,58 @@ private:
SignalType _signal;
};
+template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5>
+class Signal5 {
+public:
+ Signal5 () {}
+ typedef boost::signals2::signal<R(A1,A2,A3,A4,A5)> SignalType;
+
+ void connect_same_thread (ScopedConnectionList& clist,
+ const typename SignalType::slot_function_type& slot) {
+ clist.add_connection (_signal.connect (slot));
+ }
+
+ void connect_same_thread (ScopedConnection& c,
+ const typename SignalType::slot_function_type& slot) {
+ c = _signal.connect (slot);
+ }
+
+ static void compositor (typename boost::function<void(A1,A2,A3,A4,A5)> f, PBD::EventLoop* event_loop,
+ EventLoop::InvalidationRecord* ir,
+ A1 arg1, A2 arg2, A3 arg3, A4 arg4, A5 arg5) {
+ event_loop->call_slot (ir, boost::bind (f, arg1, arg2, arg3, arg4, arg5));
+ }
+
+ void connect (ScopedConnectionList& clist,
+ PBD::EventLoop::InvalidationRecord* ir,
+ const typename SignalType::slot_function_type& slot,
+ PBD::EventLoop* event_loop) {
+ if (ir) {
+ ir->event_loop = event_loop;
+ }
+ clist.add_connection (_signal.connect (boost::bind (&compositor, slot, event_loop, ir, _1, _2, _3, _4, _5)));
+ }
+
+ void connect (ScopedConnection& c,
+ PBD::EventLoop::InvalidationRecord* ir,
+ const typename SignalType::slot_function_type& slot,
+ PBD::EventLoop* event_loop) {
+ if (ir) {
+ ir->event_loop = event_loop;
+ }
+ c = _signal.connect (_signal.connect (boost::bind (&compositor, slot, event_loop, ir, _1, _2, _3, _4, _5)));
+ }
+
+ typename SignalType::result_type operator()(A1 arg1, A2 arg2, A3 arg3, A4 arg4, A5 arg5) {
+ return _signal (arg1, arg2, arg3, arg4, arg5);
+ }
+
+ bool empty() const { return _signal.empty(); }
+
+private:
+ SignalType _signal;
+};
+
} /* namespace */
#endif /* __pbd_signals_h__ */