25 ClassImp(TPyDispatcher);
29 TPyDispatcher::TPyDispatcher( PyObject* callable ) : fCallable( 0 )
33 Py_XINCREF( callable );
40 TPyDispatcher::TPyDispatcher(
const TPyDispatcher& other ) : TObject ( other )
42 Py_XINCREF( other.fCallable );
43 fCallable = other.fCallable;
49 TPyDispatcher& TPyDispatcher::operator=(
const TPyDispatcher& other )
51 if (
this != &other ) {
52 this->TObject::operator=( other );
54 Py_XDECREF( fCallable );
55 Py_XINCREF( other.fCallable );
56 fCallable = other.fCallable;
65 TPyDispatcher::~TPyDispatcher() {
66 Py_XDECREF( fCallable );
71 PyObject* TPyDispatcher::DispatchVA(
const char* format, ... )
80 va_start( va, format );
82 args = Py_VaBuildValue( (
char*)format, va );
91 if ( ! PyTuple_Check( args ) ) {
92 PyObject* t = PyTuple_New( 1 );
93 PyTuple_SET_ITEM( t, 0, args );
99 PyObject* result = PyObject_CallObject( fCallable, args );
112 PyObject* TPyDispatcher::DispatchVA1(
const char* clname,
void* obj,
const char* format, ... )
114 PyObject* pyobj = PyROOT::BindCppObject( obj, Cppyy::GetScope( clname ), kFALSE );
124 va_start( va, format );
126 args = Py_VaBuildValue( (
char*)format, va );
135 if ( ! PyTuple_Check( args ) ) {
136 PyObject* t = PyTuple_New( 2 );
137 PyTuple_SET_ITEM( t, 0, pyobj );
138 PyTuple_SET_ITEM( t, 1, args );
141 PyObject* t = PyTuple_New( PyTuple_GET_SIZE( args ) + 1 );
142 PyTuple_SET_ITEM( t, 0, pyobj );
143 for (
int i = 0; i < PyTuple_GET_SIZE( args ); i++ ) {
144 PyObject* item = PyTuple_GET_ITEM( args, i );
146 PyTuple_SET_ITEM( t, i+1, item );
152 args = PyTuple_New( 1 );
153 PyTuple_SET_ITEM( args, 0, pyobj );
156 PyObject* result = PyObject_CallObject( fCallable, args );
169 PyObject* TPyDispatcher::Dispatch( TPad* selpad, TObject* selected, Int_t event )
171 PyObject* args = PyTuple_New( 3 );
172 PyTuple_SET_ITEM( args, 0, PyROOT::BindCppObject( selpad, Cppyy::GetScope(
"TPad" ) ) );
173 PyTuple_SET_ITEM( args, 1, PyROOT::BindCppObject( selected, Cppyy::GetScope(
"TObject" ) ) );
174 PyTuple_SET_ITEM( args, 2, PyInt_FromLong( event ) );
176 PyObject* result = PyObject_CallObject( fCallable, args );
189 PyObject* TPyDispatcher::Dispatch( Int_t event, Int_t x, Int_t y, TObject* selected )
191 PyObject* args = PyTuple_New( 4 );
192 PyTuple_SET_ITEM( args, 0, PyInt_FromLong( event ) );
193 PyTuple_SET_ITEM( args, 1, PyInt_FromLong( x ) );
194 PyTuple_SET_ITEM( args, 2, PyInt_FromLong( y ) );
195 PyTuple_SET_ITEM( args, 3, PyROOT::BindCppObject( selected, Cppyy::GetScope(
"TObject" ) ) );
197 PyObject* result = PyObject_CallObject( fCallable, args );
210 PyObject* TPyDispatcher::Dispatch( TVirtualPad* pad, TObject* obj, Int_t event )
212 PyObject* args = PyTuple_New( 3 );
213 PyTuple_SET_ITEM( args, 0, PyROOT::BindCppObject( pad, Cppyy::GetScope(
"TVirtualPad" ) ) );
214 PyTuple_SET_ITEM( args, 1, PyROOT::BindCppObject( obj, Cppyy::GetScope(
"TObject" ) ) );
215 PyTuple_SET_ITEM( args, 2, PyInt_FromLong( event ) );
217 PyObject* result = PyObject_CallObject( fCallable, args );
230 PyObject* TPyDispatcher::Dispatch( TGListTreeItem* item, TDNDData* data )
232 PyObject* args = PyTuple_New( 2 );
233 PyTuple_SET_ITEM( args, 0, PyROOT::BindCppObject( item, Cppyy::GetScope(
"TGListTreeItem" ) ) );
234 PyTuple_SET_ITEM( args, 1, PyROOT::BindCppObject( data, Cppyy::GetScope(
"TDNDData" ) ) );
236 PyObject* result = PyObject_CallObject( fCallable, args );
249 PyObject* TPyDispatcher::Dispatch(
const char* name,
const TList* attr )
251 PyObject* args = PyTuple_New( 2 );
252 PyTuple_SET_ITEM( args, 0, PyBytes_FromString( name ) );
253 PyTuple_SET_ITEM( args, 1, PyROOT::BindCppObject( (
void*)attr, Cppyy::GetScope(
"TList" ) ) );
255 PyObject* result = PyObject_CallObject( fCallable, args );
268 PyObject* TPyDispatcher::Dispatch( TSlave* slave, TProofProgressInfo* pi )
270 PyObject* args = PyTuple_New( 2 );
271 PyTuple_SET_ITEM( args, 0, PyROOT::BindCppObject( slave, Cppyy::GetScope(
"TSlave" ) ) );
272 PyTuple_SET_ITEM( args, 1, PyROOT::BindCppObject( pi, Cppyy::GetScope(
"TProofProgressInfo" ) ) );
274 PyObject* result = PyObject_CallObject( fCallable, args );