summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/networksettings/qnetworksettingsinterfacemodel.cpp42
-rw-r--r--src/networksettings/qnetworksettingsinterfacemodel.h8
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;