VTK
vtkObject.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkObject.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=========================================================================*/
47#ifndef vtkObject_h
48#define vtkObject_h
49
50#include "vtkCommonCoreModule.h" // For export macro
51#include "vtkObjectBase.h"
52#include "vtkSetGet.h"
53#include "vtkTimeStamp.h"
54#include "vtkWeakPointerBase.h" // needed for vtkWeakPointer
55
56class vtkSubjectHelper;
57class vtkCommand;
58
59class VTKCOMMONCORE_EXPORT vtkObject : public vtkObjectBase
60{
61public:
63
68 static vtkObject *New();
69
70#ifdef _WIN32
71 // avoid dll boundary problems
72 void* operator new( size_t tSize );
73 void operator delete( void* p );
74#endif
75
79 virtual void DebugOn();
80
84 virtual void DebugOff();
85
89 bool GetDebug();
90
94 void SetDebug(bool debugFlag);
95
100 static void BreakOnError();
101
108 virtual void Modified();
109
114
121 void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
122
124
128 static void SetGlobalWarningDisplay(int val);
134
136
148 unsigned long AddObserver(unsigned long event, vtkCommand *,
149 float priority=0.0f);
150 unsigned long AddObserver(const char *event, vtkCommand *,
151 float priority=0.0f);
152 vtkCommand *GetCommand(unsigned long tag);
154 void RemoveObservers(unsigned long event, vtkCommand *);
155 void RemoveObservers(const char *event, vtkCommand *);
156 int HasObserver(unsigned long event, vtkCommand *);
157 int HasObserver(const char *event, vtkCommand *);
159
160 void RemoveObserver(unsigned long tag);
161 void RemoveObservers(unsigned long event);
162 void RemoveObservers(const char *event);
163 void RemoveAllObservers(); //remove every last one of them
164 int HasObserver(unsigned long event);
165 int HasObserver(const char *event);
166
168
193 template <class U, class T>
194 unsigned long AddObserver(unsigned long event,
195 U observer, void (T::*callback)(), float priority=0.0f)
196 {
197 vtkClassMemberCallback<T> *callable =
198 new vtkClassMemberCallback<T>(observer, callback);
199 // callable is deleted when the observer is cleaned up (look at
200 // vtkObjectCommandInternal)
201 return this->AddTemplatedObserver(event, callable, priority);
202 }
203 template <class U, class T>
204 unsigned long AddObserver(unsigned long event,
205 U observer, void (T::*callback)(vtkObject*, unsigned long, void*),
206 float priority=0.0f)
207 {
208 vtkClassMemberCallback<T> *callable =
209 new vtkClassMemberCallback<T>(observer, callback);
210 // callable is deleted when the observer is cleaned up (look at
211 // vtkObjectCommandInternal)
212 return this->AddTemplatedObserver(event, callable, priority);
213 }
215
217
221 template <class U, class T>
222 unsigned long AddObserver(unsigned long event,
223 U observer, bool (T::*callback)(vtkObject*, unsigned long, void*),
224 float priority=0.0f)
225 {
226 vtkClassMemberCallback<T> *callable =
227 new vtkClassMemberCallback<T>(observer, callback);
228 // callable is deleted when the observer is cleaned up (look at
229 // vtkObjectCommandInternal)
230 return this->AddTemplatedObserver(event, callable, priority);
231 }
233
235
240 int InvokeEvent(unsigned long event, void *callData);
241 int InvokeEvent(const char *event, void *callData);
243
244 int InvokeEvent(unsigned long event) { return this->InvokeEvent(event, NULL); };
245 int InvokeEvent(const char *event) { return this->InvokeEvent(event, NULL); };
246
247protected:
249 ~vtkObject() VTK_OVERRIDE;
250
251 // See vtkObjectBase.h.
252 void RegisterInternal(vtkObjectBase*, vtkTypeBool check) VTK_OVERRIDE;
253 void UnRegisterInternal(vtkObjectBase*, vtkTypeBool check) VTK_OVERRIDE;
254
255 bool Debug; // Enable debug messages
256 vtkTimeStamp MTime; // Keep track of modification time
257 vtkSubjectHelper *SubjectHelper; // List of observers on this object
258
260
268 void InternalGrabFocus(vtkCommand *mouseEvents, vtkCommand *keypressEvents=NULL);
269 void InternalReleaseFocus();
271
272private:
273 vtkObject(const vtkObject&) VTK_DELETE_FUNCTION;
274 void operator=(const vtkObject&) VTK_DELETE_FUNCTION;
275
283 class vtkClassMemberCallbackBase
284 {
285 public:
287
290 virtual bool operator()(vtkObject*, unsigned long, void*) = 0;
291 virtual ~vtkClassMemberCallbackBase(){}
292 };
294
296
300 template<class T>
301 class vtkClassMemberHandlerPointer
302 {
303 public:
304 void operator=(vtkObjectBase *o)
305 {
306 // The cast is needed in case "o" has multi-inheritance,
307 // to offset the pointer to get the vtkObjectBase.
308 if ((this->VoidPointer = dynamic_cast<T*>(o)) == 0)
309 {
310 // fallback to just using its vtkObjectBase as-is.
311 this->VoidPointer = o;
312 }
313 this->WeakPointer = o;
314 this->UseWeakPointer = true;
315 }
316 void operator=(void *o)
317 {
318 this->VoidPointer = o;
319 this->WeakPointer = 0;
320 this->UseWeakPointer = false;
321 }
322 T *GetPointer()
323 {
324 if (this->UseWeakPointer && !this->WeakPointer.GetPointer())
325 {
326 return 0;
327 }
328 return static_cast<T*>(this->VoidPointer);
329 }
330 private:
331 vtkWeakPointerBase WeakPointer;
332 void *VoidPointer;
333 bool UseWeakPointer;
334 };
336
338
341 template <class T>
342 class vtkClassMemberCallback : public vtkClassMemberCallbackBase
343 {
344 vtkClassMemberHandlerPointer<T> Handler;
345 void (T::*Method1)();
346 void (T::*Method2)(vtkObject*, unsigned long, void*);
347 bool (T::*Method3)(vtkObject*, unsigned long, void*);
349
350 public:
351 vtkClassMemberCallback(T* handler, void (T::*method)())
352 {
353 this->Handler = handler;
354 this->Method1 = method;
355 this->Method2 = NULL;
356 this->Method3 = NULL;
357 }
358
359 vtkClassMemberCallback(
360 T* handler, void (T::*method)(vtkObject*, unsigned long, void*))
361 {
362 this->Handler = handler;
363 this->Method1 = NULL;
364 this->Method2 = method;
365 this->Method3 = NULL;
366 }
367
368 vtkClassMemberCallback(
369 T* handler, bool (T::*method)(vtkObject*, unsigned long, void*))
370 {
371 this->Handler = handler;
372 this->Method1 = NULL;
373 this->Method2 = NULL;
374 this->Method3 = method;
375 }
376 ~vtkClassMemberCallback() VTK_OVERRIDE { }
377
378 // Called when the event is invoked
379 bool operator()(
380 vtkObject* caller, unsigned long event, void* calldata) VTK_OVERRIDE
381 {
382 T *handler = this->Handler.GetPointer();
383 if (handler)
384 {
385 if (this->Method1)
386 {
387 (handler->*this->Method1)();
388 }
389 else if (this->Method2)
390 {
391 (handler->*this->Method2)(caller, event, calldata);
392 }
393 else if (this->Method3)
394 {
395 return (handler->*this->Method3)(caller, event, calldata);
396 }
397 }
398 return false;
399 }
400 };
401
403
406 unsigned long AddTemplatedObserver(
407 unsigned long event, vtkClassMemberCallbackBase* callable, float priority);
408 // Friend to access AddTemplatedObserver().
409 friend class vtkObjectCommandInternal;
411
412};
413
414#endif
415// VTK-HeaderTest-Exclude: vtkObject.h
superclass for callback/observer methods
Definition: vtkCommand.h:342
a simple class to control print indentation
Definition: vtkIndent.h:40
abstract base class for most VTK objects
Definition: vtkObjectBase.h:66
abstract base class for most VTK objects
Definition: vtkObject.h:60
vtkBaseTypeMacro(vtkObject, vtkObjectBase)
virtual void DebugOn()
Turn debugging output on.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void RemoveObservers(const char *event)
unsigned long AddObserver(unsigned long event, U observer, bool(T::*callback)(vtkObject *, unsigned long, void *), float priority=0.0f)
Allow user to set the AbortFlagOn() with the return value of the callback method.
Definition: vtkObject.h:222
int HasObserver(unsigned long event, vtkCommand *)
virtual void DebugOff()
Turn debugging output off.
unsigned long AddObserver(unsigned long event, U observer, void(T::*callback)(vtkObject *, unsigned long, void *), float priority=0.0f)
Definition: vtkObject.h:204
~vtkObject() override
int HasObserver(unsigned long event)
static void SetGlobalWarningDisplay(int val)
This is a global flag that controls whether any debug, warning or error messages are displayed.
void RemoveObserver(vtkCommand *)
void RemoveObservers(unsigned long event, vtkCommand *)
int InvokeEvent(unsigned long event)
Definition: vtkObject.h:244
void RemoveAllObservers()
int HasObserver(const char *event)
static void GlobalWarningDisplayOff()
Definition: vtkObject.h:130
int InvokeEvent(const char *event, void *callData)
virtual void Modified()
Update the modification time for this object.
int InvokeEvent(unsigned long event, void *callData)
This method invokes an event and return whether the event was aborted or not.
static int GetGlobalWarningDisplay()
unsigned long AddObserver(unsigned long event, vtkCommand *, float priority=0.0f)
Allow people to add/remove/invoke observers (callbacks) to any VTK object.
int HasObserver(const char *event, vtkCommand *)
void RemoveObservers(const char *event, vtkCommand *)
unsigned long AddObserver(const char *event, vtkCommand *, float priority=0.0f)
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on.
void SetDebug(bool debugFlag)
Set the value of the debug flag.
static void BreakOnError()
This method is called when vtkErrorMacro executes.
static void GlobalWarningDisplayOn()
Definition: vtkObject.h:129
bool GetDebug()
Get the value of the debug flag.
virtual vtkMTimeType GetMTime()
Return this object's modified time.
void RemoveObservers(unsigned long event)
int InvokeEvent(const char *event)
Definition: vtkObject.h:245
void RemoveObserver(unsigned long tag)
unsigned long AddObserver(unsigned long event, U observer, void(T::*callback)(), float priority=0.0f)
Overloads to AddObserver that allow developers to add class member functions as callbacks for events.
Definition: vtkObject.h:194
vtkCommand * GetCommand(unsigned long tag)
record modification and/or execution time
Definition: vtkTimeStamp.h:36
Non-templated superclass for vtkWeakPointer.
@ priority
Definition: vtkX3D.h:450
int vtkTypeBool
Definition: vtkABI.h:69
vtkTypeUInt64 vtkMTimeType
Definition: vtkType.h:248