diff options
author | Pasi Petäjäjärvi <pasi.petajajarvi@qt.io> | 2018-08-30 14:38:26 +0300 |
---|---|---|
committer | Pasi Petäjäjärvi <pasi.petajajarvi@qt.io> | 2018-09-04 07:07:47 +0000 |
commit | cb54408ea54c9ef77b5b271f3c4cc49a749ea712 (patch) | |
tree | eba4060e29a81444af35df32e61702c5c50cedd4 /src | |
parent | 65b663a9be5d27cbb77b48f9e392c9463416383a (diff) |
Fix updating QDBusAbstractInterface.interfaces model on property change
Currently properties are not updated when they are changing on the real
interface.
Change-Id: I960497bc6366ff5219e0536118f959ff07c33d12
Reviewed-by: Teemu Holappa <teemu.holappa@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/networksettings/qnetworksettingsinterfacemodel.cpp | 42 | ||||
-rw-r--r-- | src/networksettings/qnetworksettingsinterfacemodel.h | 8 |
2 files changed, 50 insertions, 0 deletions
diff --git a/src/networksettings/qnetworksettingsinterfacemodel.cpp b/src/networksettings/qnetworksettingsinterfacemodel.cpp index 72ea805..baff929 100644 --- a/src/networksettings/qnetworksettingsinterfacemodel.cpp +++ b/src/networksettings/qnetworksettingsinterfacemodel.cpp @@ -84,6 +84,7 @@ QVariant QNetworkSettingsInterfaceModel::data(const QModelIndex & index, int rol void QNetworkSettingsInterfaceModel::append(QNetworkSettingsInterface* item) { item->setParent(this); + connectStateChanges(item); beginInsertRows(QModelIndex(), rowCount(), rowCount()); m_items.append(item); @@ -93,12 +94,19 @@ void QNetworkSettingsInterfaceModel::append(QNetworkSettingsInterface* item) void QNetworkSettingsInterfaceModel::insert(int row, QNetworkSettingsInterface* item) { item->setParent(this); + connectStateChanges(item); beginInsertRows(QModelIndex(), row, row); m_items.insert(row, item); endInsertRows(); } +void QNetworkSettingsInterfaceModel::connectStateChanges(QNetworkSettingsInterface* item) +{ + connect(item, &QNetworkSettingsInterface::stateChanged, this, &QNetworkSettingsInterfaceModel::connectionStatusChanged); + connect(item, &QNetworkSettingsInterface::poweredChanged, this, &QNetworkSettingsInterfaceModel::poweredChanged); +} + void QNetworkSettingsInterfaceModel::remove(int row) { beginRemoveRows(QModelIndex(), row, row); @@ -106,9 +114,43 @@ void QNetworkSettingsInterfaceModel::remove(int row) endRemoveRows(); } +void QNetworkSettingsInterfaceModel::updated(int row) +{ + dataChanged(createIndex(row, 0), createIndex(row, 0)); +} + QList<QNetworkSettingsInterface*> QNetworkSettingsInterfaceModel::getModel() { return m_items; } +void QNetworkSettingsInterfaceModel::connectionStatusChanged() +{ + QNetworkSettingsInterface *s = qobject_cast<QNetworkSettingsInterface*>(sender()); + + int row = 0; + foreach (QNetworkSettingsInterface* item, m_items) { + if (item == s) { + updated(row); + break; + } + row++; + } + +} + +void QNetworkSettingsInterfaceModel::poweredChanged() +{ + QNetworkSettingsInterface *s = qobject_cast<QNetworkSettingsInterface*>(sender()); + int row = 0; + foreach (QNetworkSettingsInterface* item, m_items) { + if (item == s) { + updated(row); + break; + } + row++; + } +} + + QT_END_NAMESPACE diff --git a/src/networksettings/qnetworksettingsinterfacemodel.h b/src/networksettings/qnetworksettingsinterfacemodel.h index 4ecebc7..82acc91 100644 --- a/src/networksettings/qnetworksettingsinterfacemodel.h +++ b/src/networksettings/qnetworksettingsinterfacemodel.h @@ -59,6 +59,14 @@ public: Powered }; + void updated(int row); +private Q_SLOTS: + void connectionStatusChanged(); + void poweredChanged(); + +private: + void connectStateChanges(QNetworkSettingsInterface* item); + private: QList<QNetworkSettingsInterface*> m_items; QHash<int, QByteArray> m_roleNames; |