bool QtBoostIntegrationBindingObject::bind(QObject *sender, const char *signal, QObject *receiver, QtBoostAbstractConnectionAdapter *adapter, #ifdef QTBOOSTINTEGRATION_CHECK_SIGNATURE int nrArguments, int argumentList[], #endif Qt::ConnectionType connType) { if (!sender || !signal || !adapter) return false; int signalIndex = sender->metaObject()->indexOfSignal(&signal[1]); if (signalIndex < 0) { qWarning("qtlambda::connect(): no match for signal '%s'", signal); return false; } Q_ASSERT_X(!receiver || receiver->thread() == thread(), "qtlambda::connect", "The receiving QObject must be on the thread connect() is called in"); #ifdef QTBOOSTINTEGRATION_CHECK_SIGNATURE QByteArray signalSignature = sender->metaObject()->normalizedSignature(signal); QByteArray adapterSignature = buildAdapterSignature(nrArguments, argumentList); if (!QMetaObject::checkConnectArgs(signalSignature, adapterSignature)) return false; #endif // locate a free slot int slotIndex = m_freeList.isEmpty() ? m_bindings.size() : m_freeList.takeLast(); // wire up the connection from the binding object to the sender bool connected = QMetaObject::connect(sender, signalIndex, this, slotIndex + bindingOffset(), connType); if (!connected) return false; // store the binding if (slotIndex == m_bindings.size()) m_bindings.append(Binding(sender, signalIndex, receiver, adapter)); else m_bindings[slotIndex] = Binding(sender, signalIndex, receiver, adapter); auto sender_d = getObjectData(sender, true); auto receiver_d = (receiver && receiver != sender) ? getObjectData(receiver, true) : 0; Q_ASSERT(sender_d); BindingList::add(sender_d->receivers, slotIndex); if (receiver_d) { BindingList::add(receiver_d->senders, slotIndex); // make the sender and the receiver aware of each other receiver_d->senders->other = sender_d->receivers; sender_d->receivers->other = receiver_d->senders; } static_cast<ConnectNotifyObject *>(sender)->callConnectNotify(signal); return true; }
ObjectData *Variant::getArrayAccess() const { assert(is(KindOfObject)); ObjectData *obj = getObjectData(); assert(obj); if (!obj->instanceof(SystemLib::s_ArrayAccessClass)) { throw InvalidOperandException("not ArrayAccess objects"); } return obj; }
vector<double> objectFileReader::getOrbitParamsDot(QString object, bool *ok) { vector<double> vec; QJsonObject obj; vec.push_back(0.0f); obj = getObjectData(object,ok); qDebug()<< obj.keys(); return vec; }
bool QtBoostIntegrationBindingObject::unbind(QObject *sender, const char *signal, QObject *receiver) { bool found = false; if (sender) { int signalIndex = -1; if (signal) { signalIndex = sender->metaObject()->indexOfSignal(&signal[1]); if (signalIndex < 0) return false; } auto sender_d = getObjectData(sender); unbindHelper(sender_d->receivers, [=, &found](const Binding &b, int i) { if ((b.signalIndex == signalIndex || signalIndex == -1) && (b.receiver == receiver || !receiver)) { found = true; QMetaObject::disconnectOne(b.sender, b.signalIndex, this, i + bindingOffset()); callDisconnectNotify(b); return true; } else { return false; } }); } else { Q_ASSERT(receiver); auto receiver_d = getObjectData(receiver); if (receiver_d->senders) found = true; unbindHelper(receiver_d->senders, [=](const Binding &b, int i) { QMetaObject::disconnectOne(b.sender, b.signalIndex, this, i + bindingOffset()); callDisconnectNotify(b); return true; }); } return found; }