QValueSpacePublisherPrivate::QValueSpacePublisherPrivate(const QString &_path, QValueSpace::LayerOptions filter) : layer(0), handle(QAbstractValueSpaceLayer::InvalidHandle), hasSet(false), hasWatch(false) { path = qCanonicalPath(_path); if ((filter & QValueSpace::PermanentLayer && filter & QValueSpace::TransientLayer) || (filter & QValueSpace::WritableLayer && filter & QValueSpace::ReadOnlyLayer)) { return; } QList<QAbstractValueSpaceLayer *> layers = QValueSpaceManager::instance()->getLayers(); for (int ii = 0; ii < layers.count(); ++ii) { if (filter == QValueSpace::UnspecifiedLayer || layers.at(ii)->layerOptions() & filter) { QAbstractValueSpaceLayer::Handle h = layers.at(ii)->item(QAbstractValueSpaceLayer::InvalidHandle, path); if (h != QAbstractValueSpaceLayer::InvalidHandle) { layer = layers.at(ii); handle = h; break; } } } }
QValueSpacePublisherPrivate::QValueSpacePublisherPrivate(const QString &_path, QValueSpace::LayerOptions filter) : layer(0), handle(QAbstractValueSpaceLayer::InvalidHandle), hasSet(false), hasWatch(false) { path = qCanonicalPath(_path); #ifdef QT_SIMULATOR originalPath = path; path = qAddSimulatorPrefix(path); #endif // check filter for mutually exclusive options if ((filter & QValueSpace::PermanentLayer && filter & QValueSpace::TransientLayer) || (filter & QValueSpace::WritableLayer && filter & QValueSpace::ReadOnlyLayer)) { return; } QList<QAbstractValueSpaceLayer *> layers = QValueSpaceManager::instance()->getLayers(); for (int ii = 0; ii < layers.count(); ++ii) { if ((layers.at(ii)->layerOptions() & filter) == filter) { QAbstractValueSpaceLayer::Handle h = layers.at(ii)->item(QAbstractValueSpaceLayer::InvalidHandle, path); if (h != QAbstractValueSpaceLayer::InvalidHandle) { layer = layers.at(ii); handle = h; break; } } } }
/*! Removes the value \a name and all sub-attributes from the system. For example: \code QValueSpacePublisher publisher("/Device"); publisher.setValue("State", "Starting"); publisher.setValue("State/Memory", "1000"); publisher.sync(); // QValueSpaceSubscriber("/Device/State").value() == QVariant("Starting") // QValueSpaceSubscriber("/Device/State/Memory").value() == QVariant("1000") publisher.resetValue("State"); publisher.sync(); // QValueSpaceSubscriber("/Device/State").value() == QVariant(); // QValueSpaceSubscriber("/Device/State/Memory").value() == QVariant(); \endcode */ void QValueSpacePublisher::resetValue(const QString &name) { if (!isConnected()) { qWarning("removeAttribute called on unconnected QValueSpacePublisher."); return; } d->layer->removeValue(this, d->handle, qCanonicalPath(name)); }
/*! Sets the value \a name on the publisher to \a data. If name is empty, this call will set the value of this publisher's path. For example: \code QValueSpacePublisher publisher("/Device"); publisher.setValue("State", "Starting"); publisher.sync(); // QValueSpaceSubscriber("/Device/State").value() == QVariant("Starting") \endcode */ void QValueSpacePublisher::setValue(const QString &name, const QVariant &data) { if (!isConnected()) { qWarning("setAttribute called on unconnected QValueSpacePublisher."); return; } d->hasSet = true; d->layer->setValue(this, d->handle, qCanonicalPath(name), data); }
QValueSpacePublisherPrivate::QValueSpacePublisherPrivate(const QString &_path, const QUuid &uuid) : layer(0), handle(QAbstractValueSpaceLayer::InvalidHandle), hasSet(false), hasWatch(false) { path = qCanonicalPath(_path); QList<QAbstractValueSpaceLayer *> layers = QValueSpaceManager::instance()->getLayers(); for (int ii = 0; ii < layers.count(); ++ii) { if (layers.at(ii)->id() == uuid) { layer = layers.at(ii); handle = layer->item(QAbstractValueSpaceLayer::InvalidHandle, path); break; } } }