Medical Imaging Interaction Toolkit  2026.06.00
Medical Imaging Interaction Toolkit
mitkToolEvents.h
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 #ifndef mitkToolEvents_h
14 #define mitkToolEvents_h
15 
16 #ifdef __GNUC__
17 #pragma GCC visibility push(default)
18 #endif
19 #include <itkEventObject.h>
20 #ifdef __GNUC__
21 #pragma GCC visibility pop
22 #endif
23 
24 namespace mitk
25 {
54 #ifdef __GNUC__
55 #pragma GCC visibility push(default)
56 #endif
57  itkEventMacroDeclaration(ToolEvent, itk::ModifiedEvent); // Definition is in mitkTool.cpp
58 #ifdef __GNUC__
59 #pragma GCC visibility pop
60 #endif
61 
99  template <typename T>
100  class ParameterToolEvent : public ToolEvent
101  {
102  public:
104  typedef ToolEvent Superclass;
105 
110  ParameterToolEvent(const T parameter) : m_Parameter(parameter) {}
111 
113  ParameterToolEvent(const Self &s) : ToolEvent(s), m_Parameter(s.m_Parameter) {}
114  ~ParameterToolEvent() override {}
115  const char *GetEventName() const override { return "ParameterToolEvent"; }
116  bool CheckEvent(const ::itk::EventObject *e) const override { return dynamic_cast<const Self *>(e); }
117  ::itk::EventObject *MakeObject() const override { return new Self(m_Parameter); }
118 
123  const T GetParameter() const { return m_Parameter; }
124  protected:
125  const T m_Parameter;
126 
127  private:
129 
130  void operator=(const Self &);
131  };
132 
171  template <typename T, typename U>
172  class TwoParameterToolEvent : public ToolEvent
173  {
174  public:
176  typedef ToolEvent Superclass;
177 
183  TwoParameterToolEvent(const T parameter1, const U parameter2) : m_Parameter1(parameter1), m_Parameter2(parameter2)
184  {
185  }
186 
190  const char *GetEventName() const override { return "TwoParameterToolEvent"; }
191  bool CheckEvent(const ::itk::EventObject *e) const override { return dynamic_cast<const Self *>(e); }
192  ::itk::EventObject *MakeObject() const override { return new Self(m_Parameter1, m_Parameter2); }
193 
195  const T GetParameter1() const { return m_Parameter1; }
196 
198  const U GetParameter2() const { return m_Parameter2; }
199  protected:
200  const T m_Parameter1;
201  const U m_Parameter2;
202 
203  private:
205 
206  void operator=(const Self &);
207  };
208 
211 
214 
217 
218 } // namespace
219 
220 // some macros to let tools define their own event classes as inner classes (should then inherit from something like
221 // FloatToolEvent
222 // inheritance, because it allows observers to distinguish events
223 
224 #define mitkToolEventMacro(eventname, baseevent) \
225  \
226 class eventname : public baseevent\
227 {virtual const char * GetEventName() const {return #eventname; \
228  } \
229  \
230 } \
231  ;
232 
233 #define mitkToolEventMacro1Param(eventname, paramtype1) \
234  \
235 class eventname : public ParameterToolEvent<paramtype1> \
236  \
237 { \
238  public: \
239  virtual const char *GetEventName() const { return #eventname "(" #paramtype1 ")"; } \
240  eventname(const paramtype1 parameter) : ParameterToolEvent<paramtype1>(parameter) {} \
241  private: \
242  eventname(); \
243  \
244 };
245 
246 #define mitkToolEventMacro2Param(eventname, paramtype1, paramtype2) \
247  \
248 class eventname : public TwoParameterToolEvent<paramtype1, paramtype2> \
249  \
250 { \
251  public: \
252  virtual const char *GetEventName() const { return #eventname "(" #paramtype1 "," #paramtype2 ")"; } \
253  eventname(const paramtype1 parameter1, const paramtype2 parameter2) \
254  : TwoParameterToolEvent<paramtype1, paramtype2>(parameter1, parameter2) \
255  { \
256  } \
257  \
258  private: \
259  eventname(); \
260  \
261 };
262 
263 #endif
Tool event with 1 parameter.
ParameterToolEvent(const T parameter)
Constructor with parameter value.
const T GetParameter() const
Returns the parameter value carried by this event.
ParameterToolEvent(const Self &s)
Copy constructor.
::itk::EventObject * MakeObject() const override
bool CheckEvent(const ::itk::EventObject *e) const override
const char * GetEventName() const override
ParameterToolEvent Self
Tool event with 1 parameter.
TwoParameterToolEvent(const T parameter1, const U parameter2)
Constructor with two parameter values.
const char * GetEventName() const override
bool CheckEvent(const ::itk::EventObject *e) const override
::itk::EventObject * MakeObject() const override
TwoParameterToolEvent(const Self &s)
Copy constructor.
TwoParameterToolEvent Self
const U GetParameter2() const
Returns the second parameter value.
const T GetParameter1() const
Returns the first parameter value.
Find image slices visible on a given plane.
ParameterToolEvent< bool > BoolToolEvent
Convenience typedef for a tool event carrying a bool parameter.
ParameterToolEvent< float > FloatToolEvent
Convenience typedef for a tool event carrying a float parameter.
ParameterToolEvent< int > IntegerToolEvent
Convenience typedef for a tool event carrying an int parameter.
itkEventMacroDeclaration(BoundingShapeInteractionEvent, itk::AnyEvent)