summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ivicore/qiviabstractzonedfeature.cpp17
-rw-r--r--src/ivicore/qiviabstractzonedfeature.h5
-rw-r--r--src/ivicore/qivizonedfeatureinterface.cpp14
-rw-r--r--src/ivicore/qivizonedfeatureinterface.h3
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