You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
181 lines
5.9 KiB
181 lines
5.9 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkCommand.h,v $
|
|
|
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
|
All rights reserved.
|
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notice for more information.
|
|
|
|
=========================================================================*/
|
|
// .NAME vtkCommand - superclass for callback/observer methods
|
|
// .SECTION Description
|
|
// vtkCommand is an implementation of the observer/command design
|
|
// pattern. In this design pattern, any instance of vtkObject can be
|
|
// "observed" for any events it might invoke. For example,
|
|
// vtkRenderer invokes a StartEvent as it begins to render and a
|
|
// EndEvent when it finishes rendering. Filters (subclasses of
|
|
// vtkProcessObject) invoke StartEvent, ProgressEvent, and EndEvent as
|
|
// the filter processes data. Observers of events are added with the
|
|
// AddObserver() method found in vtkObject. AddObserver(), besides
|
|
// requiring an event id or name, also takes an instance of vtkCommand
|
|
// (or a subclasses). Note that vtkCommand is meant to be subclassed,
|
|
// so that you can package the information necessary to support your
|
|
// callback.
|
|
//
|
|
// Event processing can be organized in priority lists, so it is
|
|
// possible to truncate the processing of a particular event by
|
|
// setting the AbortFlag variable. The priority is set using the
|
|
// AddObserver() method. By default the priority is 0, events of the
|
|
// same priority are processed in last-in-first-processed order. The
|
|
// ordering/aborting of events is important for things like 3D
|
|
// widgets, which handle an event if the widget is selected (and then
|
|
// aborting further processing of that event). Otherwise. the event
|
|
// is passed along for further processing.
|
|
|
|
// .SECTION See Also
|
|
// vtkObject vtkCallbackCommand vtkOldStyleCallbackCommand
|
|
// vtkInteractorObserver vtk3DWidget
|
|
|
|
#ifndef __vtkCommand_h
|
|
#define __vtkCommand_h
|
|
|
|
#include "vtkObjectBase.h"
|
|
|
|
class vtkObject;
|
|
|
|
// The superclass that all commands should be subclasses of
|
|
class VTK_COMMON_EXPORT vtkCommand : public vtkObjectBase
|
|
{
|
|
public:
|
|
// Description:
|
|
// Decrease the reference count (release by another object). This has
|
|
// the same effect as invoking Delete() (i.e., it reduces the reference
|
|
// count by 1).
|
|
void UnRegister();
|
|
virtual void UnRegister(vtkObjectBase *)
|
|
{ this->UnRegister(); }
|
|
|
|
// Description:
|
|
// All derived classes of vtkCommand must implement this
|
|
// method. This is the method that actually does the work of the
|
|
// callback. The caller argument is the object invoking the event,
|
|
// the eventId parameter is the id of the event, and callData
|
|
// parameter is data that can be passed into the execute
|
|
// method. (Note: vtkObject::InvokeEvent() takes two parameters: the
|
|
// event id (or name) and call data. Typically call data is NULL,
|
|
// but the user can package data and pass it this
|
|
// way. Alternatively, a derived class of vtkCommand can be used to
|
|
// pass data.)
|
|
virtual void Execute(vtkObject *caller, unsigned long eventId,
|
|
void *callData) = 0;
|
|
|
|
// Description:
|
|
// Convenience methods for translating between event names and event
|
|
// ids.
|
|
static const char *GetStringFromEventId(unsigned long event);
|
|
static unsigned long GetEventIdFromString(const char *event);
|
|
|
|
// Description:
|
|
// Set/Get the abort flag. If this is set to true no further
|
|
// commands are executed.
|
|
void SetAbortFlag(int f)
|
|
{ this->AbortFlag = f; }
|
|
int GetAbortFlag()
|
|
{ return this->AbortFlag; }
|
|
void AbortFlagOn()
|
|
{ this->SetAbortFlag(1); }
|
|
void AbortFlagOff()
|
|
{ this->SetAbortFlag(0); }
|
|
|
|
//BTX
|
|
// Description:
|
|
// All the currently defined events are listed here. Developers can
|
|
// use -- vtkCommand::UserEvent + int to specify their own event
|
|
// ids. If this list is adjusted, be sure to adjust
|
|
// vtkCommandEventStrings in vtkCommand.cxx to match.
|
|
enum EventIds {
|
|
NoEvent = 0,
|
|
AnyEvent,
|
|
DeleteEvent,
|
|
StartEvent,
|
|
EndEvent,
|
|
RenderEvent,
|
|
ProgressEvent,
|
|
PickEvent,
|
|
StartPickEvent,
|
|
EndPickEvent,
|
|
AbortCheckEvent,
|
|
ExitEvent,
|
|
LeftButtonPressEvent,
|
|
LeftButtonReleaseEvent,
|
|
MiddleButtonPressEvent,
|
|
MiddleButtonReleaseEvent,
|
|
RightButtonPressEvent,
|
|
RightButtonReleaseEvent,
|
|
EnterEvent,
|
|
LeaveEvent,
|
|
KeyPressEvent,
|
|
KeyReleaseEvent,
|
|
CharEvent,
|
|
ExposeEvent,
|
|
ConfigureEvent,
|
|
TimerEvent,
|
|
MouseMoveEvent,
|
|
MouseWheelForwardEvent,
|
|
MouseWheelBackwardEvent,
|
|
ResetCameraEvent,
|
|
ResetCameraClippingRangeEvent,
|
|
ModifiedEvent,
|
|
WindowLevelEvent,
|
|
StartWindowLevelEvent,
|
|
EndWindowLevelEvent,
|
|
ResetWindowLevelEvent,
|
|
SetOutputEvent,
|
|
ErrorEvent,
|
|
WarningEvent,
|
|
StartInteractionEvent, //mainly used by vtkInteractorObservers
|
|
InteractionEvent,
|
|
EndInteractionEvent,
|
|
EnableEvent,
|
|
DisableEvent,
|
|
CreateTimerEvent,
|
|
DestroyTimerEvent,
|
|
PlacePointEvent,
|
|
PlaceWidgetEvent,
|
|
CursorChangedEvent,
|
|
ExecuteInformationEvent,
|
|
RenderWindowMessageEvent,
|
|
WrongTagEvent,
|
|
StartAnimationCueEvent, // used by vtkAnimationCue
|
|
AnimationCueTickEvent,
|
|
EndAnimationCueEvent,
|
|
VolumeMapperRenderProgressEvent,
|
|
VolumeMapperComputeGradientsEndEvent,
|
|
VolumeMapperComputeGradientsProgressEvent,
|
|
VolumeMapperComputeGradientsStartEvent,
|
|
WidgetModifiedEvent,
|
|
WidgetValueChangedEvent,
|
|
WidgetActivateEvent,
|
|
UserEvent = 1000
|
|
};
|
|
//ETX
|
|
|
|
protected:
|
|
int AbortFlag;
|
|
vtkCommand();
|
|
virtual ~vtkCommand() {}
|
|
|
|
friend class vtkSubjectHelper;
|
|
//BTX
|
|
vtkCommand(const vtkCommand& c) : vtkObjectBase(c) {}
|
|
void operator=(const vtkCommand&) {}
|
|
//ETX
|
|
};
|
|
|
|
#endif /* __vtkCommand_h */
|
|
|
|
|