74#include "RConfigure.h" 
  110      static TPMERegexp *constRe = 0, *wspaceRe = 0;
 
  112         constRe  = 
new TPMERegexp(
"(?<=\\(|\\s|,|&|\\*)const(?=\\s|,|\\)|&|\\*)", 
"go");
 
  113         wspaceRe = 
new TPMERegexp(
"\\s+(?=([^\"]*\"[^\"]*\")*[^\"]*$)", 
"go");
 
  116      wspaceRe->Substitute(res, 
"");
 
  131      if (arg[pri] == 
'*' || arg[pri] == 
'&') {
 
  142      if (!arg.
AtEnd()) res += 
",";
 
  153TMethod *GetMethodWithPrototype(
TClass *cl, 
const char *method,
 
  161   if (
m) nargs = 
m->GetNargs();
 
  182                                 TClass *sender_class, 
const char *signal,
 
  183                                 TClass *receiver_class, 
const char *slot)
 
  185   char *signal_method = 
new char[strlen(signal)+1];
 
  186   if (signal_method) strcpy(signal_method, signal);
 
  191   if ((signal_proto = strchr(signal_method,
'('))) {
 
  193      *signal_proto++ = 
'\0';
 
  195      if ((tmp = strrchr(signal_proto,
')'))) *tmp = 
'\0';
 
  198   if (!signal_proto) signal_proto = (
char*)
""; 
 
  204         ::Error(
"TQObject::CheckConnectArgs", 
"for signal/slot consistency\n" 
  205                 "checking need to specify class name as argument to " 
  207         delete [] signal_method;
 
  213   TMethod *signalMethod = GetMethodWithPrototype(sender_class,
 
  218      ::Error(
"TQObject::CheckConnectArgs",  
"signal %s::%s(%s) does not exist",
 
  219              sender_class->
GetName(), signal_method, signal_proto);
 
  220      delete [] signal_method;
 
  223   Int_t nsigargs = nargs;
 
  225#if defined(CHECK_COMMENT_STRING) 
  226   const char *comment = 0;
 
  227   if (signalMethod != (
TMethod *) -1)   
 
  230   if (!comment || !comment[0] || strstr(comment,
"*SIGNAL")){
 
  231      ::Error(
"TQObject::CheckConnectArgs",
 
  232              "signal %s::%s(%s), to declare signal use comment //*SIGNAL*",
 
  233      sender_class->
GetName(), signal_method, signal_proto);
 
  234      delete [] signal_method;
 
  240   delete [] signal_method;
 
  242   char *slot_method = 
new char[strlen(slot)+1];
 
  243   if (slot_method) strcpy(slot_method, slot);
 
  246   char *slot_params = 0;
 
  248   if ((slot_proto = strchr(slot_method,
'('))) {
 
  251      *slot_proto++ = 
'\0';
 
  254      if ((tmp = strrchr(slot_proto,
')'))) *tmp = 
'\0';
 
  257   if (!slot_proto) slot_proto = (
char*)
"";     
 
  258   if ((slot_params = strchr(slot_proto,
'='))) *slot_params = 
' ';
 
  261   if (!receiver_class) {
 
  263      slotMethod = 
gROOT->GetGlobalFunction(slot_method,0,
kFALSE);
 
  265      slotMethod  = !slot_params ?
 
  266                          GetMethodWithPrototype(receiver_class,
 
  271                                    slot_method, slot_params);
 
  276         ::Error(
"TQObject::CheckConnectArgs", 
"slot %s(%s) does not exist",
 
  277                 receiver_class ? 
Form(
"%s::%s", receiver_class->
GetName(),
 
  278                 slot_method) : slot_method, slot_proto);
 
  280         ::Error(
"TQObject::CheckConnectArgs", 
"slot %s(%s) does not exist",
 
  281                 receiver_class ? 
Form(
"%s::%s", receiver_class->
GetName(),
 
  282                 slot_method) : slot_method, slot_params);
 
  284      delete [] slot_method;
 
  288#if defined(CHECK_ARGS_NUMBER) 
  291      ::Error(
"TQObject::CheckConnectArgs",
 
  292              "inconsistency in numbers of arguments");
 
  293      delete [] slot_method;
 
  299   delete [] slot_method;
 
  309class TQConnectionList : 
public TList {
 
  316      { fName = 
name; fSignalArgs = nsigargs; }
 
  317   virtual ~TQConnectionList();
 
  319   Bool_t Disconnect(
void *receiver=0, 
const char *slot_name=0);
 
  320   Int_t  GetNargs()
 const { 
return fSignalArgs; }
 
  327TQConnectionList::~TQConnectionList()
 
  335      if (connection->
IsEmpty()) 
delete connection;
 
  344Bool_t TQConnectionList::Disconnect(
void *receiver, 
const char *slot_name)
 
  357      if (!slot_name || !slot_name[0]
 
  358                     || !strcmp(
name,slot_name)) {
 
  360         if (!receiver || (receiver == obj)) {
 
  361            return_value = 
kTRUE;
 
  362            savlnk = lnk->
Next();   
 
  378void TQConnectionList::ls(
Option_t *option)
 const 
  380   std::cout <<  
"TQConnectionList:" << 
"\t" << 
GetName() << std::endl;
 
  420      while ((connection = (
TQConnection*)next_connection())) {
 
  421         TIter next_list(connection);
 
  422         TQConnectionList *list;
 
  423         while ((list = (TQConnectionList*)next_list())) {
 
  424            list->Remove(connection);
 
  439   qcl = 
dynamic_cast<TQClass*
>(IsA());
 
  462      while ((base = (
TBaseClass*) next_base_class()))
 
  479   TQConnectionList *clist = (TQConnectionList*)
 
  491      clist->AddFirst(con);
 
  505   TQConnectionList *clist = (TQConnectionList*)
 
  577   if ((nsigargs = 
CheckConnectArgs(sender, sender->IsA(), signal_name, cl, slot_name)) == -1)
 
  583   TQConnectionList *clist = (TQConnectionList*)
 
  587      clist = 
new TQConnectionList(signal_name, nsigargs);
 
  595      if (!strcmp(slot_name,connection->
GetName()) &&
 
  603   if (!clist->FindObject(connection)) {
 
  604      clist->Add(connection);
 
  635   if ((nsigargs = 
CheckConnectArgs(0, sender, signal_name, cl, slot_name)) == -1)
 
  641   TQConnectionList *clist = (TQConnectionList*) slist->
FindObject(signal_name);
 
  644      clist = 
new TQConnectionList(signal_name, nsigargs);
 
  652      if (!strcmp(slot_name,connection->
GetName()) &&
 
  660   if (!clist->FindObject(connection)) {
 
  661      clist->Add(connection);
 
  663      ((
TQClass*)sender)->Connected(signal_name);
 
  709      if (rcv_cl) 
return ConnectToClass(sender, signal, rcv_cl, receiver, slot);
 
  725   if ((nsigargs = 
CheckConnectArgs(sender, sender->IsA(), signal_name, 0, slot_name)) == -1)
 
  730   TQConnectionList *clist = (TQConnectionList*)
 
  734      clist = 
new TQConnectionList(signal_name, nsigargs);
 
  742      if (!strcmp(slot_name,connection->
GetName()) &&
 
  750   if (!clist->FindObject(connection)) {
 
  751      clist->Add(connection);
 
  801      if (rcv_cl) 
return ConnectToClass(class_name, signal, rcv_cl, receiver,
 
  821   if ((nsigargs = 
CheckConnectArgs(0, sender, signal_name, 0, slot_name)) == -1)
 
  828   TQConnectionList *clist = (TQConnectionList*)
 
  832      clist = 
new TQConnectionList(signal_name, nsigargs);
 
  840      if (!strcmp(slot_name,connection->
GetName()) &&
 
  848   if (!clist->FindObject(connection)) {
 
  849      clist->Add(connection);
 
  851      ((
TQClass*)sender)->Connected(signal_name);
 
  868                         const char *receiver_class,
 
  881   if ((nsigargs = 
CheckConnectArgs(
this, IsA(), signal_name, cl, slot_name)) == -1)
 
  886   TQConnectionList *clist = (TQConnectionList*)
 
  890      clist = 
new TQConnectionList(signal_name, nsigargs);
 
  898      if (!strcmp(slot_name,connection->
GetName()) &&
 
  903      connection = 
new TQConnection(receiver_class, receiver, slot_name);
 
  906   if (!clist->FindObject(connection)) {
 
  907      clist->Add(connection);
 
  971   TQConnectionList *slist = 0;
 
  974   while ((slist = (TQConnectionList*)next_signal()))   {
 
  975      if (!signal || signal_name.
IsNull()) { 
 
  976         next_return = slist->Disconnect(receiver,slot_name);
 
  977         return_value = return_value || next_return;
 
  979         if (slist->IsEmpty()) {
 
  983      } 
else if (signal && !strcmp(signal_name,slist->GetName())) {
 
  984         next_return = slist->Disconnect(receiver,slot_name);
 
  985         return_value = return_value || next_return;
 
  987         if (slist->IsEmpty()) {
 
 1018   return Disconnect(qcl, signal, receiver, slot);
 
 1029   return Disconnect(
this, signal, receiver, slot);
 
 1035void TQObject::Streamer(
TBuffer &R__b)
 
 1069   TString str = 
"ProcessLine(=";
 
void Error(const char *location, const char *msgfmt,...)
 
Bool_t ConnectCINT(TQObject *sender, const char *signal, const char *slot)
Global function which simplifies making connection in interpreted ROOT session.
 
char * Form(const char *fmt,...)
 
#define R__LOCKGUARD2(mutex)
 
Each class (see TClass) has a linked list of its base class(es).
 
TClass * GetClassPointer(Bool_t load=kTRUE)
Get pointer to the base class TClass.
 
Buffer base class used for serializing objects.
 
TClass instances represent classes, structs and namespaces in the ROOT type system.
 
TMethod * GetMethod(const char *method, const char *params, Bool_t objectIsConst=kFALSE)
Find the best method (if there is one) matching the parameters.
 
TMethod * GetMethodWithPrototype(const char *method, const char *proto, Bool_t objectIsConst=kFALSE, ROOT::EFunctionMatchMode mode=ROOT::kConversionMatch)
Find the method with a given prototype.
 
TList * GetListOfBases()
Return list containing the TBaseClass(es) of a class.
 
Bool_t InheritsFrom(const char *cl) const
Return kTRUE if this class inherits from a class with name "classname".
 
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
 
virtual void ls(Option_t *option="") const
List (ls) all objects in this collection.
 
virtual Bool_t IsEmpty() const
 
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
 
Basic data type descriptor (datatype information is obtained from CINT).
 
const char * GetFullTypeName() const
Get full type description of typedef, e,g.: "class TDirectory*".
 
Global functions class (global functions are obtained from CINT).
 
Int_t GetNargsOpt() const
Number of function optional (default) arguments.
 
Int_t GetNargs() const
Number of function arguments.
 
THashList implements a hybrid collection class consisting of a hash table and a list to store TObject...
 
virtual void Add(TObject *obj)
 
virtual TObject * Remove(TObject *obj)
Remove object from the list.
 
virtual void AddFirst(TObject *obj)
Add object at the beginning of the list.
 
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
 
virtual void Delete(Option_t *option="")
Remove all objects from the list AND delete all heap based objects.
 
virtual void AddLast(TObject *obj)
Add object at the end of the list.
 
Each ROOT class (see TClass) has a linked list of methods.
 
virtual const char * GetCommentString()
Returns a comment string from the class declaration.
 
virtual const char * GetName() const
Returns name of object.
 
Wrapper around a TObject so it can be stored in a TList.
 
TObject * GetObject() const
 
Wrapper for PCRE library (Perl Compatible Regular Expressions).
 
Int_t Substitute(TString &s, const TString &r, Bool_t doDollarSubst=kTRUE)
Substitute matching part of s with r, dollar back-ref substitution is performed if doDollarSubst is t...
 
TQConnection class is an internal class, used in the object communication mechanism.
 
void * GetReceiver() const
 
const char * GetName() const override
Returns name of connection (aka name of slot)
 
This is the ROOT implementation of the Qt object communication mechanism (see also http://www....
 
static Int_t CheckConnectArgs(TQObject *sender, TClass *sender_class, const char *signal, TClass *receiver_class, const char *slot)
Checking of consitency of sender/receiver methods/arguments.
 
virtual Int_t NumberOfConnections() const
Return number of connections for this object.
 
TQObject()
TQObject Constructor.
 
void CollectClassSignalLists(TList &list, TClass *cls)
Collect class signal lists from class cls and all its base-classes.
 
virtual const char * GetSenderClassName() const
 
static Bool_t BlockAllSignals(Bool_t b)
Block or unblock all signals. Returns the previous block status.
 
TList * GetListOfSignals() const
 
Bool_t fSignalsBlocked
list of connections to this object
 
static TString CompressName(const char *method_name)
Removes "const" words and blanks from full (with prototype) method name and resolve any typedefs in t...
 
TList * GetListOfClassSignals() const
Returns pointer to list of signals of this class.
 
static Bool_t fgAllSignalsBlocked
flag used for suppression of signals
 
virtual Int_t NumberOfSignals() const
Return number of signals for this object.
 
virtual ~TQObject()
TQObject Destructor.
 
TList * fListOfConnections
list of signals from this object
 
Bool_t Connect(const char *signal, const char *receiver_class, void *receiver, const char *slot)
Non-static method is used to connect from the signal of this object to the receiver slot.
 
Bool_t Disconnect(const char *signal=0, void *receiver=0, const char *slot=0)
Disconnects signal of this object from slot of receiver.
 
virtual Bool_t HasConnection(const char *signal_name) const
Return true if there is any object connected to this signal.
 
static Bool_t ConnectToClass(TQObject *sender, const char *signal, TClass *receiver_class, void *receiver, const char *slot)
Create connection between sender and receiver.
 
static Bool_t AreAllSignalsBlocked()
Returns true if all signals are blocked.
 
virtual void LowPriority(const char *signal_name, const char *slot_name=0)
 
virtual void Connected(const char *)
 
virtual void HighPriority(const char *signal_name, const char *slot_name=0)
 
Provides iteration through tokens of a given string.
 
Bool_t NextToken()
Get the next token, it is stored in this TString.
 
const char * Data() const
 
TString & Remove(Ssiz_t pos)
 
This class implements a mutex interface.
 
std::string GetName(const std::string &scope_name)
 
TCppMethod_t GetMethod(TCppScope_t scope, TCppIndex_t imeth)
 
void Print(std::ostream &os, const OptionType &opt)