Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TPyDispatcher.h
Go to the documentation of this file.
1 // Author: Wim Lavrijsen Aug 2007
2 
3 #ifndef ROOT_TPyDispatcher
4 #define ROOT_TPyDispatcher
5 
6 //////////////////////////////////////////////////////////////////////////////
7 // //
8 // TPyDispatcher //
9 // //
10 // Dispatcher for CINT callbacks into python code. //
11 // //
12 //////////////////////////////////////////////////////////////////////////////
13 
14 
15 // ROOT
16 #include "TObject.h"
17 
18 class TDNDData;
19 class TEveDigitSet;
20 class TEveElement;
21 class TEveTrack;
22 class TEveWindow;
23 class TGFrame;
24 class TGListTreeItem;
25 class TGMdiFrame;
26 class TGLPhysicalShape;
27 class TGShutterItem;
28 class TGLVEntry;
29 class TGLViewerBase;
30 class TGVFileSplitter;
31 class TList;
32 class TObject;
33 class TPad;
34 class TProofProgressInfo;
35 class TQCommand;
36 class TSlave;
37 class TSocket;
38 class TVirtualPad;
39 
40 struct Event_t;
41 
42 // Python
43 struct _object;
44 typedef _object PyObject;
45 
46 
47 class TPyDispatcher : public TObject {
48 public:
49  TPyDispatcher( PyObject* callable );
50  TPyDispatcher( const TPyDispatcher& );
51  TPyDispatcher& operator=( const TPyDispatcher& );
52  ~TPyDispatcher();
53 
54 public:
55 #ifndef __CINT__
56  PyObject* DispatchVA( const char* format = 0, ... );
57 #else
58  PyObject* DispatchVA( const char* format, ... );
59 #endif
60  PyObject* DispatchVA1( const char* clname, void* obj, const char* format, ... );
61 
62 // pre-defined dispatches, same as per TQObject::Emit(); note that
63 // Emit() maps exclusively to this set, so several builtin types (e.g.
64 // Int_t, Bool_t, Float_t, etc.) have been omitted here
65  PyObject* Dispatch() { return DispatchVA( 0 ); }
66  PyObject* Dispatch( const char* param ) { return DispatchVA( "s", param ); }
67  PyObject* Dispatch( Double_t param ) { return DispatchVA( "d", param ); }
68  PyObject* Dispatch( Long_t param ) { return DispatchVA( "l", param ); }
69  PyObject* Dispatch( Long64_t param ) { return DispatchVA( "L", param ); }
70 
71 // further selection of pre-defined, existing dispatches
72  PyObject* Dispatch( Bool_t param ) { return DispatchVA( "i", param ); }
73  PyObject* Dispatch( char* param ) { return DispatchVA( "s", param ); }
74  PyObject* Dispatch( const char* text, Int_t len ) { return DispatchVA( "si", text, len ); }
75  PyObject* Dispatch( Int_t param ) { return DispatchVA( "i", param ); }
76  PyObject* Dispatch( Int_t x, Int_t y ) { return DispatchVA( "ii", x, y ); }
77  PyObject* Dispatch( ULong_t param ) { return DispatchVA( "k", param ); }
78  // ULong_t also for Handle_t (and Window_t, etc. ... )
79 
80  PyObject* Dispatch( Event_t* event ) { return DispatchVA1( "Event_t", event, 0 ); }
81  PyObject* Dispatch( Event_t* event, ULong_t wid ) { return DispatchVA1( "Event_t", event, "k", wid ); }
82  PyObject* Dispatch( TEveDigitSet* qs, Int_t idx ) { return DispatchVA1( "TEveDigitSet", qs, "i", idx ); }
83  PyObject* Dispatch( TEveElement* el ) { return DispatchVA1( "TEveElement", el, 0 ); }
84  PyObject* Dispatch( TEveTrack* et ) { return DispatchVA1( "TEveTrack", et, 0 ); }
85  PyObject* Dispatch( TEveWindow* window ) { return DispatchVA1( "TEveWindow", window, 0 ); }
86  PyObject* Dispatch( TGFrame* frame ) { return DispatchVA1( "TGFrame", frame, 0 ); }
87  PyObject* Dispatch( TGFrame* frame, Int_t btn ) {
88  return DispatchVA1( "TGFrame", frame, "i", btn ); }
89  PyObject* Dispatch( TGFrame* frame, Int_t btn, Int_t x, Int_t y ) {
90  return DispatchVA1( "TGFrame", frame, "iii", btn, x, y ); }
91  PyObject* Dispatch( TGFrame* frame, UInt_t keysym, UInt_t mask ) {
92  return DispatchVA1( "TGFrame", frame, "II", keysym, mask ); }
93  PyObject* Dispatch( TGListTreeItem* entry ) { return DispatchVA1( "TGListTreeItem", entry, 0 ); }
94  PyObject* Dispatch( TGListTreeItem* entry, UInt_t mask ) {
95  return DispatchVA1( "TGListTreeItem", entry, "I", mask ); }
96  PyObject* Dispatch( TGListTreeItem* entry, UInt_t keysym, UInt_t mask ) {
97  return DispatchVA1( "TGListTreeItem", entry, "II", keysym, mask ); }
98  PyObject* Dispatch( TGListTreeItem* entry, Int_t btn ) {
99  return DispatchVA1( "TGListTreeItem", entry, "i", btn ); }
100  PyObject* Dispatch( TGListTreeItem* entry, Int_t btn, Int_t x, Int_t y ) {
101  return DispatchVA1( "TGListTreeItem", entry, "iii", btn, x, y ); }
102  PyObject* Dispatch( TGLVEntry* entry, Int_t btn ) {
103  return DispatchVA1( "TGLVEntry", entry, "i", btn ); }
104  PyObject* Dispatch( TGLVEntry* entry, Int_t btn, Int_t x, Int_t y ) {
105  return DispatchVA1( "TGLVEntry", entry, "iii", btn, x, y ); }
106  PyObject* Dispatch( TGLViewerBase* viewer ) {
107  return DispatchVA1( "TGLViewerBase", viewer, 0 ); }
108  PyObject* Dispatch( TGLPhysicalShape* shape ) {
109  return DispatchVA1( "TGLPhysicalShape", shape, 0 ); }
110  PyObject* Dispatch( TGLPhysicalShape* shape, UInt_t u1, UInt_t u2 ) {
111  return DispatchVA1( "TGLPhysicalShape", shape, "II", u1, u2 ); }
112  PyObject* Dispatch( TGMdiFrame* frame ) { return DispatchVA1( "TGMdiFrame", frame, 0 ); }
113  PyObject* Dispatch( TGShutterItem* item ) { return DispatchVA1( "TGShutterItem", item, 0 ); }
114  PyObject* Dispatch( TGVFileSplitter* frame ) { return DispatchVA1( "TGVFileSplitter", frame, 0 ); }
115  PyObject* Dispatch( TList* objs ) { return DispatchVA1( "TList", objs, 0 ); }
116  PyObject* Dispatch( TObject* obj ) { return DispatchVA1( "TObject", obj, 0 ); }
117  PyObject* Dispatch( TObject* obj, Bool_t check ) {
118  return DispatchVA1( "TObject", obj, "i", check ); }
119  PyObject* Dispatch( TObject* obj, UInt_t state ) {
120  return DispatchVA1( "TObject", obj, "I", state ); }
121  PyObject* Dispatch( TObject* obj, UInt_t button, UInt_t state ) {
122  return DispatchVA1( "TObject", obj, "II", button, state ); }
123  PyObject* Dispatch( TSocket* sock ) { return DispatchVA1( "TSocket", sock, 0 ); }
124  PyObject* Dispatch( TVirtualPad* pad ) { return DispatchVA1( "TVirtualPad", pad, 0 ); }
125 
126  PyObject* Dispatch( TPad* selpad, TObject* selected, Int_t event );
127  PyObject* Dispatch( Int_t event, Int_t x, Int_t y, TObject* selected );
128  PyObject* Dispatch( TVirtualPad* pad, TObject* obj, Int_t event );
129  PyObject* Dispatch( TGListTreeItem* item, TDNDData* data );
130  PyObject* Dispatch( const char* name, const TList* attr );
131 
132 // for PROOF
133  PyObject* Dispatch( const char* msg, Bool_t all ) { return DispatchVA( "si", msg, all ); }
134  PyObject* Dispatch( Long64_t total, Long64_t processed ) {
135  return DispatchVA( "LL", total, processed );
136  }
137  PyObject* Dispatch( Long64_t total, Long64_t processed, Long64_t bytesread,
138  Float_t initTime, Float_t procTime,
139  Float_t evtrti, Float_t mbrti ) {
140  return DispatchVA( "LLLffff", total, processed, bytesread, initTime, procTime, evtrti, mbrti );
141  }
142  PyObject* Dispatch( Long64_t total, Long64_t processed, Long64_t bytesread,
143  Float_t initTime, Float_t procTime,
144  Float_t evtrti, Float_t mbrti,
145  Int_t actw, Int_t tses, Float_t eses ) {
146  return DispatchVA( "LLLffffiif",
147  total, processed, bytesread, initTime, procTime, evtrti, mbrti, actw, tses, eses );
148  }
149  PyObject* Dispatch( const char* sel, Int_t sz, Long64_t fst, Long64_t ent ) {
150  return DispatchVA( "siLL", sel, sz, fst, ent );
151  }
152  PyObject* Dispatch( const char* msg, Bool_t status, Int_t done, Int_t total ) {
153  return DispatchVA( "siii", msg, status, done, total );
154  }
155 
156  PyObject* Dispatch( TSlave* slave, Long64_t total, Long64_t processed ) {
157  return DispatchVA1( "TSlave", slave, "LL", total, processed );
158  }
159  PyObject* Dispatch( TProofProgressInfo* pi ) { return DispatchVA1( "TProofProgressInfo", pi, 0 ); }
160  PyObject* Dispatch( TSlave* slave ) { return DispatchVA( "TSlave", slave, 0 ); }
161  PyObject* Dispatch( TSlave* slave, TProofProgressInfo* pi );
162 
163  ClassDef( TPyDispatcher, 1 ); // Python dispatcher class
164 
165 private:
166  PyObject* fCallable; //! callable object to be dispatched
167 };
168 
169 #endif