Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TPyDispatcher.h
Go to the documentation of this file.
1// Author: Enric Tejedor CERN 07/2020
2// Original PyROOT code by Wim Lavrijsen, LBL
3
4/*************************************************************************
5 * Copyright (C) 1995-2020, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#ifndef ROOT_TPyDispatcher
13#define ROOT_TPyDispatcher
14
15//////////////////////////////////////////////////////////////////////////////
16// //
17// TPyDispatcher //
18// //
19// Dispatcher for C++ callbacks into Python code. //
20// //
21//////////////////////////////////////////////////////////////////////////////
22
23// ROOT
24#include "TObject.h"
25
26class TDNDData;
27class TEveDigitSet;
28class TEveElement;
29class TEveTrack;
30class TEveWindow;
31class TGFrame;
32class TGListTreeItem;
33class TGMdiFrame;
35class TGShutterItem;
36class TGLVEntry;
37class TGLViewerBase;
38class TGVFileSplitter;
39class TList;
40class TObject;
41class TPad;
43class TQCommand;
44class TSlave;
45class TSocket;
46class TVirtualPad;
47
48struct Event_t;
49
50// Python
51struct _object;
52typedef _object PyObject;
53
54class TPyDispatcher : public TObject {
55public:
56 TPyDispatcher(PyObject *callable);
60
61public:
62 PyObject *DispatchVA(const char *format = 0, ...);
63 PyObject *DispatchVA1(const char *clname, void *obj, const char *format, ...);
64
65 // pre-defined dispatches, same as per TQObject::Emit(); note that
66 // Emit() maps exclusively to this set, so several builtin types (e.g.
67 // Int_t, Bool_t, Float_t, etc.) have been omitted here
68 PyObject *Dispatch() { return DispatchVA(0); }
69 PyObject *Dispatch(const char *param) { return DispatchVA("s", param); }
70 PyObject *Dispatch(Double_t param) { return DispatchVA("d", param); }
71 PyObject *Dispatch(Long_t param) { return DispatchVA("l", param); }
72 PyObject *Dispatch(Long64_t param) { return DispatchVA("L", param); }
73
74 // further selection of pre-defined, existing dispatches
75 PyObject *Dispatch(Bool_t param) { return DispatchVA("i", param); }
76 PyObject *Dispatch(char *param) { return DispatchVA("s", param); }
77 PyObject *Dispatch(const char *text, Int_t len) { return DispatchVA("si", text, len); }
78 PyObject *Dispatch(Int_t param) { return DispatchVA("i", param); }
79 PyObject *Dispatch(Int_t x, Int_t y) { return DispatchVA("ii", x, y); }
80 PyObject *Dispatch(ULong_t param) { return DispatchVA("k", param); }
81 // ULong_t also for Handle_t (and Window_t, etc. ... )
82
83 PyObject *Dispatch(Event_t *event) { return DispatchVA1("Event_t", event, 0); }
84 PyObject *Dispatch(Event_t *event, ULong_t wid) { return DispatchVA1("Event_t", event, "k", wid); }
85 PyObject *Dispatch(TEveDigitSet *qs, Int_t idx) { return DispatchVA1("TEveDigitSet", qs, "i", idx); }
86 PyObject *Dispatch(TEveElement *el) { return DispatchVA1("TEveElement", el, 0); }
87 PyObject *Dispatch(TEveTrack *et) { return DispatchVA1("TEveTrack", et, 0); }
88 PyObject *Dispatch(TEveWindow *window) { return DispatchVA1("TEveWindow", window, 0); }
89 PyObject *Dispatch(TGFrame *frame) { return DispatchVA1("TGFrame", frame, 0); }
90 PyObject *Dispatch(TGFrame *frame, Int_t btn) { return DispatchVA1("TGFrame", frame, "i", btn); }
92 {
93 return DispatchVA1("TGFrame", frame, "iii", btn, x, y);
94 }
96 {
97 return DispatchVA1("TGFrame", frame, "II", keysym, mask);
98 }
99 PyObject *Dispatch(TGListTreeItem *entry) { return DispatchVA1("TGListTreeItem", entry, 0); }
100 PyObject *Dispatch(TGListTreeItem *entry, UInt_t mask) { return DispatchVA1("TGListTreeItem", entry, "I", mask); }
102 {
103 return DispatchVA1("TGListTreeItem", entry, "II", keysym, mask);
104 }
105 PyObject *Dispatch(TGListTreeItem *entry, Int_t btn) { return DispatchVA1("TGListTreeItem", entry, "i", btn); }
107 {
108 return DispatchVA1("TGListTreeItem", entry, "iii", btn, x, y);
109 }
110 PyObject *Dispatch(TGLVEntry *entry, Int_t btn) { return DispatchVA1("TGLVEntry", entry, "i", btn); }
112 {
113 return DispatchVA1("TGLVEntry", entry, "iii", btn, x, y);
114 }
115 PyObject *Dispatch(TGLViewerBase *viewer) { return DispatchVA1("TGLViewerBase", viewer, 0); }
116 PyObject *Dispatch(TGLPhysicalShape *shape) { return DispatchVA1("TGLPhysicalShape", shape, 0); }
118 {
119 return DispatchVA1("TGLPhysicalShape", shape, "II", u1, u2);
120 }
121 PyObject *Dispatch(TGMdiFrame *frame) { return DispatchVA1("TGMdiFrame", frame, 0); }
122 PyObject *Dispatch(TGShutterItem *item) { return DispatchVA1("TGShutterItem", item, 0); }
123 PyObject *Dispatch(TGVFileSplitter *frame) { return DispatchVA1("TGVFileSplitter", frame, 0); }
124 PyObject *Dispatch(TList *objs) { return DispatchVA1("TList", objs, 0); }
125 PyObject *Dispatch(TObject *obj) { return DispatchVA1("TObject", obj, 0); }
126 PyObject *Dispatch(TObject *obj, Bool_t check) { return DispatchVA1("TObject", obj, "i", check); }
127 PyObject *Dispatch(TObject *obj, UInt_t state) { return DispatchVA1("TObject", obj, "I", state); }
129 {
130 return DispatchVA1("TObject", obj, "II", button, state);
131 }
132 PyObject *Dispatch(TSocket *sock) { return DispatchVA1("TSocket", sock, 0); }
133 PyObject *Dispatch(TVirtualPad *pad) { return DispatchVA1("TVirtualPad", pad, 0); }
134
135 PyObject *Dispatch(TPad *selpad, TObject *selected, Int_t event);
136 PyObject *Dispatch(Int_t event, Int_t x, Int_t y, TObject *selected);
137 PyObject *Dispatch(TVirtualPad *pad, TObject *obj, Int_t event);
139 PyObject *Dispatch(const char *name, const TList *attr);
140
141 // for PROOF
142 PyObject *Dispatch(const char *msg, Bool_t all) { return DispatchVA("si", msg, all); }
143 PyObject *Dispatch(Long64_t total, Long64_t processed) { return DispatchVA("LL", total, processed); }
144 PyObject *Dispatch(Long64_t total, Long64_t processed, Long64_t bytesread, Float_t initTime, Float_t procTime,
145 Float_t evtrti, Float_t mbrti)
146 {
147 return DispatchVA("LLLffff", total, processed, bytesread, initTime, procTime, evtrti, mbrti);
148 }
149 PyObject *Dispatch(Long64_t total, Long64_t processed, Long64_t bytesread, Float_t initTime, Float_t procTime,
150 Float_t evtrti, Float_t mbrti, Int_t actw, Int_t tses, Float_t eses)
151 {
152 return DispatchVA("LLLffffiif", total, processed, bytesread, initTime, procTime, evtrti, mbrti, actw, tses, eses);
153 }
154 PyObject *Dispatch(const char *sel, Int_t sz, Long64_t fst, Long64_t ent)
155 {
156 return DispatchVA("siLL", sel, sz, fst, ent);
157 }
158 PyObject *Dispatch(const char *msg, Bool_t status, Int_t done, Int_t total)
159 {
160 return DispatchVA("siii", msg, status, done, total);
161 }
162
164 {
165 return DispatchVA1("TSlave", slave, "LL", total, processed);
166 }
167 PyObject *Dispatch(TProofProgressInfo *pi) { return DispatchVA1("TProofProgressInfo", pi, 0); }
168 PyObject *Dispatch(TSlave *slave) { return DispatchVA("TSlave", slave, 0); }
170
171private:
172 PyObject *fCallable; //! callable object to be dispatched
173};
174
175#endif
_object PyObject
int Int_t
Definition RtypesCore.h:45
unsigned long ULong_t
Definition RtypesCore.h:55
long Long_t
Definition RtypesCore.h:54
float Float_t
Definition RtypesCore.h:57
long long Long64_t
Definition RtypesCore.h:80
static unsigned int total
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t mask
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t sel
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize wid
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t UChar_t len
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t attr
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t format
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t button
Option_t Option_t TPoint TPoint const char text
char name[80]
Definition TGX11.cxx:110
_object PyObject
Drag and drop data container.
Base-class for storage of digit collections; provides transformation matrix (TEveTrans),...
Base class for TEveUtil visualization elements, providing hierarchy management, rendering control and...
Definition TEveElement.h:36
Visual representation of a track.
Definition TEveTrack.h:33
Abstract base-class for representing eve-windows.
Definition TEveWindow.h:210
A subclasses of TGWindow, and is used as base class for some simple widgets (buttons,...
Definition TGFrame.h:80
Concrete physical shape - a GL drawable.
Base class for GL viewers.
This file contains the TGMdiFrame class.
Definition TGMdiFrame.h:42
A doubly linked list.
Definition TList.h:38
Mother of all ROOT objects.
Definition TObject.h:41
The most important graphics class in the ROOT system.
Definition TPad.h:28
PyObject * Dispatch(TGMdiFrame *frame)
PyObject * Dispatch(TGLPhysicalShape *shape, UInt_t u1, UInt_t u2)
PyObject * Dispatch(TEveElement *el)
PyObject * Dispatch(TSlave *slave, Long64_t total, Long64_t processed)
PyObject * Dispatch(TGListTreeItem *entry, Int_t btn)
TPyDispatcher & operator=(const TPyDispatcher &)
Assignment operator. Applies python object reference counting.
PyObject * Dispatch(TGFrame *frame, UInt_t keysym, UInt_t mask)
PyObject * DispatchVA1(const char *clname, void *obj, const char *format,...)
PyObject * Dispatch(TGLVEntry *entry, Int_t btn, Int_t x, Int_t y)
PyObject * Dispatch(TGFrame *frame)
PyObject * Dispatch(TGShutterItem *item)
PyObject * Dispatch(Long_t param)
PyObject * Dispatch(TProofProgressInfo *pi)
PyObject * Dispatch(const char *text, Int_t len)
~TPyDispatcher()
Destructor. Reference counting for the held python object is in effect.
PyObject * Dispatch(const char *msg, Bool_t all)
PyObject * Dispatch(TGLViewerBase *viewer)
PyObject * Dispatch(TGListTreeItem *entry, UInt_t keysym, UInt_t mask)
PyObject * Dispatch(TGLPhysicalShape *shape)
PyObject * Dispatch(Long64_t total, Long64_t processed, Long64_t bytesread, Float_t initTime, Float_t procTime, Float_t evtrti, Float_t mbrti)
PyObject * Dispatch(Int_t param)
PyObject * Dispatch(TList *objs)
PyObject * Dispatch(const char *param)
PyObject * Dispatch(Bool_t param)
PyObject * Dispatch(Int_t x, Int_t y)
PyObject * Dispatch(TGVFileSplitter *frame)
PyObject * Dispatch(ULong_t param)
PyObject * Dispatch(const char *sel, Int_t sz, Long64_t fst, Long64_t ent)
PyObject * Dispatch(TObject *obj, UInt_t state)
PyObject * Dispatch(char *param)
PyObject * Dispatch(Long64_t total, Long64_t processed, Long64_t bytesread, Float_t initTime, Float_t procTime, Float_t evtrti, Float_t mbrti, Int_t actw, Int_t tses, Float_t eses)
PyObject * Dispatch(TObject *obj, UInt_t button, UInt_t state)
PyObject * Dispatch(TGFrame *frame, Int_t btn, Int_t x, Int_t y)
PyObject * Dispatch(TObject *obj, Bool_t check)
PyObject * Dispatch()
PyObject * Dispatch(TGListTreeItem *entry)
PyObject * Dispatch(Double_t param)
PyObject * Dispatch(Long64_t param)
PyObject * Dispatch(TGLVEntry *entry, Int_t btn)
PyObject * Dispatch(TSlave *slave)
PyObject * Dispatch(TObject *obj)
PyObject * Dispatch(const char *msg, Bool_t status, Int_t done, Int_t total)
PyObject * Dispatch(Event_t *event)
PyObject * Dispatch(TEveTrack *et)
PyObject * Dispatch(TEveDigitSet *qs, Int_t idx)
PyObject * Dispatch(TGListTreeItem *entry, UInt_t mask)
PyObject * Dispatch(TGListTreeItem *entry, Int_t btn, Int_t x, Int_t y)
PyObject * Dispatch(Event_t *event, ULong_t wid)
PyObject * Dispatch(Long64_t total, Long64_t processed)
PyObject * Dispatch(TGFrame *frame, Int_t btn)
PyObject * Dispatch(TEveWindow *window)
PyObject * fCallable
PyObject * Dispatch(TVirtualPad *pad)
PyObject * Dispatch(TSocket *sock)
PyObject * DispatchVA(const char *format=0,...)
The Command design pattern is based on the idea, that all editing in an application is done by creati...
Definition TQCommand.h:27
Class describing a PROOF worker server.
Definition TSlave.h:46
TVirtualPad is an abstract base class for the Pad and Canvas classes.
Definition TVirtualPad.h:51
Double_t y[n]
Definition legend1.C:17
Double_t x[n]
Definition legend1.C:17
Event structure.
Definition GuiTypes.h:174