summaryrefslogtreecommitdiffstats
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
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>
-rw-r--r--src/networksettings/qnetworksettingsservicemodel.cpp64
-rw-r--r--src/networksettings/qnetworksettingsservicemodel.h8
-rw-r--r--src/settingsui/network/ComboBoxEntry.qml4
-rw-r--r--src/settingsui/network/NetworkSettings.qml6
-rw-r--r--src/settingsui/network/WifiSettings.qml334
5 files changed, 255 insertions, 161 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:
diff --git a/src/settingsui/network/ComboBoxEntry.qml b/src/settingsui/network/ComboBoxEntry.qml
index 71b997c..91655ed 100644
--- a/src/settingsui/network/ComboBoxEntry.qml
+++ b/src/settingsui/network/ComboBoxEntry.qml
@@ -42,6 +42,8 @@ RowLayout {
property alias model: cb.model
property alias count: cb.count
property int titleWidth: -1
+ signal activated(var index)
+ signal highlighted(var index)
Label {
id: label
@@ -53,5 +55,7 @@ RowLayout {
id: cb
textRole: "text"
Layout.fillWidth: true
+ onActivated: root.activated(index)
+ onHighlightedIndexChanged: root.highlighted(index)
}
}
diff --git a/src/settingsui/network/NetworkSettings.qml b/src/settingsui/network/NetworkSettings.qml
index 52ab1af..9385ee1 100644
--- a/src/settingsui/network/NetworkSettings.qml
+++ b/src/settingsui/network/NetworkSettings.qml
@@ -33,13 +33,15 @@ import QtDeviceUtilities.NetworkSettings 1.0
Item {
property string title: qsTr("Network Settings")
+
GroupBox {
id: networkSelect
anchors.rightMargin: parent.width * 0.618
+ anchors.left: parent.left
anchors.leftMargin: 20
+ anchors.top: parent.top
anchors.topMargin: 20
- anchors.bottomMargin: 20
- anchors.fill: parent
+
title: qsTr("Select Connection")
function stateToStr(serviceState) {
diff --git a/src/settingsui/network/WifiSettings.qml b/src/settingsui/network/WifiSettings.qml
index 7a0735c..f7cf823 100644
--- a/src/settingsui/network/WifiSettings.qml
+++ b/src/settingsui/network/WifiSettings.qml
@@ -37,201 +37,219 @@ Item {
Component.onCompleted: NetworkSettingsManager.services.type = NetworkSettingsType.Wifi;
property bool connecting: false
- GroupBox {
- id: content
- title: qsTr("Wireless Settings")
+ Flickable {
anchors.fill: parent
+ contentHeight: content.height
+ contentWidth: width
- ColumnLayout {
- spacing: 20
+ GroupBox {
+ title: qsTr("Wireless Settings")
width: parent.width
- RowLayout {
- spacing: 10
- id: enableSwitch
+ ColumnLayout {
+ id: content
+ spacing: 20
width: parent.width
- Label {
- Layout.preferredWidth: root.width * 0.382
- Layout.alignment: Qt.AlignVCenter
- horizontalAlignment: Text.AlignRight
- text: selectedInterface.powered ? qsTr("Wi-Fi ON") : qsTr("Wi-Fi OFF")
- }
- Switch {
- checked: selectedInterface.powered
- onCheckedChanged: {
- selectedInterface.powered = checked
- root.connecting = false
- connectView.visible = false
- }
- }
- }
- RowLayout {
- spacing: 10
- width: parent.width
-
- visible: selectedInterface.powered && networkSelection.count > 0
- Label {
- Layout.preferredWidth: root.width * 0.382
- text: qsTr("Current network")
- horizontalAlignment: Text.AlignRight
- Layout.alignment: Qt.AlignVCenter
-
- }
- ComboBoxEntry {
- id: networkSelection
- model: NetworkSettingsManager.services
-
- textRole: "name"
- Layout.fillWidth: true
- onCurrentIndexChanged: {
- if (currentIndex >= 0) {
- connectView.visible = false
+ RowLayout {
+ spacing: 10
+ id: enableSwitch
+ width: parent.width
- var service = model.itemFromRow(currentIndex)
- if (service) {
- root.connecting = true
- service.connectService();
- }
- }
+ Label {
+ Layout.preferredWidth: root.width * 0.382
+ Layout.alignment: Qt.AlignVCenter
+ horizontalAlignment: Text.AlignRight
+ text: selectedInterface.powered ? qsTr("Wi-Fi ON") : qsTr("Wi-Fi OFF")
}
-
- onCountChanged: {
- if (count === 0) {
+ Switch {
+ checked: selectedInterface.powered
+ onCheckedChanged: {
+ selectedInterface.powered = checked
root.connecting = false
connectView.visible = false
}
}
+ }
+ RowLayout {
+ spacing: 10
+ width: parent.width
+
+ visible: selectedInterface.powered && networkSelection.count > 0
+ Label {
+ Layout.preferredWidth: root.width * 0.382
+ text: qsTr("Current network")
+ horizontalAlignment: Text.AlignRight
+ Layout.alignment: Qt.AlignVCenter
- delegate: WifiSelectorDelegate {
- width: networkSelection.width
- onConnectChanged: if (connect) networkSelection.currentIndex = index
}
- }
- }
+ ComboBoxEntry {
+ id: networkSelection
+ model: NetworkSettingsManager.services
- Row {
- id: infoRow
- spacing: 10
- width: parent.width
- visible: selectedInterface.powered && selectedInterface.state !== NetworkSettingsState.Online && (networkSelection.count == 0 || root.connecting)
- Label {
- id: scanningText
- text: root.connecting ? qsTr("Connecting to the network...") : qsTr("Searching for Wi-Fi networks...")
- horizontalAlignment: Text.AlignLeft
- }
- WifiSignalMonitor {
- id: scanningIcon
- scanning: true
- height: scanningText.height
- width: height
- }
- }
+ textRole: "name"
+ Layout.fillWidth: true
+ onActivated: {
+ if (index >= 0) {
+ connectView.visible = false
- GroupBox {
- id: connectView
- title: qsTr("Enter a password")
- visible: false
- Layout.fillWidth: true
- ColumnLayout {
- width: parent.width
+ var service = model.itemFromRow(index)
+ if (service) {
+ root.connecting = true
+ service.connectService();
+ }
+ }
+ }
- RowLayout {
- id: errorView
- visible: text.text !== ""
- spacing: 10
- property alias text: text.text
+ onCountChanged: {
+ if (count === 0) {
+ root.connecting = false
+ connectView.visible = false
+ }
+ }
- Image {
- source: "../icons/Alert_yellow_1x.png"
- Layout.alignment: Qt.AlignVCenter
+ Component.onCompleted: {
+ networkSelection.currentIndex = model.activeRow()
}
- Text {
- id: text
- color: "#face20"
- text: ""
- Layout.alignment: Qt.AlignVCenter
+
+ delegate: WifiSelectorDelegate {
+ width: networkSelection.width
+ onConnectChanged: if (connect) networkSelection.currentIndex = index
}
}
- RowLayout {
- spacing: 10
- visible: false
- width: parent.width
+ }
- Label {
- text: qsTr("User name:")
- horizontalAlignment: Text.AlignRight
- Layout.preferredWidth: root.width * 0.382
- Layout.alignment: Qt.AlignVCenter
- }
- TextField {
- text: ""
- inputMethodHints: Qt.ImhNoPredictiveText
- Layout.alignment: Qt.AlignVCenter
- Layout.fillWidth: true
+ Row {
+ id: infoRow
+ spacing: 10
+ width: parent.width
+ visible: selectedInterface.powered && selectedInterface.state !== NetworkSettingsState.Online
+ Label {
+ id: scanningText
+ text: {
+ if (networkSelection.count == 0)
+ return qsTr("Searching for Wi-Fi networks...")
+ else if (root.connecting)
+ return qsTr("Connecting to the network...")
+ else
+ return ""
}
+ horizontalAlignment: Text.AlignLeft
+ }
+ WifiSignalMonitor {
+ id: scanningIcon
+ scanning: true
+ visible: scanningText.text !== ""
+ height: scanningText.height
+ width: height
}
- RowLayout {
- spacing: 10
+ }
+
+ GroupBox {
+ id: connectView
+ title: qsTr("Enter a password")
+ visible: false
+ Layout.fillWidth: true
+ ColumnLayout {
width: parent.width
- Label {
- text: qsTr("Password:")
- horizontalAlignment: Text.AlignRight
- Layout.preferredWidth: root.width * 0.382
- Layout.alignment: Qt.AlignVCenter
+ RowLayout {
+ id: errorView
+ visible: text.text !== ""
+ spacing: 10
+ property alias text: text.text
+
+ Image {
+ source: "../icons/Alert_yellow_1x.png"
+ Layout.alignment: Qt.AlignVCenter
+ }
+ Text {
+ id: text
+ color: "#face20"
+ text: ""
+ Layout.alignment: Qt.AlignVCenter
+ }
}
- TextField {
- id: password
- text: ""
- echoMode: TextInput.Password
- inputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhNoAutoUppercase | Qt.ImhPreferLowercase | Qt.ImhSensitiveData
- Layout.alignment: Qt.AlignVCenter
- Layout.fillWidth: true
+ RowLayout {
+ spacing: 10
+ visible: false
+ width: parent.width
+
+ Label {
+ text: qsTr("User name:")
+ horizontalAlignment: Text.AlignRight
+ Layout.preferredWidth: root.width * 0.382
+ Layout.alignment: Qt.AlignVCenter
+ }
+ TextField {
+ text: ""
+ inputMethodHints: Qt.ImhNoPredictiveText
+ Layout.alignment: Qt.AlignVCenter
+ Layout.fillWidth: true
+ }
}
- }
- RowLayout {
- spacing: 10
+ RowLayout {
+ spacing: 10
+ width: parent.width
- Button {
- text: qsTr("Connect")
- onClicked: {
- connectView.visible = false
- NetworkSettingsManager.userAgent.setUserCredentials("", password.text)
+ Label {
+ text: qsTr("Password:")
+ horizontalAlignment: Text.AlignRight
+ Layout.preferredWidth: root.width * 0.382
+ Layout.alignment: Qt.AlignVCenter
+ }
+ TextField {
+ id: password
+ text: ""
+ echoMode: TextInput.Password
+ inputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhNoAutoUppercase | Qt.ImhPreferLowercase | Qt.ImhSensitiveData
+ Layout.alignment: Qt.AlignVCenter
+ Layout.fillWidth: true
}
}
- Button {
- text: qsTr("Cancel")
- onClicked: {
- networkSelection.currentIndex = -1
- connectView.visible = false
+ RowLayout {
+ spacing: 10
+
+ Button {
+ text: qsTr("Connect")
+ onClicked: {
+ connectView.visible = false
+ NetworkSettingsManager.userAgent.setUserCredentials("", password.text)
+ }
+ }
+ Button {
+ text: qsTr("Cancel")
+ onClicked: {
+ networkSelection.currentIndex = -1
+ connectView.visible = false
+ }
}
}
}
}
- }
- Button {
- id: disconnect
- text: qsTr("Disconnect")
- visible: selectedInterface.state === NetworkSettingsState.Online ||
- selectedInterface.state === NetworkSettingsState.Ready
- onClicked: {
- console.log("disconnect");
- NetworkSettingsManager.services.itemFromRow(networkSelection.selectedIndex).disconnectService();
- networkSelection.selectedIndex = -1;
+ Button {
+ id: disconnect
+ text: qsTr("Disconnect")
+ visible: selectedInterface.state === NetworkSettingsState.Online ||
+ selectedInterface.state === NetworkSettingsState.Ready
+ onClicked: {
+ NetworkSettingsManager.services.itemFromRow(networkSelection.currentIndex).disconnectService();
+ networkSelection.currentIndex = -1;
+ root.connecting = false
+ }
}
}
- }
- Connections {
- target: NetworkSettingsManager.userAgent
- onShowUserCredentialsInput : {
- connectView.visible = true
- root.connecting = false
- }
- onError: {
- errorView.visible = true
- connectView.visible = true
- root.connecting = false
+ Connections {
+ target: NetworkSettingsManager.userAgent
+ onShowUserCredentialsInput : {
+ connectView.visible = true
+ root.connecting = false
+ }
+ onError: {
+ errorView.visible = true
+ connectView.visible = true
+ root.connecting = false
+ }
}
}
}