Slicer  4.10
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
vtkEventBroker.h
Go to the documentation of this file.
1 /*=auto=========================================================================
2 
3  Portions (c) Copyright 2005 Brigham and Women's Hospital (BWH) All Rights Reserved.
4 
5  See COPYRIGHT.txt
6  or http://www.slicer.org/copyright/copyright.txt for details.
7 
8  Program: 3D Slicer
9  Module: $RCSfile: vtkEventBroker.h,v $
10  Date: $Date: 2006/01/08 04:48:05 $
11  Version: $Revision: 1.45 $
12 
13 =========================================================================auto=*/
14 
15 #ifndef __vtkEventBroker_h
16 #define __vtkEventBroker_h
17 
18 // MRML includes
19 #include "vtkMRML.h"
20 
21 // VTK includes
22 #include <vtkObject.h>
23 class vtkTimerLog;
24 
25 // STD includes
26 #include <deque>
27 #include <vector>
28 #include <set>
29 #include <map>
30 #include <fstream>
31 
32 class vtkCollection;
33 class vtkCallbackCommand;
34 class vtkObservation;
35 
44 //
49 class VTK_MRML_EXPORT vtkEventBroker : public vtkObject
50 {
51 public:
52  vtkTypeMacro(vtkEventBroker, vtkObject);
53  void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
54 
55  typedef std::set< vtkObservation * > ObservationVector;
56 
59  static vtkEventBroker* GetInstance();
60 
67  static vtkEventBroker* New();
68 
75  static void Callback(vtkObject *caller,
76  unsigned long eid, void *clientData, void *callData);
77 
82  vtkObservation *AddObservation (vtkObject *subject, unsigned long event, vtkObject *observer, vtkCallbackCommand *notify, float priority=0.0f);
83 
87  vtkObservation *AddObservation (vtkObject *subject, const char *event, const char *script);
88 
91  void RemoveObservation (vtkObservation *observation);
92 
97  void RemoveObservations (ObservationVector observations);
98  void RemoveObservations (vtkObject *observer);
99  void RemoveObservations (vtkObject *subject, vtkObject *observer);
100  void RemoveObservations (vtkObject *subject, unsigned long event, vtkObject *observer);
101  void RemoveObservations (vtkObject *subject, unsigned long event, vtkObject *observer, vtkCallbackCommand *notify);
102  void RemoveObservationsForSubjectByTag (vtkObject *subject, unsigned long tag);
104  ObservationVector GetSubjectObservations(vtkObject *subject);
109  ObservationVector GetObservations (vtkObject *subject,
110  unsigned long event = 0,
111  vtkObject *observer = 0,
112  vtkCallbackCommand *notify = 0,
113  unsigned int maxReturnedObservations = 0);
115  bool GetObservationExist (vtkObject *subject,
116  unsigned long event = 0,
117  vtkObject *observer = 0,
118  vtkCallbackCommand *notify = 0);
119  ObservationVector GetObservationsForSubjectByTag (vtkObject *subject, unsigned long tag);
120 
125  vtkCollection *GetObservationsForSubject (vtkObject *subject);
126  vtkCollection *GetObservationsForObserver (vtkObject *observer);
127  vtkCollection *GetObservationsForCallback (vtkCallbackCommand* callback);
128 
131  int GetNumberOfObservations();
132  vtkObservation *GetNthObservation(int n);
133 
136  void ProcessEvent (vtkObservation *observation, vtkObject *caller, unsigned long eid, void *callData);
137 
141  vtkBooleanMacro (EventLogging, int);
142  vtkSetMacro (EventLogging, int);
143  vtkGetMacro (EventLogging, int);
144 
148  vtkSetMacro (EventNestingLevel, int);
149  vtkGetMacro (EventNestingLevel, int);
150 
153  vtkSetStringMacro (LogFileName);
154  vtkGetStringMacro (LogFileName);
155 
158  virtual void SetTimerLog(vtkTimerLog* timerLog);
159  vtkGetObjectMacro (TimerLog, vtkTimerLog);
160 
163  void OpenLogFile ();
164  void CloseLogFile ();
165 
169  void LogEvent (vtkObservation *observation);
170 
174  int GenerateGraphFile ( const char *graphFile );
175 
176 
182  enum EventMode {
184  Asynchronous
185  };
186  vtkGetMacro(EventMode, int);
187  void SetEventMode(int eventMode)
188  {
189  if (eventMode != this->EventMode)
190  {
191  this->EventMode = eventMode;
192  this->ProcessEventQueue();
193  this->Modified();
194  }
195  };
196 
199  const char * GetEventModeAsString() {
200  if (this->EventMode == vtkEventBroker::Synchronous) return ("Synchronous");
201  if (this->EventMode == vtkEventBroker::Asynchronous) return ("Asynchronous");
202  return "Undefined";
203  }
204 
205 
207 
216  void QueueObservation (vtkObservation *observation, unsigned long eid,
217  void *callData);
218  int GetNumberOfQueuedObservations ();
219  vtkObservation *GetNthQueuedObservation (int n);
220  vtkObservation *DequeueObservation ();
221  void InvokeObservation (vtkObservation *observation, unsigned long eid,
222  void *callData);
223  void ProcessEventQueue ();
224 
232  vtkBooleanMacro (CompressCallData, int);
233  vtkGetMacro (CompressCallData, int);
234  vtkSetMacro (CompressCallData, int);
235 
238  void SetScriptHandler ( void (*scriptHandler) (const char* script, void *clientData), void *clientData )
239  {
240  this->ScriptHandler = scriptHandler;
241  this->ScriptHandlerClientData = clientData;
242  }
243 
244 protected:
245  vtkEventBroker();
246  virtual ~vtkEventBroker();
248  void operator=(const vtkEventBroker&);
249 
252  static void classInitialize();
253  static void classFinalize();
254 
261  void AttachObservation (vtkObservation *observation);
262  void DetachObservation (vtkObservation *observation);
263 
266 
267 
269  typedef std::map< vtkObject*, ObservationVector > ObjectToObservationVectorMap;
270 
274 
276  std::deque< vtkObservation * > EventQueue;
277 
278  void (*ScriptHandler) (const char* script, void* clientData);
280 
283  char *LogFileName;
284  vtkTimerLog *TimerLog;
285 
288 
289  std::ofstream LogFile;
290 private:
294  void DetachObservations();
296  friend class vtkObservation;
297 };
298 
300 class VTK_MRML_EXPORT vtkEventBrokerInitialize
301 {
302 public:
304 
307 private:
308  static unsigned int Count;
309 };
310 
315 
316 #endif
void SetScriptHandler(void(*scriptHandler)(const char *script, void *clientData), void *clientData)
Sets the method pointer to be used for processing script observations
std::ofstream LogFile
vtkTimerLog * TimerLog
ObjectToObservationVectorMap SubjectMap
maps to manage quick lookup by object
static vtkEventBrokerInitialize vtkEventBrokerInitializer
Stores information about the relationship between a Subject and an Observer.
Class that manages adding and deleting of observers with events.
std::map< vtkObject *, ObservationVector > ObjectToObservationVectorMap
void * ScriptHandlerClientData
void SetEventModeToAsynchronous()
ObjectToObservationVectorMap ObserverMap
std::set< vtkObservation *> ObservationVector
vtkEventBrokerInitialize Self
const char * GetEventModeAsString()
std::deque< vtkObservation *> EventQueue
The event queue of triggered but not-yet-invoked observations.
void SetEventModeToSynchronous()
Utility class to make sure qSlicerModuleManager is initialized before it is used. ...
void SetEventMode(int eventMode)
vtkEventBroker Self