29 #include <arcs/arcsabstractcomponent.h> 
   30 #include <arcs/arcsqdynamicobject.h> 
   31 #include <arcs/arcsfactory.h> 
   35 #include <QTextStream> 
   36 #include <QMetaObject> 
   39 const QString ARCSAbstractComponent::slotPrefix = 
"1" ;
 
   40 const QString ARCSAbstractComponent::signalPrefix = 
"2" ;
 
   43 ARCSAbstractComponent::ARCSAbstractComponent()
 
   48 ARCSAbstractComponent::~ARCSAbstractComponent()
 
   66      for (
int i = 0; i < lst.count(); i++)
 
   78      if (! file.open(QIODevice::ReadOnly))
 
   81      QTextStream ts(&file);
 
   82      QString contents = ts.readAll();
 
   93      if (!file.open(QIODevice::WriteOnly))
 
   96      QTextStream ts(&file);
 
  108      properties.insert(name, value);
 
  116      if (properties.contains(name))
 
  117           prop = properties[name];
 
  125      properties.remove(name);
 
  137      return properties.keys();
 
  147      QStringList slotNames;
 
  151      if (sources.isEmpty())
 
  158      for (
int i=0; i < sources.size(); i++)
 
  160           realName = slotNames[i].left(slotNames[i].indexOf(
'('));
 
  165                int id = ado->
prepareSlotConnect(slotNames[i], slotNames[i],QString::null, slotNames[i], 
false);
 
  168                args[1] = var->data();
 
  170                ado->
qt_metacall(QMetaObject::InvokeMetaMethod, 
id, args);
 
  171                ado->
cleanSlotConnect(slotNames[i], slotNames[i], QString::null, slotNames[i]);
 
  177                res = res && QMetaObject::invokeMethod(sources[i], qPrintable(realName),
 
  178                                                       Qt::DirectConnection,
 
  179                                                       QGenericArgument((var->typeName()),(var->data())) );
 
  201      ObjectList destinations;
 
  202      QStringList signalNames;
 
  203      QStringList slotNames;
 
  208      if (sources.isEmpty() || destinations.isEmpty() )
 
  213      Qt::ConnectionType contype = queued? Qt::QueuedConnection: Qt::DirectConnection ;
 
  215      for (i = 0; i < sources.size(); i++)
 
  217           for (j = 0; j < destinations.size(); j++)
 
  222                if (dynSrc || dynDst)
 
  233                          const QMetaObject* base = sources[i]->metaObject();
 
  234                          dynSigId = base->indexOfSignal(base->normalizedSignature(qPrintable(signalNames[i])));
 
  243                          const QMetaObject* base = destinations[j]->metaObject();
 
  244                          dynSltId = base->indexOfSlot(base->normalizedSignature(qPrintable(slotNames[j])));
 
  247                     if ( dynSigId == -1 || dynSltId == -1 )
 
  250                     res  = res && QMetaObject::connect(sources[i], dynSigId, destinations[j], dynSltId, contype );
 
  254                res = res && QObject::connect(sources[i], qPrintable(signalPrefix + signalNames[i]),
 
  255                                              destinations[j], qPrintable(slotPrefix + slotNames[j]),
 
  284      ObjectList destinations;
 
  285      QStringList signalNames;
 
  286      QStringList slotNames;
 
  291      if (sources.isEmpty() || destinations.isEmpty() )
 
  297      for (i = 0; i < sources.size(); i++)
 
  299           for (j = 0; j < destinations.size(); j++)
 
  304                if (dynSrc || dynDst)
 
  315                          const QMetaObject* base = sources[i]->metaObject();
 
  316                          dynSigId = base->indexOfSignal(base->normalizedSignature(qPrintable(signalNames[i])));
 
  325                          const QMetaObject* base = destinations[j]->metaObject();
 
  326                          dynSltId = base->indexOfSlot(base->normalizedSignature(qPrintable(slotNames[j])));
 
  329                     if ( dynSigId == -1 || dynSltId == -1 )
 
  332                     res  = res && QMetaObject::disconnect(sources[i], dynSigId, destinations[j], dynSltId );
 
  337                res = res && QObject::disconnect(sources[i], qPrintable(signalPrefix + signalNames[i]),
 
  338                                                 destinations[j], qPrintable(slotPrefix + slotNames[j]));
 
  350     for (
int i=0; i < 
object->methodCount(); i++)
 
  352         QMetaMethod mmo = 
object->method(i);
 
  353         if (mmo.methodType() == type)
 
  354 #
if QT_VERSION >= 0x050000
 
  355             answer << mmo.methodSignature();
 
  357             answer << mmo.signature();
 
void setFamily(QString s)
virtual int qt_metacall(QMetaObject::Call call, int id, void **arguments)=0
Method performing the actual callback task. 
void removeProperty(QString name)
Removes a meta-property from this component. 
bool disconnect(QString sig, ARCSAbstractComponent *dst, QString slt)
This method disconnects two components by the indicated signals and slots. 
virtual QString toString()=0
Defines a basic seralization mechanism. 
virtual void getProxySignal(QString signal, ObjectList &obj, QStringList &proxySignal)=0
Creates a proxy signal to interface a component to native ARCS components. 
bool init(QString slt, QVariant *var)
Initializes a component. 
virtual bool genuineDisconnect(QString, ARCSAbstractComponent *, QString)
This method disconnects two components by the indicated signals and slots. 
virtual void getProxySlot(QString slot, ObjectList &obj, QStringList &proxySlot)=0
Creates a proxy slot to interface a component to native ARCS components. 
virtual int prepareSignalConnect(QString sigName, QString sltName, QString objectName, QString actualSlot, bool simulate=false)=0
Prepares a connection with a slot which does not belong to this object. 
ARCSAbstractComponent * clone()
Kage bunshin no jutsu ! 
static ARCSFactory * getInstance()
Returns the instance of the singleton ARCSFactory. 
QVariant getProperty(QString name)
Gets a meta-property from this component. 
Class handling the generic description of a component. 
virtual bool loadFile(QString fn)
Defines a way to load a component description from a file. 
QStringList getMethodList(const QMetaObject *object, QMetaMethod::MethodType type)
Helper method for components. 
ARCSAbstractComponent * createComponent(QString componentType)
Creates a component given its class name. 
virtual bool saveFile(QString fn)
Defines a way to save a component description inside a file. 
Interface to extend QObject functionnalities in order to make objects with dynamic signals or slots...
void setProperty(QString name, QVariant value)
Sets a meta-property on this component. 
virtual int cleanSignalConnect(QString signame, QString sltName, QString objectName, QString actualSlot)=0
virtual bool genuineConnect(QString, ARCSAbstractComponent *, QString, bool=false)
This method connects two components by the indicated signals and slots. 
QStringList getProperties()
bool isInstanciated()
Determines wether the component is instanciated or not. 
virtual bool parseString(QString s)=0
Defines a basic seralization mechanism. 
void resetProperties()
Sets the property list to a blank list. 
virtual int cleanSlotConnect(QString sigName, QString sltName, QString objectName, QString actualSignal)=0
virtual bool connect(QString sig, ARCSAbstractComponent *dst, QString slt, bool queued=false)
This method connects two components by the indicated signals and slots. 
virtual int prepareSlotConnect(QString sigName, QString sltName, QString objectName, QString actualSignal, bool simulate=false)=0
Prepares a connection with a slot which is belonging to this object.