diff options
-rw-r--r-- | src/ivicore/qiviabstractzonedfeature.cpp | 17 | ||||
-rw-r--r-- | src/ivicore/qiviabstractzonedfeature.h | 5 | ||||
-rw-r--r-- | src/ivicore/qivizonedfeatureinterface.cpp | 14 | ||||
-rw-r--r-- | src/ivicore/qivizonedfeatureinterface.h | 3 |
4 files changed, 27 insertions, 12 deletions
diff --git a/src/ivicore/qiviabstractzonedfeature.cpp b/src/ivicore/qiviabstractzonedfeature.cpp index 5d7c0c4..911893e 100644 --- a/src/ivicore/qiviabstractzonedfeature.cpp +++ b/src/ivicore/qiviabstractzonedfeature.cpp @@ -111,8 +111,12 @@ void QIviAbstractZonedFeature::connectToServiceObject(QIviServiceObject *service else if (serviceObject) backend = qobject_cast<QIviZonedFeatureInterface*>(serviceObject->interfaceInstance(interfaceName())); - if (backend) - initializeZones(); + connect(backend, &QIviZonedFeatureInterface::availableZonesChanged, this, &QIviAbstractZonedFeature::initializeZones); + + if (backend) { + QStringList zones = backend->availableZones(); + initializeZones(zones); + } QIviAbstractFeature::connectToServiceObject(serviceObject); } @@ -213,13 +217,12 @@ void QIviAbstractZonedFeature::setZone(const QString &zone) emit zoneChanged(); } -void QIviAbstractZonedFeature::initializeZones() +void QIviAbstractZonedFeature::initializeZones(const QStringList &zones) { if (!backend() || !zone().isEmpty()) return; Q_D(QIviAbstractZonedFeature); - const auto zones = backend()->availableZones(); for (const QString &zone : zones) { QIviAbstractZonedFeature *f = zoneAt(zone); if (!f) { @@ -251,10 +254,8 @@ void QIviAbstractZonedFeature::initializeZones() */ QStringList QIviAbstractZonedFeature::availableZones() const { - if (backend()) { - return backend()->availableZones(); - } - return QStringList(); + Q_D(const QIviAbstractZonedFeature); + return d->m_zoneFeatureMap.keys(); } diff --git a/src/ivicore/qiviabstractzonedfeature.h b/src/ivicore/qiviabstractzonedfeature.h index 7e24d44..3c7b168 100644 --- a/src/ivicore/qiviabstractzonedfeature.h +++ b/src/ivicore/qiviabstractzonedfeature.h @@ -74,7 +74,7 @@ public: QList<QIviAbstractZonedFeature*> zones() const; Q_SIGNALS: - void availableZonesChanged(QStringList zones); + void availableZonesChanged(const QStringList &zones); void zoneChanged(); void zonesChanged(); @@ -90,10 +90,9 @@ protected: private Q_SLOTS: void setZone(const QString &zone); + void initializeZones(const QStringList &zones); private: - void initializeZones(); - QVariantList attributeList() const; QVariantMap attributeMap() const; QVariantMap zoneFeatureMap() const; diff --git a/src/ivicore/qivizonedfeatureinterface.cpp b/src/ivicore/qivizonedfeatureinterface.cpp index 944f3a3..435e9d2 100644 --- a/src/ivicore/qivizonedfeatureinterface.cpp +++ b/src/ivicore/qivizonedfeatureinterface.cpp @@ -178,7 +178,19 @@ QIviZonedFeatureInterface::QIviZonedFeatureInterface(QObject *parent) The returned names must be valid QML property names, i.e. \c {[a-z_][A-Za-z0-9_]*}. - \sa {Providing Available Zones} + \sa availableZonesChanged() {Providing Available Zones} +*/ + +/*! + \fn void QIviZonedFeatureInterface::availableZonesChanged(const QStringList &zones) + \since 5.13 + + Emitted when the available zones changed. + + Use this signal when the list of available zones first need to be retrieved and are not available + when the backend instance is created. + + \sa availableZones() {Providing Available Zones} */ QT_END_NAMESPACE diff --git a/src/ivicore/qivizonedfeatureinterface.h b/src/ivicore/qivizonedfeatureinterface.h index 0fbca0a..244dc9e 100644 --- a/src/ivicore/qivizonedfeatureinterface.h +++ b/src/ivicore/qivizonedfeatureinterface.h @@ -56,6 +56,9 @@ public: explicit QIviZonedFeatureInterface(QObject *parent = nullptr); virtual QStringList availableZones() const = 0; + +Q_SIGNALS: + void availableZonesChanged(const QStringList &zones); }; QT_END_NAMESPACE |