summaryrefslogtreecommitdiffstats
path: root/src/networksettings
diff options
context:
space:
mode:
authorTeemu Holappa <teemu.holappa@qt.io>2016-10-12 10:17:34 +0300
committerTeemu Holappa <teemu.holappa@qt.io>2016-11-04 11:26:54 +0000
commite6475dfe5a4209ad6142c2400dec6b9fc4ef5f07 (patch)
treee54a446420c01aa62dcd647854aa9402f7f687de /src/networksettings
parent52aa422d12aad5603891d8296e3a41ca2cb63fc9 (diff)
Fix Wifi utils connection view
Fixed the access point selection combobox to show the connected service properly. Fixed layout problems when Virtual Keyboard is active. Change-Id: Id1b05c4e12655eb93df91a78b979ad8fcf3361f5 Reviewed-by: Samuli Piippo <samuli.piippo@qt.io>
Diffstat (limited to 'src/networksettings')
-rw-r--r--src/networksettings/qnetworksettingsservicemodel.cpp64
-rw-r--r--src/networksettings/qnetworksettingsservicemodel.h8
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: