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)