24 #define mitkNewMessageMacro(msgHandleObject) \
26 ::mitk::Message<> m_##msgHandleObject##Message; \
29 inline void Add##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate<> &delegate) \
31 m_##msgHandleObject##Message += delegate; \
33 inline void Remove##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate<> &delegate) \
35 m_##msgHandleObject##Message -= delegate; \
38 #define mitkNewMessageWithReturnMacro(msgHandleObject, returnType) \
40 ::mitk::Message<returnType> m_##msgHandleObject##Message; \
43 inline void Add##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate<returnType> &delegate) \
45 m_##msgHandleObject##Message += delegate; \
47 inline void Remove##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate<returnType> &delegate) \
49 m_##msgHandleObject##Message -= delegate; \
52 #define mitkNewMessage1Macro(msgHandleObject, type1) \
54 ::mitk::Message1<type1> m_##msgHandleObject##Message; \
57 void Add##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate1<type1> &delegate) const \
59 m_##msgHandleObject##Message += delegate; \
61 void Remove##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate1<type1> &delegate) const \
63 m_##msgHandleObject##Message -= delegate; \
66 #define mitkNewMessage2Macro(msgHandleObject, type1, type2) \
68 ::mitk::Message2<type1, type2> m_##msgHandleObject##Message; \
71 void Add##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate2<type1, type2> &delegate) \
73 m_##msgHandleObject##Message += delegate; \
75 void Remove##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate2<type1, type2> &delegate) \
77 m_##msgHandleObject##Message -= delegate; \
85 template <
typename A =
void>
99 template <
typename T,
typename A =
void>
114 template <
typename T,
typename U,
typename A =
void>
130 template <
typename T,
typename U,
typename V,
typename A =
void>
147 template <
typename T,
typename U,
typename V,
typename W,
typename A =
void>
152 virtual A
Execute(T t, U u, V v, W w)
const = 0;
167 template <
class R,
typename A =
void>
174 : m_Object(object), m_MemberFunctionPointer(memberFunctionPointer)
182 return (m_Object->*m_MemberFunctionPointer)();
191 if ((
void *)this->m_Object != (
void *)cmd->m_Object)
193 if (this->m_MemberFunctionPointer != cmd->m_MemberFunctionPointer)
201 A (R::*m_MemberFunctionPointer)();
217 template <
class R,
typename T,
typename A =
void>
224 : m_Object(object), m_MemberFunctionPointer(memberFunctionPointer)
232 return (m_Object->*m_MemberFunctionPointer)(t);
241 if ((
void *)this->m_Object != (
void *)cmd->m_Object)
243 if (this->m_MemberFunctionPointer != cmd->m_MemberFunctionPointer)
251 A (R::*m_MemberFunctionPointer)(T);
260 template <
class R,
typename T,
typename U,
typename A =
void>
267 : m_Object(object), m_MemberFunctionPointer(memberFunctionPointer)
275 return (m_Object->*m_MemberFunctionPointer)(t, u);
284 if ((
void *)this->m_Object != (
void *)cmd->m_Object)
286 if (this->m_MemberFunctionPointer != cmd->m_MemberFunctionPointer)
294 A (R::*m_MemberFunctionPointer)(T, U);
304 template <
class R,
typename T,
typename U,
typename V,
typename A =
void>
311 : m_Object(object), m_MemberFunctionPointer(memberFunctionPointer)
319 return (m_Object->*m_MemberFunctionPointer)(t, u, v);
328 if ((
void *)this->m_Object != (
void *)cmd->m_Object)
330 if (this->m_MemberFunctionPointer != cmd->m_MemberFunctionPointer)
342 A (R::*m_MemberFunctionPointer)(T, U, V);
353 template <
class R,
typename T,
typename U,
typename V,
typename W,
typename A =
void>
360 : m_Object(object), m_MemberFunctionPointer(memberFunctionPointer)
368 return (m_Object->*m_MemberFunctionPointer)(t, u, v, w);
373 const MessageDelegate4<R, T, U, V, W, A> *cmd =
dynamic_cast<const MessageDelegate4<R, T, U, V, W, A> *
>(c);
377 if ((
void *)this->m_Object != (
void *)cmd->m_Object)
379 if (this->m_MemberFunctionPointer != cmd->m_MemberFunctionPointer)
391 A (R::*m_MemberFunctionPointer)(T, U, V, W);
401 template <
typename AbstractDelegate>
434 AbstractDelegate *msgCmd = delegate.Clone();
439 if ((*iter)->operator==(msgCmd))
459 if ((*iter)->operator==(&delegate))
519 template <
typename A =
void>
532 listeners.assign(this->
m_Listeners.begin(), this->m_Listeners.end());
536 for (
auto iter = listeners.begin(); iter != listeners.end(); ++iter)
550 template <
typename T,
typename A =
void>
563 listeners.assign(this->
m_Listeners.begin(), this->m_Listeners.end());
567 for (
auto iter = listeners.begin(); iter != listeners.end(); ++iter)
582 template <
typename T,
typename U,
typename A =
void>
595 listeners.assign(this->
m_Listeners.begin(), this->m_Listeners.end());
599 for (
auto iter = listeners.begin(); iter != listeners.end(); ++iter)
602 (*iter)->Execute(t, u);
615 template <
typename T,
typename U,
typename V,
typename A =
void>
628 listeners.assign(this->
m_Listeners.begin(), this->m_Listeners.end());
632 for (
typename ListenerList::iterator iter = listeners.begin(); iter != listeners.end(); ++iter)
635 (*iter)->Execute(t, u, v);
649 template <
typename T,
typename U,
typename V,
typename W,
typename A =
void>
656 void Send(T t, U u, V v, W w)
const
662 listeners.assign(this->
m_Listeners.begin(), this->m_Listeners.end());
666 for (
typename ListenerList::iterator iter = listeners.begin(); iter != listeners.end(); ++iter)
669 (*iter)->Execute(t, u, v, w);
Event/message class with one parameter.
MessageBase< MessageAbstractDelegate1< T, A > > Super
Super::ListenerList ListenerList
void operator()(T t) const
Event/message class with two parameters.
void operator()(T t, U u) const
void Send(T t, U u) const
Super::ListenerList ListenerList
MessageBase< MessageAbstractDelegate2< T, U, A > > Super
Event/message class with three parameters.
Super::ListenerList ListenerList
void operator()(T t, U u, V v) const
void Send(T t, U u, V v) const
MessageBase< MessageAbstractDelegate3< T, U, V, A > > Super
Event/message class with four parameters.
void operator()(T t, U u, V v, W w) const
void Send(T t, U u, V v, W w) const
MessageBase< MessageAbstractDelegate4< T, U, V, W, A > > Super
Super::ListenerList ListenerList
Abstract base class for message delegates with one parameter.
virtual bool operator==(const MessageAbstractDelegate1 *cmd) const =0
virtual MessageAbstractDelegate1 * Clone() const =0
virtual A Execute(T t) const =0
virtual ~MessageAbstractDelegate1()
Abstract base class for message delegates with two parameters.
virtual bool operator==(const MessageAbstractDelegate2 *cmd) const =0
virtual MessageAbstractDelegate2 * Clone() const =0
virtual ~MessageAbstractDelegate2()
virtual A Execute(T t, U u) const =0
Abstract base class for message delegates with three parameters.
virtual bool operator==(const MessageAbstractDelegate3 *cmd) const =0
virtual MessageAbstractDelegate3 * Clone() const =0
virtual ~MessageAbstractDelegate3()
virtual A Execute(T t, U u, V v) const =0
Abstract base class for message delegates with four parameters.
virtual ~MessageAbstractDelegate4()
virtual bool operator==(const MessageAbstractDelegate4 *cmd) const =0
virtual MessageAbstractDelegate4 * Clone() const =0
virtual A Execute(T t, U u, V v, W w) const =0
Abstract base class for message delegates with no parameters.
virtual bool operator==(const MessageAbstractDelegate *cmd) const =0
virtual A Execute() const =0
virtual ~MessageAbstractDelegate()
virtual MessageAbstractDelegate * Clone() const =0
Base class for message/event objects that manage a list of delegate listeners.
MessageBase(const MessageBase &o)
bool HasListeners() const
Check whether any listeners are registered.
const ListenerList & GetListeners() const
Get the list of currently registered listeners.
MessageBase & operator=(const MessageBase &o)
std::vector< AbstractDelegate * > ListenerList
bool IsEmpty() const
Check whether the listener list is empty.
void AddListener(const AbstractDelegate &delegate) const
Add a listener delegate. Duplicates are silently ignored.
void RemoveListener(const AbstractDelegate &delegate) const
Remove a listener delegate. If not found, nothing happens.
void operator+=(const AbstractDelegate &delegate) const
Shorthand for AddListener().
ListenerList m_Listeners
List of listeners.
void operator-=(const AbstractDelegate &delegate) const
Shorthand for RemoveListener().
Wraps a member function pointer with signature A(R::*function)(T).
~MessageDelegate1() override
MessageAbstractDelegate1< T, A > * Clone() const override
bool operator==(const MessageAbstractDelegate1< T, A > *c) const override
MessageDelegate1(R *object, A(R::*memberFunctionPointer)(T))
A Execute(T t) const override
Wraps a member function pointer with signature A(R::*function)(T, U).
MessageAbstractDelegate2< T, U, A > * Clone() const override
A Execute(T t, U u) const override
bool operator==(const MessageAbstractDelegate2< T, U, A > *c) const override
~MessageDelegate2() override
MessageDelegate2(R *object, A(R::*memberFunctionPointer)(T, U))
Wraps a member function pointer with signature A(R::*function)(T, U, V).
MessageDelegate3(R *object, A(R::*memberFunctionPointer)(T, U, V))
~MessageDelegate3() override
MessageAbstractDelegate3< T, U, V, A > * Clone() const override
A Execute(T t, U u, V v) const override
bool operator==(const MessageAbstractDelegate3< T, U, V, A > *c) const override
Wraps a member function pointer with signature A(R::*function)(T, U, V, W).
bool operator==(const MessageAbstractDelegate4< T, U, V, W, A > *c) const
MessageDelegate4(R *object, A(R::*memberFunctionPointer)(T, U, V, W))
virtual ~MessageDelegate4()
MessageAbstractDelegate4< T, U, V, W, A > * Clone() const
virtual A Execute(T t, U u, V v, W w) const
Wraps a member function pointer with signature A(R::*function)().
bool operator==(const MessageAbstractDelegate< A > *c) const override
MessageAbstractDelegate< A > * Clone() const override
~MessageDelegate() override
MessageDelegate(R *object, A(R::*memberFunctionPointer)())
A Execute() const override
Event/message/notification class.
Super::ListenerList ListenerList
MessageBase< MessageAbstractDelegate< A > > Super
Find image slices visible on a given plane.
void swap(CustomMimeType &l, CustomMimeType &r)
Swap two CustomMimeType objects.