diff options
Diffstat (limited to 'src/networksettings')
-rw-r--r-- | src/networksettings/qnetworksettingsservicemodel.cpp | 64 | ||||
-rw-r--r-- | src/networksettings/qnetworksettingsservicemodel.h | 8 |
2 files changed, 71 insertions, 1 deletions
diff --git a/src/networksettings/qnetworksettingsservicemodel.cpp b/src/networksettings/qnetworksettingsservicemodel.cpp index 2755eda..ce8ea86 100644 --- a/src/networksettings/qnetworksettingsservicemodel.cpp +++ b/src/networksettings/qnetworksettingsservicemodel.cpp @@ -78,6 +78,7 @@ QVariant QNetworkSettingsServiceModel::data(const QModelIndex & index, int role) void QNetworkSettingsServiceModel::append(QNetworkSettingsService* item) { item->setParent(this); + connectStateChanges(item); beginResetModel(); m_items.append(item); @@ -87,14 +88,24 @@ void QNetworkSettingsServiceModel::append(QNetworkSettingsService* item) void QNetworkSettingsServiceModel::insert(int row, QNetworkSettingsService* item) { item->setParent(this); - + connectStateChanges(item); beginInsertRows(QModelIndex(), row, row); m_items.insert(row, item); endInsertRows(); } +void QNetworkSettingsServiceModel::connectStateChanges(QNetworkSettingsService* item) +{ + connect(item, &QNetworkSettingsService::stateChanged, this, &QNetworkSettingsServiceModel::connectionStatusChanged); + QNetworkSettingsWireless* wireless = item->wirelessConfig(); + if (wireless) + connect(wireless, &QNetworkSettingsWireless::signalStrengthChanged, this, &QNetworkSettingsServiceModel::signalStrengthChanged); +} + void QNetworkSettingsServiceModel::remove(int row) { + QNetworkSettingsService* item = m_items.at(row); + item->deleteLater(); beginRemoveRows(QModelIndex(), row, row); m_items.removeAt(row); endRemoveRows(); @@ -123,6 +134,34 @@ QList<QNetworkSettingsService*> QNetworkSettingsServiceModel::getModel() return m_items; } +void QNetworkSettingsServiceModel::connectionStatusChanged() +{ + QNetworkSettingsService *s = qobject_cast<QNetworkSettingsService*>(sender()); + + int row = 0; + foreach (QNetworkSettingsService* item, m_items) { + if (item == s) { + updated(row); + break; + } + row++; + } + +} + +void QNetworkSettingsServiceModel::signalStrengthChanged() +{ + QNetworkSettingsWireless *s = qobject_cast<QNetworkSettingsWireless*>(sender()); + int row = 0; + foreach (QNetworkSettingsService* item, m_items) { + if (item->wirelessConfig() == s) { + updated(row); + break; + } + row++; + } +} + //Filter model /*! @@ -200,3 +239,26 @@ QVariant QNetworkSettingsServiceFilter::itemFromRow(const int row) const return QVariant::fromValue(QStringLiteral("")); } +/*! + \qmlmethod int NetworkSettingsServiceFilter::activeRow() + + Returns the connected service index in the model. + Returns negative number if no active connection is available. +*/ +int QNetworkSettingsServiceFilter::activeRow() const +{ + QNetworkSettingsServiceModel* model = qobject_cast<QNetworkSettingsServiceModel*>(sourceModel()); + QList<QNetworkSettingsService*> data = model->getModel(); + int row = 0; + foreach (QNetworkSettingsService* item, data) { + if (item->type() == m_type && + (item->state() == QNetworkSettingsState::Ready || + item->state() == QNetworkSettingsState::Online)) { + QModelIndex idx = model->index(row, 0); + QModelIndex mapped = mapFromSource(idx); + return mapped.row(); + } + row++; + } + return -1; +} diff --git a/src/networksettings/qnetworksettingsservicemodel.h b/src/networksettings/qnetworksettingsservicemodel.h index 3770775..ab225bd 100644 --- a/src/networksettings/qnetworksettingsservicemodel.h +++ b/src/networksettings/qnetworksettingsservicemodel.h @@ -58,7 +58,14 @@ public: Connected }; + +private Q_SLOTS: + void connectionStatusChanged(); + void signalStrengthChanged(); + private: + void connectStateChanges(QNetworkSettingsService* item); + QList<QNetworkSettingsService*> m_items; QHash<int, QByteArray> m_roleNames; }; @@ -74,6 +81,7 @@ public: QNetworkSettingsType::Types type() const; void setType(QNetworkSettingsType::Types type); Q_INVOKABLE QVariant itemFromRow(const int row) const; + Q_INVOKABLE int activeRow() const; Q_SIGNALS: void typeChanged(); private: |