Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef MITK_TOOL_EVENTS_H
00019 #define MITK_TOOL_EVENTS_H
00020
00021 #include <itkEventObject.h>
00022
00023
00024 namespace mitk {
00025
00054 itkEventMacro( ToolEvent, itk::ModifiedEvent );
00055
00084 template <typename T>
00085 class ParameterToolEvent : public ToolEvent
00086 {
00087 public:
00088
00089 typedef ParameterToolEvent Self;
00090 typedef ToolEvent Superclass;
00091
00092 ParameterToolEvent( const T parameter )
00093 : m_Parameter(parameter)
00094 {
00095 }
00096
00097 ParameterToolEvent(const Self& s)
00098 : ToolEvent(s),
00099 m_Parameter(s.m_Parameter)
00100 {
00101 }
00102
00103 virtual ~ParameterToolEvent()
00104 {
00105 }
00106
00107 virtual const char * GetEventName() const
00108 {
00109 return "ParameterToolEvent";
00110 }
00111
00112 virtual bool CheckEvent(const ::itk::EventObject* e) const
00113 {
00114 return dynamic_cast<const Self*>(e);
00115 }
00116
00117 virtual ::itk::EventObject* MakeObject() const
00118 {
00119 return new Self( m_Parameter );
00120 }
00121
00122 const T GetParameter() const
00123 {
00124 return m_Parameter;
00125 }
00126
00127 protected:
00128
00129 const T m_Parameter;
00130
00131 private:
00132
00133 ParameterToolEvent();
00134
00135 void operator=(const Self&);
00136 };
00137
00166 template <typename T, typename U>
00167 class TwoParameterToolEvent : public ToolEvent
00168 {
00169 public:
00170
00171 typedef TwoParameterToolEvent Self;
00172 typedef ToolEvent Superclass;
00173
00174 TwoParameterToolEvent( const T parameter1, const U parameter2 )
00175 : m_Parameter1(parameter1),
00176 m_Parameter2(parameter2)
00177 {
00178 }
00179
00180 TwoParameterToolEvent(const Self& s)
00181 : ToolEvent(s),
00182 m_Parameter1(s.m_Parameter1),
00183 m_Parameter2(s.m_Parameter2)
00184 {
00185 }
00186
00187 virtual ~TwoParameterToolEvent()
00188 {
00189 }
00190
00191 virtual const char * GetEventName() const
00192 {
00193 return "TwoParameterToolEvent";
00194 }
00195
00196 virtual bool CheckEvent(const ::itk::EventObject* e) const
00197 {
00198 return dynamic_cast<const Self*>(e);
00199 }
00200
00201 virtual ::itk::EventObject* MakeObject() const
00202 {
00203 return new Self( m_Parameter1, m_Parameter2 );
00204 }
00205
00206 const T GetParameter1() const
00207 {
00208 return m_Parameter1;
00209 }
00210
00211 const T GetParameter2() const
00212 {
00213 return m_Parameter2;
00214 }
00215
00216 protected:
00217
00218 const T m_Parameter1;
00219 const U m_Parameter2;
00220
00221 private:
00222
00223 TwoParameterToolEvent();
00224
00225 void operator=(const Self&);
00226 };
00227
00228 typedef ParameterToolEvent<int> IntegerToolEvent;
00229 typedef ParameterToolEvent<float> FloatToolEvent;
00230 typedef ParameterToolEvent<bool> BoolToolEvent;
00231
00232 }
00233
00234
00235
00236
00237 #define mitkToolEventMacro( eventname, baseevent ) \
00238 class eventname : public baseevent \
00239 { \
00240 virtual const char * GetEventName() const \
00241 { \
00242 return #eventname ; \
00243 } \
00244 };
00245
00246
00247
00248 #define mitkToolEventMacro1Param( eventname, paramtype1 ) \
00249 class eventname : public ParameterToolEvent<paramtype1> \
00250 { \
00251 public: \
00252 virtual const char * GetEventName() const \
00253 { \
00254 return #eventname "(" #paramtype1 ")" ; \
00255 } \
00256 \
00257 eventname( const paramtype1 parameter ) \
00258 : ParameterToolEvent<paramtype1>(parameter) \
00259 { \
00260 } \
00261 \
00262 private: \
00263 \
00264 eventname();\
00265 };
00266
00267
00268
00269 #define mitkToolEventMacro2Param( eventname, paramtype1, paramtype2 ) \
00270 class eventname : public TwoParameterToolEvent<paramtype1, paramtype2> \
00271 { \
00272 public: \
00273 virtual const char * GetEventName() const \
00274 { \
00275 return #eventname "(" #paramtype1 "," #paramtype2 ")" ; \
00276 } \
00277 \
00278 eventname( const paramtype1 parameter1, const paramtype2 parameter2 ) \
00279 : TwoParameterToolEvent<paramtype1,paramtype2>(parameter1, parameter2) \
00280 { \
00281 } \
00282 \
00283 private: \
00284 \
00285 eventname();\
00286 };
00287
00288
00289 #endif
00290
00291