diff options
-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; |