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.