VTK  9.0.1
vtkCommand.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkCommand.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
225 #ifndef vtkCommand_h
226 #define vtkCommand_h
227 
228 #include "vtkCommonCoreModule.h" // For export macro
229 #include "vtkObject.h" // Need vtkTypeMacro
230 #include "vtkObjectBase.h"
231 
232 // clang-format off
233 // Define all types of events here.
234 // Using this macro makes it possible to avoid mismatches between the event
235 // enums and their string counterparts.
236 #define vtkAllEventsMacro() \
237  _vtk_add_event(AnyEvent) \
238  _vtk_add_event(DeleteEvent) \
239  _vtk_add_event(StartEvent) \
240  _vtk_add_event(EndEvent) \
241  _vtk_add_event(RenderEvent) \
242  _vtk_add_event(ProgressEvent) \
243  _vtk_add_event(PickEvent) \
244  _vtk_add_event(StartPickEvent) \
245  _vtk_add_event(EndPickEvent) \
246  _vtk_add_event(AbortCheckEvent) \
247  _vtk_add_event(ExitEvent) \
248  _vtk_add_event(LeftButtonPressEvent) \
249  _vtk_add_event(LeftButtonReleaseEvent) \
250  _vtk_add_event(MiddleButtonPressEvent) \
251  _vtk_add_event(MiddleButtonReleaseEvent) \
252  _vtk_add_event(RightButtonPressEvent) \
253  _vtk_add_event(RightButtonReleaseEvent) \
254  _vtk_add_event(EnterEvent) \
255  _vtk_add_event(LeaveEvent) \
256  _vtk_add_event(KeyPressEvent) \
257  _vtk_add_event(KeyReleaseEvent) \
258  _vtk_add_event(CharEvent) \
259  _vtk_add_event(ExposeEvent) \
260  _vtk_add_event(ConfigureEvent) \
261  _vtk_add_event(TimerEvent) \
262  _vtk_add_event(MouseMoveEvent) \
263  _vtk_add_event(MouseWheelForwardEvent) \
264  _vtk_add_event(MouseWheelBackwardEvent) \
265  _vtk_add_event(ActiveCameraEvent) \
266  _vtk_add_event(CreateCameraEvent) \
267  _vtk_add_event(ResetCameraEvent) \
268  _vtk_add_event(ResetCameraClippingRangeEvent) \
269  _vtk_add_event(ModifiedEvent) \
270  _vtk_add_event(WindowLevelEvent) \
271  _vtk_add_event(StartWindowLevelEvent) \
272  _vtk_add_event(EndWindowLevelEvent) \
273  _vtk_add_event(ResetWindowLevelEvent) \
274  _vtk_add_event(SetOutputEvent) \
275  _vtk_add_event(ErrorEvent) \
276  _vtk_add_event(WarningEvent) \
277  _vtk_add_event(StartInteractionEvent) \
278  _vtk_add_event(DropFilesEvent) \
279  _vtk_add_event(UpdateDropLocationEvent) \
280  /*^ mainly used by vtkInteractorObservers*/ \
281  _vtk_add_event(InteractionEvent) \
282  _vtk_add_event(EndInteractionEvent) \
283  _vtk_add_event(EnableEvent) \
284  _vtk_add_event(DisableEvent) \
285  _vtk_add_event(CreateTimerEvent) \
286  _vtk_add_event(DestroyTimerEvent) \
287  _vtk_add_event(PlacePointEvent) \
288  _vtk_add_event(DeletePointEvent) \
289  _vtk_add_event(PlaceWidgetEvent) \
290  _vtk_add_event(CursorChangedEvent) \
291  _vtk_add_event(ExecuteInformationEvent) \
292  _vtk_add_event(RenderWindowMessageEvent) \
293  _vtk_add_event(WrongTagEvent) \
294  _vtk_add_event(StartAnimationCueEvent) \
295  _vtk_add_event(ResliceAxesChangedEvent) \
296  /*^ used by vtkAnimationCue*/ \
297  _vtk_add_event(AnimationCueTickEvent) \
298  _vtk_add_event(EndAnimationCueEvent) \
299  _vtk_add_event(VolumeMapperRenderEndEvent) \
300  _vtk_add_event(VolumeMapperRenderProgressEvent) \
301  _vtk_add_event(VolumeMapperRenderStartEvent) \
302  _vtk_add_event(VolumeMapperComputeGradientsEndEvent) \
303  _vtk_add_event(VolumeMapperComputeGradientsProgressEvent) \
304  _vtk_add_event(VolumeMapperComputeGradientsStartEvent) \
305  _vtk_add_event(WidgetModifiedEvent) \
306  _vtk_add_event(WidgetValueChangedEvent) \
307  _vtk_add_event(WidgetActivateEvent) \
308  _vtk_add_event(ConnectionCreatedEvent) \
309  _vtk_add_event(ConnectionClosedEvent) \
310  _vtk_add_event(DomainModifiedEvent) \
311  _vtk_add_event(PropertyModifiedEvent) \
312  _vtk_add_event(UpdateEvent) \
313  _vtk_add_event(RegisterEvent) \
314  _vtk_add_event(UnRegisterEvent) \
315  _vtk_add_event(UpdateInformationEvent) \
316  _vtk_add_event(AnnotationChangedEvent) \
317  _vtk_add_event(SelectionChangedEvent) \
318  _vtk_add_event(UpdatePropertyEvent) \
319  _vtk_add_event(ViewProgressEvent) \
320  _vtk_add_event(UpdateDataEvent) \
321  _vtk_add_event(CurrentChangedEvent) \
322  _vtk_add_event(ComputeVisiblePropBoundsEvent) \
323  _vtk_add_event(TDxMotionEvent) \
324  /*^ 3D Connexion device event */ \
325  _vtk_add_event(TDxButtonPressEvent) \
326  /*^ 3D Connexion device event */ \
327  _vtk_add_event(TDxButtonReleaseEvent) \
328  /* 3D Connexion device event */ \
329  _vtk_add_event(HoverEvent) \
330  _vtk_add_event(LoadStateEvent) \
331  _vtk_add_event(SaveStateEvent) \
332  _vtk_add_event(StateChangedEvent) \
333  _vtk_add_event(WindowMakeCurrentEvent) \
334  _vtk_add_event(WindowIsCurrentEvent) \
335  _vtk_add_event(WindowFrameEvent) \
336  _vtk_add_event(HighlightEvent) \
337  _vtk_add_event(WindowSupportsOpenGLEvent) \
338  _vtk_add_event(WindowIsDirectEvent) \
339  _vtk_add_event(WindowStereoTypeChangedEvent) \
340  _vtk_add_event(WindowResizeEvent) \
341  _vtk_add_event(UncheckedPropertyModifiedEvent) \
342  _vtk_add_event(UpdateShaderEvent) \
343  _vtk_add_event(MessageEvent) \
344  _vtk_add_event(StartSwipeEvent) \
345  _vtk_add_event(SwipeEvent) \
346  _vtk_add_event(EndSwipeEvent) \
347  _vtk_add_event(StartPinchEvent) \
348  _vtk_add_event(PinchEvent) \
349  _vtk_add_event(EndPinchEvent) \
350  _vtk_add_event(StartRotateEvent) \
351  _vtk_add_event(RotateEvent) \
352  _vtk_add_event(EndRotateEvent) \
353  _vtk_add_event(StartPanEvent) \
354  _vtk_add_event(PanEvent) \
355  _vtk_add_event(EndPanEvent) \
356  _vtk_add_event(TapEvent) \
357  _vtk_add_event(LongTapEvent) \
358  _vtk_add_event(FourthButtonPressEvent) \
359  _vtk_add_event(FourthButtonReleaseEvent) \
360  _vtk_add_event(FifthButtonPressEvent) \
361  _vtk_add_event(FifthButtonReleaseEvent) \
362  _vtk_add_event(Move3DEvent) \
363  _vtk_add_event(Button3DEvent) \
364  _vtk_add_event(TextEvent) \
365  _vtk_add_event(LeftButtonDoubleClickEvent) \
366  _vtk_add_event(RightButtonDoubleClickEvent)
367 // clang-format on
368 
369 #define vtkEventDeclarationMacro(_enum_name) \
370  enum _enum_name \
371  { \
372  NoEvent = 0, \
373  vtkAllEventsMacro() UserEvent = 1000 \
374  }
375 
376 // The superclass that all commands should be subclasses of
377 class VTKCOMMONCORE_EXPORT vtkCommand : public vtkObjectBase
378 {
379 public:
381 
387  void UnRegister();
388  void UnRegister(vtkObjectBase*) override { this->UnRegister(); }
389 
402  virtual void Execute(vtkObject* caller, unsigned long eventId, void* callData) = 0;
403 
405 
409  static const char* GetStringFromEventId(unsigned long event);
410  static unsigned long GetEventIdFromString(const char* event);
412 
416  static bool EventHasData(unsigned long event);
417 
422  void SetAbortFlag(int f) { this->AbortFlag = f; }
423  int GetAbortFlag() { return this->AbortFlag; }
424  void AbortFlagOn() { this->SetAbortFlag(1); }
425  void AbortFlagOff() { this->SetAbortFlag(0); }
426 
433  void SetPassiveObserver(int f) { this->PassiveObserver = f; }
434  int GetPassiveObserver() { return this->PassiveObserver; }
435  void PassiveObserverOn() { this->SetPassiveObserver(1); }
436  void PassiveObserverOff() { this->SetPassiveObserver(0); }
437 
444 #define _vtk_add_event(Enum) Enum,
446 #undef _vtk_add_event
447 
448 protected:
451 
453  ~vtkCommand() override {}
454 
455  friend class vtkSubjectHelper;
456 
458  : vtkObjectBase(c)
459  {
460  }
461  void operator=(const vtkCommand&) {}
462 };
463 
464 #endif /* vtkCommand_h */
465 
466 // VTK-HeaderTest-Exclude: vtkCommand.h
superclass for callback/observer methods
Definition: vtkCommand.h:378
void UnRegister(vtkObjectBase *) override
Decrease the reference count (release by another object).
Definition: vtkCommand.h:388
static bool EventHasData(unsigned long event)
Does this event type contain vtkEventData.
void SetAbortFlag(int f)
Set/Get the abort flag.
Definition: vtkCommand.h:422
void AbortFlagOn()
Definition: vtkCommand.h:424
vtkBaseTypeMacro(vtkCommand, vtkObjectBase)
int GetAbortFlag()
Definition: vtkCommand.h:423
void PassiveObserverOff()
Definition: vtkCommand.h:436
void PassiveObserverOn()
Definition: vtkCommand.h:435
int PassiveObserver
Definition: vtkCommand.h:450
int GetPassiveObserver()
Definition: vtkCommand.h:434
int AbortFlag
Definition: vtkCommand.h:449
void AbortFlagOff()
Definition: vtkCommand.h:425
static const char * GetStringFromEventId(unsigned long event)
Convenience methods for translating between event names and event ids.
virtual void Execute(vtkObject *caller, unsigned long eventId, void *callData)=0
All derived classes of vtkCommand must implement this method.
void UnRegister()
Decrease the reference count (release by another object).
void operator=(const vtkCommand &)
Definition: vtkCommand.h:461
~vtkCommand() override
Definition: vtkCommand.h:453
void SetPassiveObserver(int f)
Set/Get the passive observer flag.
Definition: vtkCommand.h:433
static unsigned long GetEventIdFromString(const char *event)
vtkCommand(const vtkCommand &c)
Definition: vtkCommand.h:457
abstract base class for most VTK objects
Definition: vtkObjectBase.h:64
abstract base class for most VTK objects
Definition: vtkObject.h:54
#define vtkEventDeclarationMacro(_enum_name)
Definition: vtkCommand.h:369