Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-11-06 10:17:39

0001 // Author: Enric Tejedor CERN  07/2020
0002 // Original PyROOT code by Wim Lavrijsen, LBL
0003 
0004 /*************************************************************************
0005  * Copyright (C) 1995-2020, Rene Brun and Fons Rademakers.               *
0006  * All rights reserved.                                                  *
0007  *                                                                       *
0008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
0009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
0010  *************************************************************************/
0011 
0012 #ifndef ROOT_TPyDispatcher
0013 #define ROOT_TPyDispatcher
0014 
0015 // ROOT
0016 #include "TObject.h"
0017 
0018 class TDNDData;
0019 class TEveDigitSet;
0020 class TEveElement;
0021 class TEveTrack;
0022 class TEveWindow;
0023 class TGFrame;
0024 class TGListTreeItem;
0025 class TGMdiFrame;
0026 class TGLPhysicalShape;
0027 class TGShutterItem;
0028 class TGLVEntry;
0029 class TGLViewerBase;
0030 class TGVFileSplitter;
0031 class TList;
0032 class TObject;
0033 class TPad;
0034 class TProofProgressInfo;
0035 class TQCommand;
0036 class TSlave;
0037 class TSocket;
0038 class TVirtualPad;
0039 
0040 struct Event_t;
0041 
0042 // Python
0043 struct _object;
0044 typedef _object PyObject;
0045 
0046 /// Dispatcher for C++ callbacks into Python code.
0047 class TPyDispatcher : public TObject {
0048 public:
0049    TPyDispatcher(PyObject *callable);
0050    TPyDispatcher(const TPyDispatcher &);
0051    TPyDispatcher &operator=(const TPyDispatcher &);
0052    ~TPyDispatcher() override;
0053 
0054 public:
0055    PyObject *DispatchVA(const char *format = 0, ...);
0056    PyObject *DispatchVA1(const char *clname, void *obj, const char *format, ...);
0057 
0058    // pre-defined dispatches, same as per TQObject::Emit(); note that
0059    // Emit() maps exclusively to this set, so several builtin types (e.g.
0060    // Int_t, Bool_t, Float_t, etc.) have been omitted here
0061    PyObject *Dispatch() { return DispatchVA(0); }
0062    PyObject *Dispatch(const char *param) { return DispatchVA("s", param); }
0063    PyObject *Dispatch(Double_t param) { return DispatchVA("d", param); }
0064    PyObject *Dispatch(Long_t param) { return DispatchVA("l", param); }
0065    PyObject *Dispatch(Long64_t param) { return DispatchVA("L", param); }
0066 
0067    // further selection of pre-defined, existing dispatches
0068    PyObject *Dispatch(Bool_t param) { return DispatchVA("i", param); }
0069    PyObject *Dispatch(char *param) { return DispatchVA("s", param); }
0070    PyObject *Dispatch(const char *text, Int_t len) { return DispatchVA("si", text, len); }
0071    PyObject *Dispatch(Int_t param) { return DispatchVA("i", param); }
0072    PyObject *Dispatch(Int_t x, Int_t y) { return DispatchVA("ii", x, y); }
0073    PyObject *Dispatch(ULong_t param) { return DispatchVA("k", param); }
0074    // ULong_t also for Handle_t (and Window_t, etc. ... )
0075 
0076    PyObject *Dispatch(Event_t *event) { return DispatchVA1("Event_t", event, 0); }
0077    PyObject *Dispatch(Event_t *event, ULong_t wid) { return DispatchVA1("Event_t", event, "k", wid); }
0078    PyObject *Dispatch(TEveDigitSet *qs, Int_t idx) { return DispatchVA1("TEveDigitSet", qs, "i", idx); }
0079    PyObject *Dispatch(TEveElement *el) { return DispatchVA1("TEveElement", el, 0); }
0080    PyObject *Dispatch(TEveTrack *et) { return DispatchVA1("TEveTrack", et, 0); }
0081    PyObject *Dispatch(TEveWindow *window) { return DispatchVA1("TEveWindow", window, 0); }
0082    PyObject *Dispatch(TGFrame *frame) { return DispatchVA1("TGFrame", frame, 0); }
0083    PyObject *Dispatch(TGFrame *frame, Int_t btn) { return DispatchVA1("TGFrame", frame, "i", btn); }
0084    PyObject *Dispatch(TGFrame *frame, Int_t btn, Int_t x, Int_t y)
0085    {
0086       return DispatchVA1("TGFrame", frame, "iii", btn, x, y);
0087    }
0088    PyObject *Dispatch(TGFrame *frame, UInt_t keysym, UInt_t mask)
0089    {
0090       return DispatchVA1("TGFrame", frame, "II", keysym, mask);
0091    }
0092    PyObject *Dispatch(TGListTreeItem *entry) { return DispatchVA1("TGListTreeItem", entry, 0); }
0093    PyObject *Dispatch(TGListTreeItem *entry, UInt_t mask) { return DispatchVA1("TGListTreeItem", entry, "I", mask); }
0094    PyObject *Dispatch(TGListTreeItem *entry, UInt_t keysym, UInt_t mask)
0095    {
0096       return DispatchVA1("TGListTreeItem", entry, "II", keysym, mask);
0097    }
0098    PyObject *Dispatch(TGListTreeItem *entry, Int_t btn) { return DispatchVA1("TGListTreeItem", entry, "i", btn); }
0099    PyObject *Dispatch(TGListTreeItem *entry, Int_t btn, Int_t x, Int_t y)
0100    {
0101       return DispatchVA1("TGListTreeItem", entry, "iii", btn, x, y);
0102    }
0103    PyObject *Dispatch(TGLVEntry *entry, Int_t btn) { return DispatchVA1("TGLVEntry", entry, "i", btn); }
0104    PyObject *Dispatch(TGLVEntry *entry, Int_t btn, Int_t x, Int_t y)
0105    {
0106       return DispatchVA1("TGLVEntry", entry, "iii", btn, x, y);
0107    }
0108    PyObject *Dispatch(TGLViewerBase *viewer) { return DispatchVA1("TGLViewerBase", viewer, 0); }
0109    PyObject *Dispatch(TGLPhysicalShape *shape) { return DispatchVA1("TGLPhysicalShape", shape, 0); }
0110    PyObject *Dispatch(TGLPhysicalShape *shape, UInt_t u1, UInt_t u2)
0111    {
0112       return DispatchVA1("TGLPhysicalShape", shape, "II", u1, u2);
0113    }
0114    PyObject *Dispatch(TGMdiFrame *frame) { return DispatchVA1("TGMdiFrame", frame, 0); }
0115    PyObject *Dispatch(TGShutterItem *item) { return DispatchVA1("TGShutterItem", item, 0); }
0116    PyObject *Dispatch(TGVFileSplitter *frame) { return DispatchVA1("TGVFileSplitter", frame, 0); }
0117    PyObject *Dispatch(TList *objs) { return DispatchVA1("TList", objs, 0); }
0118    PyObject *Dispatch(TObject *obj) { return DispatchVA1("TObject", obj, 0); }
0119    PyObject *Dispatch(TObject *obj, Bool_t check) { return DispatchVA1("TObject", obj, "i", check); }
0120    PyObject *Dispatch(TObject *obj, UInt_t state) { return DispatchVA1("TObject", obj, "I", state); }
0121    PyObject *Dispatch(TObject *obj, UInt_t button, UInt_t state)
0122    {
0123       return DispatchVA1("TObject", obj, "II", button, state);
0124    }
0125    PyObject *Dispatch(TSocket *sock) { return DispatchVA1("TSocket", sock, 0); }
0126    PyObject *Dispatch(TVirtualPad *pad) { return DispatchVA1("TVirtualPad", pad, 0); }
0127 
0128    PyObject *Dispatch(TPad *selpad, TObject *selected, Int_t event);
0129    PyObject *Dispatch(Int_t event, Int_t x, Int_t y, TObject *selected);
0130    PyObject *Dispatch(TVirtualPad *pad, TObject *obj, Int_t event);
0131    PyObject *Dispatch(TGListTreeItem *item, TDNDData *data);
0132    PyObject *Dispatch(const char *name, const TList *attr);
0133 
0134    // for PROOF
0135    PyObject *Dispatch(const char *msg, Bool_t all) { return DispatchVA("si", msg, all); }
0136    PyObject *Dispatch(Long64_t total, Long64_t processed) { return DispatchVA("LL", total, processed); }
0137    PyObject *Dispatch(Long64_t total, Long64_t processed, Long64_t bytesread, Float_t initTime, Float_t procTime,
0138                       Float_t evtrti, Float_t mbrti)
0139    {
0140       return DispatchVA("LLLffff", total, processed, bytesread, initTime, procTime, evtrti, mbrti);
0141    }
0142    PyObject *Dispatch(Long64_t total, Long64_t processed, Long64_t bytesread, Float_t initTime, Float_t procTime,
0143                       Float_t evtrti, Float_t mbrti, Int_t actw, Int_t tses, Float_t eses)
0144    {
0145       return DispatchVA("LLLffffiif", total, processed, bytesread, initTime, procTime, evtrti, mbrti, actw, tses, eses);
0146    }
0147    PyObject *Dispatch(const char *sel, Int_t sz, Long64_t fst, Long64_t ent)
0148    {
0149       return DispatchVA("siLL", sel, sz, fst, ent);
0150    }
0151    PyObject *Dispatch(const char *msg, Bool_t status, Int_t done, Int_t total)
0152    {
0153       return DispatchVA("siii", msg, status, done, total);
0154    }
0155 
0156    PyObject *Dispatch(TSlave *slave, Long64_t total, Long64_t processed)
0157    {
0158       return DispatchVA1("TSlave", slave, "LL", total, processed);
0159    }
0160    PyObject *Dispatch(TProofProgressInfo *pi) { return DispatchVA1("TProofProgressInfo", pi, 0); }
0161    PyObject *Dispatch(TSlave *slave) { return DispatchVA("TSlave", slave, 0); }
0162    PyObject *Dispatch(TSlave *slave, TProofProgressInfo *pi);
0163 
0164 private:
0165    PyObject *fCallable; //! callable object to be dispatched
0166 };
0167 
0168 #endif