summaryrefslogtreecommitdiffstats
path: root/src/qtdevicesettings/networksettingsplugin/imports
diff options
context:
space:
mode:
authorTeemu Holappa <teemu.holappa@theqtcompany.com>2015-11-09 16:39:08 +0200
committerTeemu Holappa <teemu.holappa@theqtcompany.com>2016-01-22 14:04:19 +0000
commitccbfa0884072c26979a6475de71635c19a474cca (patch)
tree288fe756bef423237931023973a91ca469643e11 /src/qtdevicesettings/networksettingsplugin/imports
parent887c8bffd05a3784d83e8280f8c725eead4c7a5c (diff)
Device settings UI.
Implemented settings application for changing device settings. There are implemented settings UI for network, time and date, locale, bluetooth, audio and display. Change-Id: I26077ce1f2356eb8520fad61cf07407c6a0f98c1 Reviewed-by: Kimmo Ollila <kimmo.ollila@theqtcompany.com> Reviewed-by: Risto Avila <risto.avila@theqtcompany.com>
Diffstat (limited to 'src/qtdevicesettings/networksettingsplugin/imports')
-rw-r--r--src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/EditWiredSettings.qml640
-rw-r--r--src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/IpAddressTextField.qml43
-rw-r--r--src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/NetworkDetails.qml42
-rw-r--r--src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/NetworkSettings.qml135
-rw-r--r--src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/WifiSettings.qml94
-rw-r--r--src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/WiredSettings.qml205
6 files changed, 1159 insertions, 0 deletions
diff --git a/src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/EditWiredSettings.qml b/src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/EditWiredSettings.qml
new file mode 100644
index 0000000..a09bdf8
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/EditWiredSettings.qml
@@ -0,0 +1,640 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt Device Utilities module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+import QtQuick 2.5
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 1.4
+import QtQuick.Controls.Styles.Flat 1.0 as Flat
+import com.theqtcompany.settings.common 1.0
+import com.theqtcompany.settings.network 1.0
+
+Item {
+ id: root
+ property string title: qsTr("Ethernet Settings")
+ property var service: undefined
+
+ property bool ipv4Changed: false
+ property bool ipv6Changed: false
+ property bool nameserversChanged: false
+ property bool domainsChanged: false
+ property bool proxyChanged: false
+
+ Component.onDestruction: {
+ //Clear all unsaved changes from models
+ service.proxy.excludes.resetChanges();
+ service.nameservers.resetChanges();
+ service.domains.resetChanges();
+ }
+
+ Component.onCompleted: titlebar.title = service.name;
+
+ Flickable {
+ anchors.fill: parent
+ anchors.top: saveButton.bottom
+ anchors.margins: Math.round(40 * Flat.FlatStyle.scaleFactor)
+ anchors.bottomMargin: Math.round(20 * Flat.FlatStyle.scaleFactor)
+ contentHeight: content.height
+ contentWidth: width
+ interactive: !ipv4Method.popupVisible && !ipv6Method.popupVisible && !proxyMethodSel.popupVisible
+ Column {
+ id: content
+ width: parent.width
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ property int titleWidth: Math.round(width * 0.382)
+ property int groupWidth: Math.round(width - saveButton.width - 10 * Flat.FlatStyle.scaleFactor)
+
+ //IPv4 Config
+ GroupBox {
+ flat: false
+ width: content.groupWidth
+ Layout.fillWidth: true
+ title: qsTr("IPv4")
+
+ ColumnLayout {
+ anchors.fill: parent
+
+ ListModel {
+ id: methodsModel
+
+ ListElement {
+ text: "DHCP"
+ method: IPv4Config.Dhcp
+ }
+ ListElement {
+ text: "Manual"
+ method: IPv4Config.Manual
+ }
+ ListElement {
+ text: "Off"
+ method: IPv4Config.Off
+ }
+ }
+
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ TextLabel {
+ text: qsTr("Connection method")
+ width: content.titleWidth
+ horizontalAlignment: Text.AlignRight
+ }
+
+ CustomCombobox {
+ id: ipv4Method
+ model: methodsModel
+ Component.onCompleted: selectedIndex = service.ipv4.method
+
+ onSelectedIndexChanged : {
+ ipv4Changed = true;
+ service.ipv4.method = model.get(selectedIndex).method;
+ }
+ delegate: FlatStyledDropdownDelegate { }
+ }
+ }
+
+ Column {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ visible: service.ipv4.method === IPv4Config.Dhcp
+
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ TextLabel {
+ text: qsTr("Address")
+ width: content.titleWidth
+ horizontalAlignment: Text.AlignRight
+ }
+ TextLabel {
+ text: service.ipv4.address
+ }
+ }
+
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ TextLabel {
+ text: qsTr("Mask")
+ width: content.titleWidth
+ horizontalAlignment: Text.AlignRight
+ }
+ TextLabel {
+ text: service.ipv4.mask
+ }
+ }
+
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ TextLabel {
+ text: qsTr("Router")
+ width: content.titleWidth
+ horizontalAlignment: Text.AlignRight
+ }
+ TextLabel {
+ text: service.ipv4.gateway
+ }
+ }
+ }
+
+ Column {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ visible: service.ipv4.method === IPv4Config.Manual
+
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ TextLabel {
+ text: qsTr("Address")
+ width: content.titleWidth
+ horizontalAlignment: Text.AlignRight
+ }
+ IpAddressTextField {
+ id: ipv4Address
+ text: service.ipv4.address
+ onTextChanged: ipv4Changed = true;
+
+ onAccepted: if (text.length > 0) service.ipv4.address = text
+ }
+ }
+
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ TextLabel {
+ text: qsTr("Mask")
+ width: content.titleWidth
+ horizontalAlignment: Text.AlignRight
+ }
+ IpAddressTextField {
+ id: ipv4Mask
+ text: service.ipv4.mask
+ onTextChanged: ipv4Changed = true;
+ onAccepted: if (text.length > 0) service.ipv4.mask = text
+ }
+ }
+
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ TextLabel {
+ text: qsTr("Router")
+ width: content.titleWidth
+ horizontalAlignment: Text.AlignRight
+ }
+ IpAddressTextField {
+ id: ipv4Gateway
+ text: service.ipv4.gateway
+
+ onTextChanged: ipv4Changed = true
+
+ onAccepted: if (text.length > 0) service.ipv4.gateway = text
+ }
+ }
+ }
+ }
+ }
+
+ //IPv6 Config
+ GroupBox {
+ flat: false
+ width: content.groupWidth
+ Layout.fillWidth: true
+ title: qsTr("IPv6")
+
+ ColumnLayout {
+ anchors.fill: parent
+
+ ListModel {
+ id: ipv6methodsmodel
+
+ ListElement {
+ text: qsTr("Auto")
+ method: IPv6Config.Auto
+ }
+ ListElement {
+ text: qsTr("Manual")
+ method: IPv6Config.Manual
+ }
+ ListElement {
+ text: qsTr("Off")
+ method: IPv6Config.Off
+ }
+ }
+
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ TextLabel {
+ text: qsTr("Connection method: ")
+ width: content.titleWidth
+ horizontalAlignment: Text.AlignRight
+ }
+
+ CustomCombobox {
+ id: ipv6Method
+ model: ipv6methodsmodel
+ Component.onCompleted: selectedIndex = service.ipv6.method
+ onSelectedIndexChanged : {
+ ipv6Changed = true;
+ service.ipv6.method = model.get(selectedIndex).method;
+ }
+ delegate: FlatStyledDropdownDelegate { }
+ }
+ }
+
+ Column {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ visible: service.ipv6.method === IPv6Config.Auto
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ TextLabel {
+ text: qsTr("Address")
+ width: content.titleWidth
+ horizontalAlignment: Text.AlignRight
+ }
+ TextLabel {
+ text: service.ipv6.address
+ }
+ }
+
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ TextLabel {
+ text: qsTr("Router")
+ width: content.titleWidth
+ horizontalAlignment: Text.AlignRight
+ }
+ TextLabel {
+ text: service.ipv6.gateway
+ }
+ }
+
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ TextLabel {
+ text: qsTr("Prefix length")
+ width: content.titleWidth
+ horizontalAlignment: Text.AlignRight
+ }
+ TextLabel {
+ text: service.ipv6.prefixLength
+ }
+ }
+ }
+
+ Column {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ visible: service.ipv6.method === IPv6Config.Manual
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ TextLabel {
+ text: qsTr("Address")
+ width: content.titleWidth
+ horizontalAlignment: Text.AlignRight
+ }
+ TextField {
+ id: ipv6Address
+ text: service.ipv6.address
+ onTextChanged: ipv6Changed = true;
+ onAccepted: if (text.length > 0) service.ipv6.address = text
+ }
+ }
+
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ TextLabel {
+ text: qsTr("Router")
+ width: content.titleWidth
+ horizontalAlignment: Text.AlignRight
+ }
+ TextField {
+ id: ipv6Gateway
+ text: service.ipv6.gateway
+ onTextChanged: ipv6Changed = true;
+ onAccepted: if (text.length > 0) service.ipv4.gateway = text
+ }
+ }
+
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ TextLabel {
+ text: qsTr("Prefix length")
+ width: content.titleWidth
+ horizontalAlignment: Text.AlignRight
+ }
+ TextField {
+ id: ipv6PrefixLength
+ text: service.ipv6.prefixLength
+ validator: IntValidator { bottom: 0; top: 255 }
+
+ onTextChanged: ipv6Changed = true
+
+ onAccepted: if (text.length > 0) service.ipv6.prefixLength = parseInt(text)
+ }
+ }
+ }
+ }
+ }
+
+ GroupBox {
+ flat: false
+ width: content.groupWidth
+ Layout.fillWidth: true
+ title: qsTr("Name servers")
+
+ ColumnLayout {
+ anchors.fill: parent
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ TextLabel {
+ text: qsTr("Address")
+ width: content.titleWidth
+ horizontalAlignment: Text.AlignRight
+ }
+ Column {
+ Repeater {
+ model: service.nameservers
+
+ Row {
+ TextField {
+ text: edit
+ onTextChanged: {
+ nameserversChanged = true;
+ edit = text;
+ }
+ }
+ Button {
+ implicitWidth: height
+ text: "-"
+ onClicked: {
+ service.nameservers.remove(index);
+ nameserversChanged = true;
+ }
+ }
+ Button {
+ implicitWidth: height
+ visible: index==service.nameservers.count-1
+ text: "+"
+ onClicked: service.nameservers.append("")
+ }
+ }
+ }
+ }
+ Row {
+ TextField {
+ id: nameServerEntryItem
+ visible: service.nameservers.count === 0
+ text: ""
+ onAccepted: service.nameservers.append(text)
+ }
+ Button {
+ implicitWidth: height
+ visible: nameServerEntryItem.visible
+ text: "+"
+ onClicked: nameServerEntryItem.accepted()
+ }
+ }
+ }
+ }
+ }
+
+ GroupBox {
+ flat: false
+ width: content.groupWidth
+ Layout.fillWidth: true
+ title: qsTr("Domains")
+
+ ColumnLayout {
+ anchors.fill: parent
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ TextLabel {
+ text: qsTr("Address")
+ width: content.titleWidth
+ horizontalAlignment: Text.AlignRight
+ }
+ Column {
+ Repeater {
+ model: service.domains
+ Row {
+ TextField {
+ text: edit
+ onTextChanged: {
+ root.domainsChanged = true;
+ edit = text;
+ }
+ }
+ Button {
+ implicitWidth: height
+ text: "-"
+ onClicked: {
+ service.domains.remove(index);
+ domainsChanged.domainsChanged = true;
+ }
+ }
+ Button {
+ implicitWidth: height
+ visible: index==service.domains.count-1
+ text: "+"
+ onClicked: service.domains.append("")
+ }
+ }
+ }
+ }
+ Row {
+ TextField {
+ id: domainsEntryItem
+ visible: service.domains.count === 0
+ text: ""
+ onAccepted: service.domains.append(text)
+ }
+ Button {
+ implicitWidth: height
+ visible: domainsEntryItem.visible
+ text: "+"
+ onClicked: domainsEntryItem.accepted()
+ }
+ }
+ }
+ }
+ }
+
+ GroupBox {
+ flat: false
+ width: content.groupWidth
+ Layout.fillWidth: true
+ title: qsTr("Proxy Settings")
+
+ ColumnLayout {
+ anchors.fill: parent
+
+ ListModel {
+ id: proxyMethodModel
+
+ ListElement {
+ text: qsTr("Direct")
+ method: ProxyConfig.Direct
+ }
+ ListElement {
+ text: qsTr("Auto")
+ method: ProxyConfig.Auto
+ }
+ ListElement {
+ text: qsTr("Manual")
+ method: ProxyConfig.Manual
+ }
+ }
+
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ TextLabel {
+ text: qsTr("Configuration")
+ width: content.titleWidth
+ horizontalAlignment: Text.AlignRight
+ }
+
+ CustomCombobox {
+ id: proxyMethodSel
+ model: proxyMethodModel
+ Component.onCompleted: selectedIndex = service.proxy.method
+ onSelectedIndexChanged : {
+ proxyChanged = true;
+ service.proxy.method = model.get(selectedIndex).method;
+ }
+ delegate: FlatStyledDropdownDelegate { }
+ }
+ }
+
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ visible: service.proxy.method !== ProxyConfig.Direct
+ TextLabel {
+ text: service.proxy.method === ProxyConfig.Manual ? qsTr("Proxy address") : qsTr("Automatic configuration URL")
+ width: content.titleWidth
+ horizontalAlignment: Text.AlignRight
+ }
+ TextField {
+ id: proxyUrl
+ text: service.proxy.url
+ onTextChanged: proxyChanged = true;
+ onAccepted: service.proxy.url = text;
+ }
+ }
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ visible: service.proxy.method === ProxyConfig.Manual
+
+ TextLabel {
+ text: qsTr("No proxy for")
+ width: content.titleWidth
+ horizontalAlignment: Text.AlignRight
+ }
+
+ Column {
+ Repeater {
+ model: service.proxy.excludes
+
+ Row {
+ TextField {
+ text: edit
+ onTextChanged: edit = text
+ }
+ Button {
+ implicitWidth: height
+ text: "-"
+ onClicked: {
+ service.proxy.excludes.remove(index);
+ proxyChanged = true;
+ }
+ }
+ Button {
+ implicitWidth: height
+ visible: index==service.proxy.excludes.count-1
+ text: "+"
+ onClicked: service.proxy.excludes.append("")
+ }
+ }
+ }
+ }
+ Row {
+ TextField {
+ id: proxyEntryItem
+ visible: service.proxy.excludes.count === 0
+ text: ""
+ onAccepted: service.proxy.excludes.append(text)
+ }
+ Button {
+ implicitWidth: height
+ visible: proxyEntryItem.visible
+ text: "+"
+ onClicked: proxyEntryItem.accepted()
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ Button {
+ id: saveButton
+ anchors.right: parent.right
+ anchors.top: parent.top
+ anchors.margins: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ anchors.rightMargin: Math.round(40 * Flat.FlatStyle.scaleFactor)
+ text: qsTr("Save")
+
+ onClicked: {
+ if (ipv4Changed) {
+ ipv4Address.accepted();
+ ipv4Mask.accepted();
+ ipv4Gateway.accepted();
+ service.setupIpv4Config();
+ }
+
+ if (ipv6Changed) {
+ ipv6Address.accepted();
+ ipv6Gateway.accepted();
+ ipv6PrefixLength.accepted();
+ service.setupIpv6Config();
+ }
+
+ if (nameserversChanged) {
+ service.setupNameserversConfig();
+ }
+
+ if (domainsChanged) {
+ service.setupDomainsConfig();
+ }
+ if (proxyChanged) {
+ proxyUrl.accepted();
+ service.setupProxyConfig();
+ }
+ stackView.pop();
+ }
+ }
+}
diff --git a/src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/IpAddressTextField.qml b/src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/IpAddressTextField.qml
new file mode 100644
index 0000000..102d458
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/IpAddressTextField.qml
@@ -0,0 +1,43 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt Device Utilities module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+import QtQuick 2.5
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 1.4
+
+TextField {
+ Layout.fillWidth: true
+ validator: RegExpValidator { regExp: /^(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))$/ }
+}
diff --git a/src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/NetworkDetails.qml b/src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/NetworkDetails.qml
new file mode 100644
index 0000000..1540e03
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/NetworkDetails.qml
@@ -0,0 +1,42 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt Device Utilities module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+import QtQuick 2.5
+
+Loader {
+ id: root
+ property var service: undefined
+ anchors.fill: parent
+}
diff --git a/src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/NetworkSettings.qml b/src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/NetworkSettings.qml
new file mode 100644
index 0000000..daf3d1d
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/NetworkSettings.qml
@@ -0,0 +1,135 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt Device Utilities module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+import QtQuick 2.5
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 1.4
+import QtQuick.Controls.Styles.Flat 1.0 as Flat
+import com.theqtcompany.settings.common 1.0
+import com.theqtcompany.settings.network 1.0
+
+Item {
+ property string title: qsTr("Network Settings")
+ GroupBox {
+ id: networkSelect
+ anchors.fill: parent
+ anchors.rightMargin: parent.width * 0.618
+ anchors.leftMargin: Math.round(20 * Flat.FlatStyle.scaleFactor)
+ anchors.topMargin: Math.round(20 * Flat.FlatStyle.scaleFactor)
+ title: qsTr("Select Connection")
+
+ function stateToStr(serviceState) {
+ switch (serviceState) {
+ case NetworkService.Idle:
+ return qsTr("Idle");
+ case NetworkService.Failure:
+ return qsTr("Failure");
+ case NetworkService.Association:
+ return qsTr("Association");
+ case NetworkService.Configuration:
+ return qsTr("Configuration");
+ case NetworkService.Ready:
+ return qsTr("Ready");
+ case NetworkService.Disconnect:
+ return qsTr("Disconnect");
+ case NetworkService.Online:
+ return qsTr("Online");
+ default:
+ return qsTr("Undefined");
+ }
+ }
+
+ ColumnLayout {
+ width: networkSelect.width
+ ExclusiveGroup {
+ id: exgroup
+ }
+
+ Repeater {
+ model: NetworkSettingsManager.networks
+
+ Button {
+ implicitWidth: networkSelect.width - Math.round(20 * Flat.FlatStyle.scaleFactor)
+ implicitHeight: Math.round(54 * Flat.FlatStyle.scaleFactor)
+ checkable: true
+ exclusiveGroup: exgroup
+
+ Row {
+ anchors.fill: parent
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+
+ Image {
+ id: typeId
+ height: parent.height
+ width: height
+ }
+
+ Column {
+ height: Math.round(parent.height * 0.7)
+ spacing: 0
+ anchors.verticalCenter: parent.verticalCenter
+ TextLabel {
+ text: name
+ }
+
+ TextLabel {
+ text: networkSelect.stateToStr(status)
+ font.pixelSize: Math.round(12 * Flat.FlatStyle.scaleFactor)
+ }
+ }
+ }
+
+ onCheckedChanged: {
+ if (checked) {
+ networkDetails.service = NetworkSettingsManager.getService(name, type);
+ if (type === NetworkType.Wired) {
+ networkDetails.source = "WiredSettings.qml";
+ }
+ else if (type === NetworkType.Wifi) {
+ networkDetails.source = "WifiSettings.qml";
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ NetworkDetails {
+ id: networkDetails
+ anchors.fill: parent
+ anchors.leftMargin: networkSelect.width + Math.round(20 * Flat.FlatStyle.scaleFactor)
+ }
+}
diff --git a/src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/WifiSettings.qml b/src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/WifiSettings.qml
new file mode 100644
index 0000000..3221e88
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/WifiSettings.qml
@@ -0,0 +1,94 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt Device Utilities module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+import QtQuick 2.5
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 1.4
+import QtQuick.Controls.Styles.Flat 1.0 as Flat
+import com.theqtcompany.settings.common 1.0
+import com.theqtcompany.settings.network 1.0
+import com.theqtcompany.settings.wifi 1.0
+
+Item {
+ id: root
+ anchors.fill: parent
+ anchors.margins: Math.round(20 * Flat.FlatStyle.scaleFactor)
+ GroupBox {
+ id: content
+ title: qsTr("Wireless Settings")
+ anchors.fill: parent
+ Layout.fillWidth: true
+ flat: true
+ width: parent.width
+
+ Row {
+ id: enableSwitch
+ width: parent.width
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ TextLabel {
+ width: root.width*0.382
+ horizontalAlignment: Text.AlignRight
+ text: NetworkSettingsManager.wifiPowered ? qsTr("Disable Wifi") : qsTr("Enable Wifi")
+ }
+ Switch {
+ checked: NetworkSettingsManager.wifiPowered
+ onCheckedChanged: NetworkSettingsManager.wifiPowered = checked
+ }
+ }
+
+ Item {
+ id: wifiManagerContainer
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.top: enableSwitch.bottom
+ anchors.topMargin: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ anchors.bottom: parent.bottom
+ Loader {
+ id: wifiManagerLoader
+ asynchronous: true
+ sourceComponent: NetworkSettingsManager.wifiPowered ? wifiManager : undefined
+ }
+ }
+ }
+
+ Component {
+ id: wifiManager
+ WifiManagerView {
+ id: wifiSettings
+ width: root.width
+ visible: true
+ }
+ }
+}
diff --git a/src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/WiredSettings.qml b/src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/WiredSettings.qml
new file mode 100644
index 0000000..5a7e860
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/imports/NetworkSettings/WiredSettings.qml
@@ -0,0 +1,205 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt Device Utilities module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+import QtQuick 2.5
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 1.4
+import QtQuick.Controls.Styles.Flat 1.0 as Flat
+import com.theqtcompany.settings.common 1.0
+import com.theqtcompany.settings.network 1.0
+
+Item {
+ id: root
+ anchors.fill: parent
+ anchors.margins: Math.round(20 * Flat.FlatStyle.scaleFactor)
+ property bool editMode: false
+
+ onVisibleChanged: {
+ if (visible)
+ titlebar.title = qsTr("Network");
+ }
+
+ ListModel {
+ id: methodsModel
+
+ ListElement {
+ text: "DHCP"
+ method: IPv4Config.Dhcp
+ }
+ ListElement {
+ text: "Manual"
+ method: IPv4Config.Manual
+ }
+ ListElement {
+ text: "Off"
+ method: IPv4Config.Off
+ }
+ }
+
+ GroupBox {
+ title: qsTr("Ethernet Connection")
+ anchors.fill: parent
+ Layout.fillWidth: true
+ flat: true
+ Column {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ Row {
+ TextLabel {
+ text: qsTr("Connection method: ")
+ }
+
+ CustomCombobox {
+ id: ipv4Method
+ model: methodsModel
+ Component.onCompleted: selectedIndex = service.ipv4.method
+ onSelectedIndexChanged : {
+ if (model.get(selectedIndex).method !== IPv4Config.Dhcp) {
+ service.ipv4.method = model.get(selectedIndex).method;
+ editMode = true;
+ }
+ else {
+ //Enable DHCP
+ if (service.ipv4.method !== model.get(selectedIndex).method) {
+ service.ipv4.method = model.get(selectedIndex).method;
+ service.setupIpv4Config();
+ }
+
+ editMode = false;
+ }
+ }
+ delegate: FlatStyledDropdownDelegate { }
+ }
+ }
+
+ Row {
+ visible: service.ipv4.method !== IPv4Config.Off
+ TextLabel {
+ text: qsTr("IP Address: ")
+ }
+ TextLabel {
+ text: service.ipv4.address
+ visible: !editMode
+ }
+ IpAddressTextField {
+ id: ipv4Address
+ placeholderText: service.ipv4.address
+ visible: editMode
+ onAccepted: if (text.length > 0) service.ipv4.address = text
+ }
+ }
+
+ Row {
+ visible: service.ipv4.method !== IPv4Config.Off
+ TextLabel {
+ text: qsTr("Mask: ")
+ }
+ TextLabel {
+ text: service.ipv4.mask
+ visible: !editMode
+ }
+ IpAddressTextField {
+ id: ipv4Mask
+ placeholderText: service.ipv4.mask
+ visible: editMode
+ onAccepted: if (text.length > 0) service.ipv4.mask = text
+ }
+ }
+
+ Row {
+ visible: service.ipv4.method !== IPv4Config.Off
+ TextLabel {
+ text: qsTr("Router: ")
+ }
+ TextLabel {
+ text: service.ipv4.gateway
+ visible: !editMode
+ }
+ IpAddressTextField {
+ id: ipv4Gateway
+ placeholderText: service.ipv4.gateway
+ visible: editMode
+ onAccepted: if (text.length > 0) service.ipv4.gateway = text
+ }
+ }
+
+ Row {
+ visible: service.ipv4.method !== IPv4Config.Off
+ TextLabel {
+ text: qsTr("DNS server: ")
+ }
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ Repeater {
+ model: service.nameservers
+
+ TextLabel {
+ text: display
+ }
+ }
+ }
+ }
+
+ Row {
+ Button {
+ text: qsTr("Save")
+ visible: editMode
+
+ onClicked: {
+ ipv4Address.accepted();
+ ipv4Mask.accepted();
+ ipv4Gateway.accepted();
+ service.setupIpv4Config();
+ editMode = false;
+ }
+ }
+ Button {
+ text: qsTr("Cancel")
+ visible: editMode
+ onClicked: {
+ editMode = false;
+ methodSelection.currentIndex = service.ipv4.method
+ }
+ }
+ }
+ Button {
+ text: qsTr("Edit")
+ visible: !editMode
+
+ onClicked: stackView.push( { item : Qt.resolvedUrl("EditWiredSettings.qml"), properties : { service: service } } )
+ }
+ }
+ }
+}
+