summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qtdevicesettings/bluetoothsettingsplugin/Bluetooth.qml89
-rw-r--r--src/qtdevicesettings/bluetoothsettingsplugin/Discovery.qml142
-rw-r--r--src/qtdevicesettings/bluetoothsettingsplugin/bluetoothdevice.cpp169
-rw-r--r--src/qtdevicesettings/bluetoothsettingsplugin/bluetoothdevice.h85
-rw-r--r--src/qtdevicesettings/bluetoothsettingsplugin/bluetoothsettingsplugin.pro32
-rw-r--r--src/qtdevicesettings/bluetoothsettingsplugin/bluez/bluetoothdevice_p.cpp98
-rw-r--r--src/qtdevicesettings/bluetoothsettingsplugin/bluez/bluetoothdevice_p.h56
-rw-r--r--src/qtdevicesettings/bluetoothsettingsplugin/bluez/bluez.pri21
-rw-r--r--src/qtdevicesettings/bluetoothsettingsplugin/bluez/datatypes.h53
-rw-r--r--src/qtdevicesettings/bluetoothsettingsplugin/bluez/device1.xml31
-rw-r--r--src/qtdevicesettings/bluetoothsettingsplugin/bluez/objectmanager.xml20
-rw-r--r--src/qtdevicesettings/bluetoothsettingsplugin/discoverymodel.cpp246
-rw-r--r--src/qtdevicesettings/bluetoothsettingsplugin/discoverymodel.h130
-rw-r--r--src/qtdevicesettings/bluetoothsettingsplugin/icons.qrc16
-rw-r--r--src/qtdevicesettings/bluetoothsettingsplugin/plugin.cpp70
-rw-r--r--src/qtdevicesettings/bluetoothsettingsplugin/qml.qrc6
-rw-r--r--src/qtdevicesettings/bluetoothsettingsplugin/qmldir3
-rw-r--r--src/qtdevicesettings/devicesettings.pro12
-rw-r--r--src/qtdevicesettings/generalsettingsplugin/Display.qml137
-rw-r--r--src/qtdevicesettings/generalsettingsplugin/Sound.qml86
-rw-r--r--src/qtdevicesettings/generalsettingsplugin/generalsettingsplugin.pro24
-rw-r--r--src/qtdevicesettings/generalsettingsplugin/icons.qrc7
-rw-r--r--src/qtdevicesettings/generalsettingsplugin/plugin.cpp53
-rw-r--r--src/qtdevicesettings/generalsettingsplugin/qml.qrc6
-rw-r--r--src/qtdevicesettings/generalsettingsplugin/qmldir2
-rw-r--r--src/qtdevicesettings/icons/Alert_yellow_1x.pngbin0 -> 775 bytes
-rw-r--r--src/qtdevicesettings/icons/Audio_qt_6x.pngbin0 -> 444 bytes
-rw-r--r--src/qtdevicesettings/icons/Bluetooth_qt_1x.pngbin0 -> 858 bytes
-rw-r--r--src/qtdevicesettings/icons/Bluetooth_qt_6x.pngbin0 -> 2349 bytes
-rw-r--r--src/qtdevicesettings/icons/Camcorder_qt_1x.pngbin0 -> 719 bytes
-rw-r--r--src/qtdevicesettings/icons/Camera_qt_1x.pngbin0 -> 1003 bytes
-rw-r--r--src/qtdevicesettings/icons/Chevron-left_black_1x.pngbin0 -> 707 bytes
-rw-r--r--src/qtdevicesettings/icons/Clock_qt_1x.pngbin0 -> 1185 bytes
-rw-r--r--src/qtdevicesettings/icons/Clock_qt_6x.pngbin0 -> 3438 bytes
-rw-r--r--src/qtdevicesettings/icons/Display_qt_6x.pngbin0 -> 1157 bytes
-rw-r--r--src/qtdevicesettings/icons/Flag_qt_6x.pngbin0 -> 1888 bytes
-rw-r--r--src/qtdevicesettings/icons/Headphones_qt_1x.pngbin0 -> 1041 bytes
-rw-r--r--src/qtdevicesettings/icons/Heartbeat_qt_1x.pngbin0 -> 1061 bytes
-rw-r--r--src/qtdevicesettings/icons/Keyboard_qt_1x.pngbin0 -> 1116 bytes
-rw-r--r--src/qtdevicesettings/icons/Laptop_qt_1x.pngbin0 -> 861 bytes
-rw-r--r--src/qtdevicesettings/icons/Microphone_qt_1x.pngbin0 -> 943 bytes
-rw-r--r--src/qtdevicesettings/icons/MobilePhone_qt_1x.pngbin0 -> 785 bytes
-rw-r--r--src/qtdevicesettings/icons/Mouse_qt_1x.pngbin0 -> 732 bytes
-rw-r--r--src/qtdevicesettings/icons/Power_black_1x.pngbin0 -> 1161 bytes
-rw-r--r--src/qtdevicesettings/icons/Tablet_qt_1x.pngbin0 -> 721 bytes
-rw-r--r--src/qtdevicesettings/icons/Volume_down_qt_1x.pngbin0 -> 571 bytes
-rw-r--r--src/qtdevicesettings/icons/Volume_mute_qt_1x.pngbin0 -> 778 bytes
-rw-r--r--src/qtdevicesettings/icons/Volume_up_qt_1x.pngbin0 -> 632 bytes
-rw-r--r--src/qtdevicesettings/icons/WifiAnim_black_2x.pngbin0 -> 1673 bytes
-rw-r--r--src/qtdevicesettings/icons/Wifi_lightgray_2x.pngbin0 -> 924 bytes
-rw-r--r--src/qtdevicesettings/icons/World_qt_6x.pngbin0 -> 5789 bytes
-rwxr-xr-xsrc/qtdevicesettings/icons/generate_icons.sh27
-rw-r--r--src/qtdevicesettings/icons/ref/Audio.pngbin0 -> 135 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Back.pngbin0 -> 1725 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Bluetooth.pngbin0 -> 1364 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Camcorder.pngbin0 -> 1036 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Camera.pngbin0 -> 1889 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Chevron-left.pngbin0 -> 1475 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Chevron-right.pngbin0 -> 1463 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Circle-x.pngbin0 -> 3358 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Clock.pngbin0 -> 2438 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Cogs.pngbin0 -> 2756 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Connections.pngbin0 -> 3226 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Display.pngbin0 -> 754 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Flag.pngbin0 -> 1395 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Headphones.pngbin0 -> 2141 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Heartbeat.pngbin0 -> 2280 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Keyboard.pngbin0 -> 571 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Laptop.pngbin0 -> 753 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Lock.pngbin0 -> 1043 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Microphone.pngbin0 -> 1891 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/MobilePhone.pngbin0 -> 1034 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Mouse.pngbin0 -> 1560 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Plus.pngbin0 -> 2888 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Power.pngbin0 -> 2466 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Settings.pngbin0 -> 2630 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Tablet.pngbin0 -> 892 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Volume_down.pngbin0 -> 505 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Volume_mute.pngbin0 -> 1000 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Volume_up.pngbin0 -> 513 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Wifi.pngbin0 -> 2102 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Wifi1.pngbin0 -> 824 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Wifi2.pngbin0 -> 987 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Wifi3.pngbin0 -> 1195 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Wifi4.pngbin0 -> 2102 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/WifiAnim.pngbin0 -> 2830 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/World.pngbin0 -> 4559 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/Wrench.pngbin0 -> 1677 bytes
-rw-r--r--src/qtdevicesettings/icons/ref/extra/Alert.pngbin0 -> 1502 bytes
-rwxr-xr-xsrc/qtdevicesettings/icons/scripts/cimage.sh45
-rwxr-xr-xsrc/qtdevicesettings/icons/scripts/cimages.sh28
-rwxr-xr-xsrc/qtdevicesettings/icons/scripts/rimage.sh37
-rwxr-xr-xsrc/qtdevicesettings/icons/scripts/rimages.sh25
-rw-r--r--src/qtdevicesettings/localesettingsplugin/Language.qml111
-rw-r--r--src/qtdevicesettings/localesettingsplugin/RegionSelect.qml96
-rw-r--r--src/qtdevicesettings/localesettingsplugin/icons.qrc4
-rw-r--r--src/qtdevicesettings/localesettingsplugin/locale.xml12
-rw-r--r--src/qtdevicesettings/localesettingsplugin/localefiltermodel.cpp96
-rw-r--r--src/qtdevicesettings/localesettingsplugin/localefiltermodel.h59
-rw-r--r--src/qtdevicesettings/localesettingsplugin/localemodel.cpp167
-rw-r--r--src/qtdevicesettings/localesettingsplugin/localemodel.h96
-rw-r--r--src/qtdevicesettings/localesettingsplugin/localesettingsplugin.pro36
-rw-r--r--src/qtdevicesettings/localesettingsplugin/plugin.cpp75
-rw-r--r--src/qtdevicesettings/localesettingsplugin/qml.qrc6
-rw-r--r--src/qtdevicesettings/localesettingsplugin/qmldir3
-rw-r--r--src/qtdevicesettings/localesettingsplugin/systemlocale.cpp57
-rw-r--r--src/qtdevicesettings/localesettingsplugin/systemlocale.h62
-rw-r--r--src/qtdevicesettings/localesettingsplugin/systemlocale_p.h87
-rw-r--r--src/qtdevicesettings/networksettingsplugin/icons.qrc4
-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
-rw-r--r--src/qtdevicesettings/networksettingsplugin/networksettings/connman/connman_manager.xml108
-rw-r--r--src/qtdevicesettings/networksettingsplugin/networksettings/connman/connman_service.xml41
-rw-r--r--src/qtdevicesettings/networksettingsplugin/networksettings/connman/connman_technology.xml23
-rw-r--r--src/qtdevicesettings/networksettingsplugin/networksettings/connman/networksettingsmanager_linux.cpp583
-rw-r--r--src/qtdevicesettings/networksettingsplugin/networksettings/connman/networksettingsmanager_linux_p.h148
-rw-r--r--src/qtdevicesettings/networksettingsplugin/networksettings/networkaddressmodel.cpp83
-rw-r--r--src/qtdevicesettings/networksettingsplugin/networksettings/networkaddressmodel.h60
-rw-r--r--src/qtdevicesettings/networksettingsplugin/networksettings/networkconfig.h394
-rw-r--r--src/qtdevicesettings/networksettingsplugin/networksettings/networksettings.pri28
-rw-r--r--src/qtdevicesettings/networksettingsplugin/networksettings/networksettingsmanager.cpp167
-rw-r--r--src/qtdevicesettings/networksettingsplugin/networksettings/networksettingsmanager.h127
-rw-r--r--src/qtdevicesettings/networksettingsplugin/networksettings/networksmodel.cpp111
-rw-r--r--src/qtdevicesettings/networksettingsplugin/networksettings/networksmodel.h131
-rw-r--r--src/qtdevicesettings/networksettingsplugin/networksettingsplugin.pro45
-rw-r--r--src/qtdevicesettings/networksettingsplugin/networksettingsplugin_plugin.cpp61
-rw-r--r--src/qtdevicesettings/networksettingsplugin/networksettingsplugin_plugin.h51
-rw-r--r--src/qtdevicesettings/networksettingsplugin/qml.qrc10
-rw-r--r--src/qtdevicesettings/networksettingsplugin/qmldir4
-rw-r--r--src/qtdevicesettings/settingscomponents/icons.qrc21
-rw-r--r--src/qtdevicesettings/settingscomponents/imports/Settings/CustomCombobox.qml184
-rw-r--r--src/qtdevicesettings/settingscomponents/imports/Settings/FlatStyledDropdownDelegate.qml78
-rw-r--r--src/qtdevicesettings/settingscomponents/imports/Settings/IconButton.qml54
-rw-r--r--src/qtdevicesettings/settingscomponents/imports/Settings/TextLabel.qml47
-rw-r--r--src/qtdevicesettings/settingscomponents/imports/Settings/qmldir5
-rw-r--r--src/qtdevicesettings/settingscomponents/settingscomponents.pro26
-rw-r--r--src/qtdevicesettings/settingsui/deployment.pri27
-rw-r--r--src/qtdevicesettings/settingsui/icons.qrc12
-rw-r--r--src/qtdevicesettings/settingsui/main.cpp41
-rw-r--r--src/qtdevicesettings/settingsui/main.qml170
-rw-r--r--src/qtdevicesettings/settingsui/qml.qrc6
-rw-r--r--src/qtdevicesettings/settingsui/settingsui.pro17
-rw-r--r--src/qtdevicesettings/settingsui/settingsview.xml41
-rw-r--r--src/qtdevicesettings/timedateplugin/AnalogClock.qml255
-rw-r--r--src/qtdevicesettings/timedateplugin/TimeDate.qml167
-rw-r--r--src/qtdevicesettings/timedateplugin/TimezonesView.qml94
-rw-r--r--src/qtdevicesettings/timedateplugin/icons.qrc4
-rw-r--r--src/qtdevicesettings/timedateplugin/plugin.cpp78
-rw-r--r--src/qtdevicesettings/timedateplugin/qml.qrc7
-rw-r--r--src/qtdevicesettings/timedateplugin/qmldir3
-rw-r--r--src/qtdevicesettings/timedateplugin/systemtime.cpp85
-rw-r--r--src/qtdevicesettings/timedateplugin/systemtime.h73
-rw-r--r--src/qtdevicesettings/timedateplugin/systemtime_p.h88
-rw-r--r--src/qtdevicesettings/timedateplugin/timedated.xml30
-rw-r--r--src/qtdevicesettings/timedateplugin/timedateplugin.pro42
-rw-r--r--src/qtdevicesettings/timedateplugin/timezonefiltermodel.cpp104
-rw-r--r--src/qtdevicesettings/timedateplugin/timezonefiltermodel.h59
-rw-r--r--src/qtdevicesettings/timedateplugin/timezonemodel.cpp140
-rw-r--r--src/qtdevicesettings/timedateplugin/timezonemodel.h89
-rw-r--r--src/qtdevicesettings/wifisettingsplugin/WifiManagerView.qml180
-rw-r--r--src/qtdevicesettings/wifisettingsplugin/WifiSelectorDelegate.qml87
-rw-r--r--src/qtdevicesettings/wifisettingsplugin/WifiSignalMonitor.qml83
-rw-r--r--src/qtdevicesettings/wifisettingsplugin/icons.qrc7
-rw-r--r--src/qtdevicesettings/wifisettingsplugin/plugin.cpp58
-rw-r--r--src/qtdevicesettings/wifisettingsplugin/qml.qrc7
-rw-r--r--src/qtdevicesettings/wifisettingsplugin/qmldir2
-rw-r--r--src/qtdevicesettings/wifisettingsplugin/wifisettingsplugin.pro26
171 files changed, 8558 insertions, 0 deletions
diff --git a/src/qtdevicesettings/bluetoothsettingsplugin/Bluetooth.qml b/src/qtdevicesettings/bluetoothsettingsplugin/Bluetooth.qml
new file mode 100644
index 0000000..88a7d7c
--- /dev/null
+++ b/src/qtdevicesettings/bluetoothsettingsplugin/Bluetooth.qml
@@ -0,0 +1,89 @@
+/****************************************************************************
+**
+** 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.bluetooth 1.0
+
+Item {
+ id: root
+ property string title: qsTr("Bluetooth Settings")
+
+ Column {
+ id: content
+ anchors.fill: parent
+ anchors.margins: Math.round(40 * Flat.FlatStyle.scaleFactor)
+
+ GroupBox {
+ id: groupBox
+ width: parent.width
+ title: qsTr("Bluetooth status")
+ Layout.fillWidth: true
+
+ ColumnLayout {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ width: parent.width
+ Layout.fillWidth: true
+
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ TextLabel {
+ id: off
+ text: qsTr("Off")
+ }
+
+ Switch {
+ checked: BtDevice.powered
+ onCheckedChanged: BtDevice.powered = checked
+ }
+
+ TextLabel {
+ text: qsTr("On")
+ }
+ }
+ }
+ }
+
+ Discovery {
+ id: discovery
+ visible: BtDevice.powered
+ width: parent.width
+ height: Math.round(content.height - 100 * Flat.FlatStyle.scaleFactor)
+ }
+ }
+}
diff --git a/src/qtdevicesettings/bluetoothsettingsplugin/Discovery.qml b/src/qtdevicesettings/bluetoothsettingsplugin/Discovery.qml
new file mode 100644
index 0000000..d40ccbe
--- /dev/null
+++ b/src/qtdevicesettings/bluetoothsettingsplugin/Discovery.qml
@@ -0,0 +1,142 @@
+/****************************************************************************
+**
+** 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 QtBluetooth 5.2
+import QtQuick.Controls.Styles.Flat 1.0 as Flat
+import com.theqtcompany.settings.common 1.0
+import com.theqtcompany.settings.bluetooth 1.0
+
+Item {
+ id: top
+ property BluetoothService currentService
+
+ GroupBox {
+ id: groupBox
+ title: qsTr("Devices")
+ width: parent.width
+
+ ListView {
+ id: mainList
+ width: parent.width
+ height: top.height
+
+ function getIcon(deviceType) {
+ switch (deviceType) {
+ case BtDeviceItem.Computer:
+ return "../icons/Laptop_qt_1x.png"
+ case BtDeviceItem.Headphones:
+ return "../icons/Headphones_qt_1x.png"
+ case BtDeviceItem.Microphone:
+ return "../icons/Microphone_qt_1x.png"
+ case BtDeviceItem.Mouse:
+ return "../icons/Mouse_qt_1x.png"
+ case BtDeviceItem.Keyboard:
+ return "../icons/Keyboard_qt_1x.png"
+ default:
+ return "../icons/Bluetooth_qt_1x.png"
+ }
+ }
+
+ model: BtDevice.deviceModel
+ delegate: Rectangle {
+ id: btDelegate
+ width: parent.width
+ height: Math.round(column.height + 10 * Flat.FlatStyle.scaleFactor)
+
+ property bool expended: false;
+ clip: true
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: btDelegate.expended = !btDelegate.expended
+ }
+
+ RowLayout {
+ anchors.top: parent.top
+ anchors.left: parent.left
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+
+ Image {
+ id: bticon
+ source: mainList.getIcon(type)
+ }
+
+ Column {
+ id: column
+ TextLabel {
+ id: bttext
+ text: name
+ }
+
+ TextLabel {
+ id: details
+ opacity: btDelegate.expended ? 1 : 0.0
+ text: address
+ Behavior on opacity {
+ NumberAnimation { duration: 200}
+ }
+ }
+ }
+ }
+
+ Button {
+ anchors.right: parent.right
+ anchors.rightMargin: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ visible: !BtDevice.scanning
+ text: connected ? qsTr("Disconnect") : qsTr("Connect")
+
+ onClicked : connected ? BtDevice.requestDisconnect(address) : BtDevice.requestPairing(address);
+ }
+
+ Behavior on height { NumberAnimation { duration: 200} }
+
+ }
+ focus: true
+ }
+ }
+
+ BusyIndicator {
+ anchors.right: groupBox.right
+ anchors.top: groupBox.top
+ anchors.topMargin: Math.round(40 * Flat.FlatStyle.scaleFactor)
+ anchors.rightMargin: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ height: Math.round(20 * Flat.FlatStyle.scaleFactor)
+ width: Math.round(20 * Flat.FlatStyle.scaleFactor)
+ running: BtDevice.scanning
+ }
+}
diff --git a/src/qtdevicesettings/bluetoothsettingsplugin/bluetoothdevice.cpp b/src/qtdevicesettings/bluetoothsettingsplugin/bluetoothdevice.cpp
new file mode 100644
index 0000000..65a7422
--- /dev/null
+++ b/src/qtdevicesettings/bluetoothsettingsplugin/bluetoothdevice.cpp
@@ -0,0 +1,169 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#include <discoverymodel.h>
+#include "bluetoothdevice.h"
+#include "bluez/bluetoothdevice_p.h"
+
+BluetoothDevice::BluetoothDevice(QObject *parent) : QObject(parent)
+ ,m_localDevice(new QBluetoothLocalDevice(this))
+ ,m_deviceModel(new DiscoveryModel(this))
+ ,m_powered(false)
+ ,m_scanning(true)
+{
+ m_powered = m_localDevice->hostMode() != QBluetoothLocalDevice::HostPoweredOff;
+
+ connect(m_localDevice, &QBluetoothLocalDevice::hostModeStateChanged, this, &BluetoothDevice::deviceStateChanged);
+ connect(m_localDevice, &QBluetoothLocalDevice::deviceConnected, this, &BluetoothDevice::deviceConnected);
+ connect(m_localDevice, &QBluetoothLocalDevice::deviceDisconnected, this, &BluetoothDevice::deviceDisconnected);
+ connect(m_deviceModel, &DiscoveryModel::scanFinished, this, &BluetoothDevice::scanFinished);
+
+ if (m_powered) {
+ m_deviceModel->scanDevices();
+ }
+
+}
+
+void BluetoothDevice::deviceStateChanged(QBluetoothLocalDevice::HostMode state)
+{
+ m_powered = state != QBluetoothLocalDevice::HostPoweredOff;
+ emit poweredChanged();
+}
+
+bool BluetoothDevice::powered() const
+{
+ return m_powered;
+}
+
+void BluetoothDevice::setPowered(const bool& aPowered)
+{
+ if (aPowered) {
+ m_localDevice->powerOn();
+ }
+ else {
+ m_localDevice->setHostMode(QBluetoothLocalDevice::HostPoweredOff);
+ }
+}
+
+QObject* BluetoothDevice::deviceModel() const
+{
+ return static_cast<QObject*>(m_deviceModel);
+}
+
+void BluetoothDevice::scanFinished()
+{
+ m_scanning = false;
+ emit scanningChanged();
+ updateConnectionStatuses();
+}
+
+bool BluetoothDevice::scanning() const
+{
+ return m_scanning;
+}
+
+void BluetoothDevice::setScanning(const bool& aScan)
+{
+ if (m_scanning && !aScan) {
+ //TODO m_deviceModel->cancel();
+ }
+ else if (aScan && !m_scanning) {
+ m_deviceModel->scanDevices();
+ m_scanning = true;
+ emit scanningChanged();
+ }
+}
+
+void BluetoothDevice::updateConnectionStatuses()
+{
+ QList<QBluetoothAddress> connectedDevices =
+ m_localDevice->connectedDevices();
+
+ foreach (QBluetoothAddress addr, connectedDevices) {
+ m_deviceModel->setConnected(addr.toString(), true);
+ }
+}
+
+void BluetoothDevice::requestPairing(const QString& address)
+{
+ QBluetoothAddress addr(address);
+ m_localDevice->requestPairing(addr, QBluetoothLocalDevice::Paired);
+ connect(m_localDevice, &QBluetoothLocalDevice::pairingDisplayConfirmation, this, &BluetoothDevice::pairingDisplayConfirmation);
+
+ connect(m_localDevice, &QBluetoothLocalDevice::pairingDisplayPinCode, this, &BluetoothDevice::pairingDisplayPinCode);
+
+ connect(m_localDevice, &QBluetoothLocalDevice::pairingFinished, this, &BluetoothDevice::pairingFinished);
+}
+
+void BluetoothDevice::requestConnect(const QString &address)
+{
+ QScopedPointer<BluetoothDevicePrivate> connectionHandler(new BluetoothDevicePrivate(address));
+ connectionHandler->connectDevice();
+}
+
+void BluetoothDevice::requestDisconnect(const QString& address)
+{
+ QScopedPointer<BluetoothDevicePrivate> connectionHandler(new BluetoothDevicePrivate(address));
+ connectionHandler->disconnectDevice();
+}
+
+void BluetoothDevice::pairingDisplayConfirmation(const QBluetoothAddress & address, QString pin)
+{
+ Q_UNUSED(address);
+ Q_UNUSED(pin);
+}
+
+void BluetoothDevice::pairingDisplayPinCode(const QBluetoothAddress & address, QString pin)
+{
+ Q_UNUSED(address);
+ Q_UNUSED(pin);
+}
+
+void BluetoothDevice::pairingFinished(const QBluetoothAddress & address, QBluetoothLocalDevice::Pairing pairing)
+{
+ if (pairing == QBluetoothLocalDevice::Paired) {
+ requestConnect(address.toString());
+ }
+}
+
+void BluetoothDevice::deviceConnected(const QBluetoothAddress & address)
+{
+ m_deviceModel->setConnected(address.toString(), true);
+}
+
+void BluetoothDevice::deviceDisconnected(const QBluetoothAddress & address)
+{
+ m_deviceModel->setConnected(address.toString(), false);
+}
diff --git a/src/qtdevicesettings/bluetoothsettingsplugin/bluetoothdevice.h b/src/qtdevicesettings/bluetoothsettingsplugin/bluetoothdevice.h
new file mode 100644
index 0000000..370b2bc
--- /dev/null
+++ b/src/qtdevicesettings/bluetoothsettingsplugin/bluetoothdevice.h
@@ -0,0 +1,85 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#ifndef BLUETOOTHDEVICE_H
+#define BLUETOOTHDEVICE_H
+
+#include <QObject>
+#include <QBluetoothLocalDevice>
+
+class DiscoveryModel;
+
+class BluetoothDevice : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(bool scanning READ scanning WRITE setScanning NOTIFY scanningChanged)
+ Q_PROPERTY(bool powered READ powered WRITE setPowered NOTIFY poweredChanged)
+ Q_PROPERTY(QObject* deviceModel READ deviceModel CONSTANT)
+public:
+ explicit BluetoothDevice(QObject *parent = 0);
+ bool powered() const;
+ void setPowered(const bool& aPowered);
+ QObject* deviceModel() const;
+ bool scanning() const;
+ void setScanning(const bool& aScan);
+ Q_INVOKABLE void requestPairing(const QString& address);
+ Q_INVOKABLE void requestConnect(const QString& address);
+ Q_INVOKABLE void requestDisconnect(const QString& address);
+signals:
+ void poweredChanged();
+ void scanningChanged();
+
+public slots:
+ void deviceStateChanged(QBluetoothLocalDevice::HostMode state);
+ void scanFinished();
+ //These are not yet signaled
+ //See bug https://bugreports.qt.io/browse/QTBUG-38401
+ void pairingDisplayConfirmation(const QBluetoothAddress & address, QString pin);
+ void pairingDisplayPinCode(const QBluetoothAddress & address, QString pin);
+ void pairingFinished(const QBluetoothAddress & address, QBluetoothLocalDevice::Pairing pairing);
+ void deviceConnected(const QBluetoothAddress & address);
+ void deviceDisconnected(const QBluetoothAddress & address);
+
+private:
+ void updateConnectionStatuses();
+
+private:
+ QBluetoothLocalDevice* m_localDevice;
+ DiscoveryModel *m_deviceModel;
+ bool m_powered;
+ bool m_scanning;
+};
+
+#endif // BLUETOOTHDEVICE_H
diff --git a/src/qtdevicesettings/bluetoothsettingsplugin/bluetoothsettingsplugin.pro b/src/qtdevicesettings/bluetoothsettingsplugin/bluetoothsettingsplugin.pro
new file mode 100644
index 0000000..5ca0add
--- /dev/null
+++ b/src/qtdevicesettings/bluetoothsettingsplugin/bluetoothsettingsplugin.pro
@@ -0,0 +1,32 @@
+TEMPLATE = lib
+CONFIG += plugin
+QT += qml bluetooth
+uri = com.theqtcompany.settings.bluetooth
+
+TARGET = btsettingsplugin
+
+include(bluez/bluez.pri)
+
+HEADERS = \
+ bluetoothdevice.h \
+ discoverymodel.h
+
+SOURCES += plugin.cpp \
+ bluetoothdevice.cpp \
+ discoverymodel.cpp
+
+
+pluginfiles.files += \
+ qmldir \
+
+installPath = $$[QT_INSTALL_QML]/$$replace(uri, \\., /)
+
+target.path = $$installPath
+pluginfiles.path += $$installPath
+INSTALLS += target pluginfiles
+
+
+RESOURCES += \
+ icons.qrc \
+ qml.qrc
+
diff --git a/src/qtdevicesettings/bluetoothsettingsplugin/bluez/bluetoothdevice_p.cpp b/src/qtdevicesettings/bluetoothsettingsplugin/bluez/bluetoothdevice_p.cpp
new file mode 100644
index 0000000..ded84f2
--- /dev/null
+++ b/src/qtdevicesettings/bluetoothsettingsplugin/bluez/bluetoothdevice_p.cpp
@@ -0,0 +1,98 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#include "bluetoothdevice_p.h"
+#include "datatypes.h"
+#include "objectmanager_interface.cpp"
+#include "moc_objectmanager_interface.cpp"
+#include "device1_interface.h"
+
+
+BluetoothDevicePrivate::BluetoothDevicePrivate(const QString& address, QObject *parent)
+ :QObject(parent)
+ ,m_address(address)
+{
+
+}
+
+OrgBluezDevice1Interface* BluetoothDevicePrivate::findDevice()
+{
+ OrgFreedesktopDBusObjectManagerInterface manager(QStringLiteral("org.bluez"),
+ QStringLiteral("/"),
+ QDBusConnection::systemBus());
+ QDBusPendingReply<ManagedObjectList> reply = manager.GetManagedObjects();
+ reply.waitForFinished();
+ if (reply.isError()) {
+ qWarning() << "Failed to get objects";
+ return NULL;
+ }
+
+ ManagedObjectList managedObjectList = reply.value();
+ for (ManagedObjectList::const_iterator it = managedObjectList.constBegin(); it != managedObjectList.constEnd(); ++it) {
+ const QDBusObjectPath &path = it.key();
+
+ const InterfaceList &ifaceList = it.value();
+ for (InterfaceList::const_iterator jt = ifaceList.constBegin(); jt != ifaceList.constEnd(); ++jt) {
+ const QString &iface = jt.key();
+ const QVariantMap &ifaceValues = jt.value();
+ if (iface == QStringLiteral("org.bluez.Device1")) {
+ if (ifaceValues["Address"] == m_address) {
+ OrgBluezDevice1Interface *devIf = new OrgBluezDevice1Interface("org.bluez", path.path(), QDBusConnection::systemBus());
+ return devIf;
+ }
+ }
+ }
+ }
+ return NULL;
+}
+
+
+void BluetoothDevicePrivate::connectDevice()
+{
+ OrgBluezDevice1Interface *dev = findDevice();
+ if (dev) {
+ dev->Connect();
+ dev->deleteLater();
+ }
+}
+
+void BluetoothDevicePrivate::disconnectDevice()
+{
+ OrgBluezDevice1Interface *dev = findDevice();
+ if (dev) {
+ dev->Disconnect();
+ dev->deleteLater();
+ }
+}
diff --git a/src/qtdevicesettings/bluetoothsettingsplugin/bluez/bluetoothdevice_p.h b/src/qtdevicesettings/bluetoothsettingsplugin/bluez/bluetoothdevice_p.h
new file mode 100644
index 0000000..0bd9599
--- /dev/null
+++ b/src/qtdevicesettings/bluetoothsettingsplugin/bluez/bluetoothdevice_p.h
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt Device Utils 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$
+**
+****************************************************************************/
+#ifndef BLUETOOTHDEVICE__P_H
+#define BLUETOOTHDEVICE__P_H
+
+#include <QObject>
+#include <bluetooth/bluetooth.h>
+
+class OrgBluezDevice1Interface;
+
+class BluetoothDevicePrivate : public QObject
+{
+public:
+ explicit BluetoothDevicePrivate(const QString& address, QObject *parent=0);
+ void connectDevice();
+ void disconnectDevice();
+
+private:
+ OrgBluezDevice1Interface* findDevice();
+ QString m_address;
+};
+
+#endif // BLUETOOTHDEVICE__P_H
diff --git a/src/qtdevicesettings/bluetoothsettingsplugin/bluez/bluez.pri b/src/qtdevicesettings/bluetoothsettingsplugin/bluez/bluez.pri
new file mode 100644
index 0000000..f20be87
--- /dev/null
+++ b/src/qtdevicesettings/bluetoothsettingsplugin/bluez/bluez.pri
@@ -0,0 +1,21 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2015-11-03T13:52:45
+#
+#-------------------------------------------------
+
+QT += core dbus
+
+INCLUDEPATH += $${PWD}
+INCLUDEPATH += $${PWD}/bluez
+
+DBUS_INTERFACES = \
+ $${PWD}/objectmanager.xml \
+ $${PWD}/device1.xml \
+
+HEADERS += \
+ $$PWD/bluetoothdevice_p.h \
+ $$PWD/dbusdatatypes.h
+
+SOURCES += \
+ $$PWD/bluetoothdevice_p.cpp
diff --git a/src/qtdevicesettings/bluetoothsettingsplugin/bluez/datatypes.h b/src/qtdevicesettings/bluetoothsettingsplugin/bluez/datatypes.h
new file mode 100644
index 0000000..b794c47
--- /dev/null
+++ b/src/qtdevicesettings/bluetoothsettingsplugin/bluez/datatypes.h
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt Device Utils 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$
+**
+****************************************************************************/
+#ifndef DATATYPES_H
+#define DATATYPES_H
+
+#include <QObject>
+#include <QtDBus>
+#include <QMap>
+#include <QVariantMap>
+#include <QtDBus/QDBusObjectPath>
+#include <QtCore/QMetaType>
+
+typedef QMap<QString, QVariantMap> InterfaceList;
+typedef QMap<QDBusObjectPath, InterfaceList> ManagedObjectList;
+
+Q_DECLARE_METATYPE(InterfaceList)
+Q_DECLARE_METATYPE(ManagedObjectList)
+
+
+#endif // DATATYPES_H
diff --git a/src/qtdevicesettings/bluetoothsettingsplugin/bluez/device1.xml b/src/qtdevicesettings/bluetoothsettingsplugin/bluez/device1.xml
new file mode 100644
index 0000000..5b16992
--- /dev/null
+++ b/src/qtdevicesettings/bluetoothsettingsplugin/bluez/device1.xml
@@ -0,0 +1,31 @@
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+<node>
+ <interface name="org.bluez.Device1">
+ <method name="Disconnect"></method>
+ <method name="Connect"></method>
+ <method name="ConnectProfile">
+ <arg name="UUID" type="s" direction="in"/>
+ </method>
+ <method name="DisconnectProfile">
+ <arg name="UUID" type="s" direction="in"/>
+ </method>
+ <method name="Pair"></method>
+ <method name="CancelPairing"></method>
+ <property name="Address" type="s" access="read"></property>
+ <property name="Name" type="s" access="read"></property>
+ <property name="Alias" type="s" access="readwrite"></property>
+ <property name="Appearance" type="q" access="read"></property>
+ <property name="Icon" type="s" access="read"></property>
+ <property name="Paired" type="b" access="read"></property>
+ <property name="Trusted" type="b" access="readwrite"></property>
+ <property name="Blocked" type="b" access="readwrite"></property>
+ <property name="LegacyPairing" type="b" access="read"></property>
+ <property name="RSSI" type="n" access="read"></property>
+ <property name="Connected" type="b" access="read"></property>
+ <property name="UUIDs" type="as" access="read"></property>
+ <property name="Modalias" type="s" access="read"></property>
+ <property name="Adapter" type="o" access="read"></property>
+ </interface>
+</node>
+
diff --git a/src/qtdevicesettings/bluetoothsettingsplugin/bluez/objectmanager.xml b/src/qtdevicesettings/bluetoothsettingsplugin/bluez/objectmanager.xml
new file mode 100644
index 0000000..e52d6fe
--- /dev/null
+++ b/src/qtdevicesettings/bluetoothsettingsplugin/bluez/objectmanager.xml
@@ -0,0 +1,20 @@
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+ <interface name="org.freedesktop.DBus.ObjectManager">
+ <method name="GetManagedObjects">
+ <arg type="a{oa{sa{sv}}}" name="object_paths_interfaces_and_properties" direction="out"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="ManagedObjectList"/>
+ </method>
+ <signal name="InterfacesAdded">
+ <arg type="o" name="object_path"/>
+ <arg type="a{sa{sv}}" name="interfaces_and_properties"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.In1" value="InterfaceList"/>
+ </signal>
+ <signal name="InterfacesRemoved">
+ <arg type="o" name="object_path"/>
+ <arg type="as" name="interfaces"/>
+ </signal>
+ </interface>
+</node>
+
diff --git a/src/qtdevicesettings/bluetoothsettingsplugin/discoverymodel.cpp b/src/qtdevicesettings/bluetoothsettingsplugin/discoverymodel.cpp
new file mode 100644
index 0000000..36d3a2e
--- /dev/null
+++ b/src/qtdevicesettings/bluetoothsettingsplugin/discoverymodel.cpp
@@ -0,0 +1,246 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+#include <QBluetoothAddress>
+#include "discoverymodel.h"
+
+BtDeviceItem::BtDeviceItem(const QBluetoothDeviceInfo& bt, QObject *parent)
+ : QObject(parent)
+ ,m_name(bt.name())
+ ,m_address(bt.address().toString())
+ ,m_connected(false)
+{
+ m_type = getDeviceType(bt.majorDeviceClass(), bt.minorDeviceClass());
+}
+
+QString BtDeviceItem::name() const
+{
+ return m_name;
+}
+
+QString BtDeviceItem::address() const
+{
+ return m_address;
+}
+
+bool BtDeviceItem::connected() const
+{
+ return m_connected;
+}
+
+void BtDeviceItem::setConnected(bool aConnected)
+{
+ m_connected = aConnected;
+ emit connectedChanged();
+}
+
+BtDeviceItem::DeviceType BtDeviceItem::type() const
+{
+ return m_type;
+}
+
+BtDeviceItem::DeviceType BtDeviceItem::getDeviceType(const QBluetoothDeviceInfo::MajorDeviceClass major, const quint8 minor) const
+{
+ switch (major) {
+ case QBluetoothDeviceInfo::ComputerDevice:
+ return getComputerDeviceType(minor);
+ break;
+ case QBluetoothDeviceInfo::PhoneDevice:
+ return getPhoneDeviceType(minor);
+ break;
+ case QBluetoothDeviceInfo::AudioVideoDevice:
+ return getAudioDeviceType(minor);
+ break;
+ case QBluetoothDeviceInfo::PeripheralDevice:
+ return getPeripheralDeviceType(minor);
+ break;
+ case QBluetoothDeviceInfo::ImagingDevice:
+ return getImagingDeviceType(minor);
+ break;
+ default:
+ return GenericDevice;
+ }
+ return GenericDevice;
+}
+
+BtDeviceItem::DeviceType BtDeviceItem::getComputerDeviceType(const quint8 minor) const
+{
+ Q_UNUSED(minor);
+ return Computer;
+}
+
+BtDeviceItem::DeviceType BtDeviceItem::getAudioDeviceType(const quint8 minor) const
+{
+ switch (minor) {
+ case QBluetoothDeviceInfo::Microphone:
+ return Microphone;
+ break;
+ case QBluetoothDeviceInfo::WearableHeadsetDevice:
+ case QBluetoothDeviceInfo::Headphones:
+ return Headphones;
+ break;
+ case QBluetoothDeviceInfo::Camcorder:
+ case QBluetoothDeviceInfo::VideoCamera:
+ return Camcorder;
+ break;
+ default:
+ return GenericDevice;
+ break;
+ }
+}
+
+BtDeviceItem::DeviceType BtDeviceItem::getPeripheralDeviceType(const quint8 minor) const
+{
+ switch (minor) {
+ case QBluetoothDeviceInfo::KeyboardPeripheral:
+ return Keyboard;
+ break;
+ case QBluetoothDeviceInfo::PointingDevicePeripheral:
+ return Mouse;
+ break;
+ default:
+ return GenericDevice;
+ break;
+ }
+}
+
+BtDeviceItem::DeviceType BtDeviceItem::getImagingDeviceType(const quint8 minor) const
+{
+ switch (minor) {
+ case QBluetoothDeviceInfo::ImageCamera:
+ return Camera;
+ break;
+ default:
+ return GenericDevice;
+ break;
+ }
+}
+
+BtDeviceItem::DeviceType BtDeviceItem::getPhoneDeviceType(const quint8 minor) const
+{
+ Q_UNUSED(minor);
+ return Phone;
+}
+
+
+DiscoveryModel::DiscoveryModel(QObject *parent)
+ : QAbstractListModel(parent)
+ ,m_discoveryAgent(new QBluetoothDeviceDiscoveryAgent(this))
+{
+ m_roleNames.insert(Qt::UserRole, "modelData");
+ m_roleNames.insert(Address, "address");
+ m_roleNames.insert(Name, "name");
+ m_roleNames.insert(Type, "type");
+ m_roleNames.insert(Connected, "connected");
+
+ connect(m_discoveryAgent, SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)),
+ this, SLOT(deviceDiscovered(QBluetoothDeviceInfo)));
+
+ connect(m_discoveryAgent, SIGNAL(finished()),
+ this, SIGNAL(scanFinished()));
+
+}
+
+void DiscoveryModel::deviceDiscovered(const QBluetoothDeviceInfo &device)
+{
+ beginInsertRows(QModelIndex(), m_items.count(), m_items.count());
+ BtDeviceItem *item = new BtDeviceItem(device);
+ m_items.append(item);
+ endInsertRows();
+}
+
+DiscoveryModel::~DiscoveryModel()
+{
+
+}
+
+void DiscoveryModel::scanDevices()
+{
+ m_discoveryAgent->start();
+}
+
+QHash<int, QByteArray> DiscoveryModel::roleNames() const
+{
+ return m_roleNames;
+}
+
+int DiscoveryModel::rowCount(const QModelIndex & parent) const
+{
+ Q_UNUSED(parent);
+ return m_items.count();
+}
+
+QVariant DiscoveryModel::data(const QModelIndex & index, int role) const
+{
+ if (!index.isValid()) return QVariant();
+
+ BtDeviceItem *item = m_items[index.row()];
+
+ switch (role) {
+ case DiscoveryModel::Name:
+ return item->name();
+ break;
+ case DiscoveryModel::Address:
+ return item->address();
+ break;
+ case DiscoveryModel::Type:
+ return item->type();
+ break;
+ case DiscoveryModel::Connected:
+ return item->connected();
+ default:
+ return "";
+ }
+}
+
+void DiscoveryModel::setConnected(const QString &aAddress, bool connected)
+{
+ bool found = false;
+ int i = 0;
+ QVector<int> role;
+ role.append(DiscoveryModel::Connected);
+ foreach (BtDeviceItem *item, m_items) {
+ if (item->address() == aAddress) {
+ item->setConnected(connected);
+ found = true;
+ break;
+ }
+ i++;
+ }
+
+ if (found)
+ emit dataChanged(index(i, 0), index(i, 0), role);
+}
diff --git a/src/qtdevicesettings/bluetoothsettingsplugin/discoverymodel.h b/src/qtdevicesettings/bluetoothsettingsplugin/discoverymodel.h
new file mode 100644
index 0000000..de30c4c
--- /dev/null
+++ b/src/qtdevicesettings/bluetoothsettingsplugin/discoverymodel.h
@@ -0,0 +1,130 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#ifndef DISCOVERYMODEL_H
+#define DISCOVERYMODEL_H
+
+
+#include <QObject>
+#include <QAbstractListModel>
+#include <QBluetoothDeviceInfo>
+#include <QBluetoothDeviceDiscoveryAgent>
+
+class BtDeviceItem : public QObject
+{
+ Q_OBJECT
+ Q_ENUMS(DeviceType)
+ Q_PROPERTY(QString address READ address CONSTANT)
+ Q_PROPERTY(QString name READ name CONSTANT)
+ Q_PROPERTY(bool connected READ connected NOTIFY connectedChanged)
+ Q_PROPERTY(DeviceType type READ type CONSTANT)
+public:
+ explicit BtDeviceItem(const QBluetoothDeviceInfo& id, QObject *parent=0);
+ //The list of device type we want to show the icon
+ enum DeviceType {
+ Phone,
+ Computer,
+ Mouse,
+ Keyboard,
+ Headphones,
+ Microphone,
+ Camera,
+ Camcorder,
+ Clock,
+ HealthDevice,
+ GenericDevice=1000
+ };
+ QString name() const;
+ QString address() const;
+ DeviceType type() const;
+ bool connected() const;
+ void setConnected(bool aConnected);
+
+signals:
+ void connectedChanged();
+
+protected:
+ DeviceType getDeviceType(const QBluetoothDeviceInfo::MajorDeviceClass major,
+ const quint8 minor) const;
+ DeviceType getComputerDeviceType(const quint8 minor) const;
+ DeviceType getAudioDeviceType(const quint8 minor) const;
+ DeviceType getPeripheralDeviceType(const quint8 minor) const;
+ DeviceType getImagingDeviceType(const quint8 minor) const;
+ DeviceType getHealthDeviceType(const quint8 minor) const;
+ DeviceType getPhoneDeviceType(const quint8 minor) const;
+
+private:
+ QString m_name;
+ QString m_address;
+ bool m_connected;
+ DeviceType m_type;
+};
+
+class DiscoveryModel : public QAbstractListModel
+{
+ Q_OBJECT
+ Q_ENUMS(DeviceType)
+public:
+ explicit DiscoveryModel(QObject *parent=0);
+ virtual ~DiscoveryModel();
+ // from QAbstractItemModel
+ int rowCount(const QModelIndex & parent = QModelIndex()) const;
+ QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
+ QHash<int, QByteArray> roleNames() const;
+ Q_INVOKABLE QVariant itemFromRow(const int row) const;
+ void setConnected(const QString& aAddress, bool connected);
+ void scanDevices();
+
+ enum Roles {
+ Name = Qt::UserRole,
+ Address,
+ Type,
+ Connected
+ };
+
+signals:
+ void scanFinished();
+
+private slots:
+ void deviceDiscovered(const QBluetoothDeviceInfo &device);
+ void canceled();
+ void error(QBluetoothDeviceDiscoveryAgent::Error error);
+ void finished();
+private:
+ QList<BtDeviceItem*> m_items;
+ QHash<int, QByteArray> m_roleNames;
+ QBluetoothDeviceDiscoveryAgent *m_discoveryAgent;
+};
+#endif // DISCOVERYMODEL_H
diff --git a/src/qtdevicesettings/bluetoothsettingsplugin/icons.qrc b/src/qtdevicesettings/bluetoothsettingsplugin/icons.qrc
new file mode 100644
index 0000000..a7c8d7e
--- /dev/null
+++ b/src/qtdevicesettings/bluetoothsettingsplugin/icons.qrc
@@ -0,0 +1,16 @@
+<RCC>
+ <qresource prefix="/">
+ <file>../icons/Bluetooth_qt_1x.png</file>
+ <file>../icons/Camcorder_qt_1x.png</file>
+ <file>../icons/Camera_qt_1x.png</file>
+ <file>../icons/Clock_qt_1x.png</file>
+ <file>../icons/Headphones_qt_1x.png</file>
+ <file>../icons/Heartbeat_qt_1x.png</file>
+ <file>../icons/Keyboard_qt_1x.png</file>
+ <file>../icons/Laptop_qt_1x.png</file>
+ <file>../icons/Microphone_qt_1x.png</file>
+ <file>../icons/MobilePhone_qt_1x.png</file>
+ <file>../icons/Mouse_qt_1x.png</file>
+ <file>../icons/Tablet_qt_1x.png</file>
+ </qresource>
+</RCC>
diff --git a/src/qtdevicesettings/bluetoothsettingsplugin/plugin.cpp b/src/qtdevicesettings/bluetoothsettingsplugin/plugin.cpp
new file mode 100644
index 0000000..24e9705
--- /dev/null
+++ b/src/qtdevicesettings/bluetoothsettingsplugin/plugin.cpp
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+#include <QtQml/QQmlExtensionPlugin>
+#include <QtQml/qqml.h>
+#include <qcoreapplication.h>
+#include <QQmlEngine>
+#include <QQmlContext>
+
+#include "bluetoothdevice.h"
+#include "discoverymodel.h"
+
+class BluetoothSettingsQmlPlugin : public QQmlExtensionPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
+
+public:
+ void registerTypes(const char *uri)
+ {
+ Q_ASSERT(QLatin1String(uri) == QLatin1String("com.theqtcompany.settings.bluetooth"));
+ qmlRegisterUncreatableType<BtDeviceItem>(uri, 1, 0, "BtDeviceItem", "Cannot be instantiated directly.");
+ const QString prefix = "qrc:";
+ qmlRegisterType(QUrl(prefix + "Bluetooth.qml"), uri, 1, 0, "Bluetooth");
+ qmlRegisterType(QUrl(prefix + "Discovery.qml"), uri, 1, 0, "Discovery");
+
+ }
+
+ void initializeEngine(QQmlEngine * engine, const char * uri)
+ {
+ Q_ASSERT(QLatin1String(uri) == QLatin1String("com.theqtcompany.settings.bluetooth"));
+ BluetoothDevice *device = new BluetoothDevice(engine);
+ engine->rootContext()->setContextProperty("BtDevice", device);
+ }
+};
+
+#include "plugin.moc"
diff --git a/src/qtdevicesettings/bluetoothsettingsplugin/qml.qrc b/src/qtdevicesettings/bluetoothsettingsplugin/qml.qrc
new file mode 100644
index 0000000..1d36902
--- /dev/null
+++ b/src/qtdevicesettings/bluetoothsettingsplugin/qml.qrc
@@ -0,0 +1,6 @@
+<RCC>
+ <qresource prefix="/">
+ <file>Bluetooth.qml</file>
+ <file>Discovery.qml</file>
+ </qresource>
+</RCC>
diff --git a/src/qtdevicesettings/bluetoothsettingsplugin/qmldir b/src/qtdevicesettings/bluetoothsettingsplugin/qmldir
new file mode 100644
index 0000000..febebc2
--- /dev/null
+++ b/src/qtdevicesettings/bluetoothsettingsplugin/qmldir
@@ -0,0 +1,3 @@
+module com.theqtcompany.settings.bluetooth
+Bluetooth 1.0 Bluetooth.qml
+plugin btsettingsplugin
diff --git a/src/qtdevicesettings/devicesettings.pro b/src/qtdevicesettings/devicesettings.pro
new file mode 100644
index 0000000..54758aa
--- /dev/null
+++ b/src/qtdevicesettings/devicesettings.pro
@@ -0,0 +1,12 @@
+TEMPLATE = subdirs
+SUBDIRS += \
+ settingscomponents \
+ networksettingsplugin \
+ generalsettingsplugin \
+ timedateplugin \
+ settingsui \
+ wifisettingsplugin \
+ localesettingsplugin \
+ bluetoothsettingsplugin \
+
+CONFIG += ordered
diff --git a/src/qtdevicesettings/generalsettingsplugin/Display.qml b/src/qtdevicesettings/generalsettingsplugin/Display.qml
new file mode 100644
index 0000000..33bdba8
--- /dev/null
+++ b/src/qtdevicesettings/generalsettingsplugin/Display.qml
@@ -0,0 +1,137 @@
+/****************************************************************************
+**
+** 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 B2Qt.Utils 1.0
+import QtQuick.Enterprise.VirtualKeyboard.Settings 1.2
+
+Item {
+ id: root
+
+ property string title: qsTr("Display Settings")
+
+ GroupBox {
+ title: qsTr("Display Settings")
+ anchors.fill: parent
+ anchors.margins: Math.round(40 * Flat.FlatStyle.scaleFactor)
+ Layout.fillWidth: true
+
+ Column {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ RowLayout {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+
+ TextLabel {
+ text: qsTr("Brighness: ")
+ }
+
+ Slider {
+ id: brightnessSlider
+ value: B2QtDevice.displayBrightness
+ Layout.fillWidth: true
+ }
+ }
+
+ Binding {
+ target: B2QtDevice
+ property: "displayBrightness"
+ value: brightnessSlider.value
+ }
+
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+
+ TextLabel {
+ text: qsTr("Physical screen size: ")
+ }
+
+ ColumnLayout {
+ ExclusiveGroup { id: exgroup }
+ RadioButton {
+ text: qsTr("Default")
+ exclusiveGroup: exgroup
+ checked: !B2QtDevice.physicalScreenSizeOverride
+ }
+ RadioButton {
+ id: custom
+ text: qsTr("Custom")
+ exclusiveGroup: exgroup
+ checked: B2QtDevice.physicalScreenSizeOverride
+
+ onCheckedChanged: B2QtDevice.physicalScreenSizeOverride = checked
+ }
+
+ GroupBox {
+ title: qsTr("Size (in inches): " + sizeSlider.value)
+ Layout.fillWidth: true
+ flat: true
+ visible: custom.checked
+
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ TextLabel {
+ text: sizeSlider.minimumValue
+ }
+
+ Slider {
+ id: sizeSlider
+ value: B2QtDevice.physicalScreenSizeInch
+ Layout.fillWidth: true
+ stepSize: 1
+ minimumValue: 4
+ maximumValue: 60
+ }
+
+ TextLabel {
+ text: sizeSlider.maximumValue
+ }
+
+ Binding {
+ target: B2QtDevice
+ property: "physicalScreenSizeInch"
+ value: sizeSlider.value
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
diff --git a/src/qtdevicesettings/generalsettingsplugin/Sound.qml b/src/qtdevicesettings/generalsettingsplugin/Sound.qml
new file mode 100644
index 0000000..7d854f4
--- /dev/null
+++ b/src/qtdevicesettings/generalsettingsplugin/Sound.qml
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** 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 B2Qt.Utils 1.0
+
+Item {
+ id: root
+ property string title: qsTr("Audio Settings")
+
+ GroupBox {
+ title: qsTr("Audio Settings")
+ anchors.fill: parent
+ anchors.margins: Math.round(40 * Flat.FlatStyle.scaleFactor)
+ Layout.fillWidth: true
+
+ Column {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+
+ RowLayout {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+
+ TextLabel {
+ text: qsTr("Master volume: ")
+ }
+
+ Image {
+ source: "../icons/Volume_down_qt_1x.png"
+ }
+
+ Slider {
+ id: volumeSlider
+ value: B2QtDevice.masterVolume
+ Layout.fillWidth: true
+ }
+
+ Image {
+ source: "../icons/Volume_up_qt_1x.png"
+ }
+ }
+
+ Binding {
+ target: B2QtDevice
+ property: "masterVolume"
+ value: volumeSlider.value
+ }
+ }
+ }
+}
+
diff --git a/src/qtdevicesettings/generalsettingsplugin/generalsettingsplugin.pro b/src/qtdevicesettings/generalsettingsplugin/generalsettingsplugin.pro
new file mode 100644
index 0000000..884437f
--- /dev/null
+++ b/src/qtdevicesettings/generalsettingsplugin/generalsettingsplugin.pro
@@ -0,0 +1,24 @@
+TEMPLATE = lib
+CONFIG += plugin
+QT += qml
+
+uri = com.theqtcompany.settings.general
+
+DESTDIR = imports/GeneralSettings
+TARGET = qmlgeneralsettingsplugin
+
+SOURCES += plugin.cpp
+
+pluginfiles.files += \
+ qmldir \
+
+installPath = $$[QT_INSTALL_QML]/$$replace(uri, \\., /)
+
+target.path = $$installPath
+pluginfiles.path += $$installPath
+INSTALLS += target pluginfiles
+
+RESOURCES += \
+ icons.qrc \
+ qml.qrc
+
diff --git a/src/qtdevicesettings/generalsettingsplugin/icons.qrc b/src/qtdevicesettings/generalsettingsplugin/icons.qrc
new file mode 100644
index 0000000..540913c
--- /dev/null
+++ b/src/qtdevicesettings/generalsettingsplugin/icons.qrc
@@ -0,0 +1,7 @@
+<RCC>
+ <qresource prefix="/">
+ <file>../icons/Volume_down_qt_1x.png</file>
+ <file>../icons/Volume_mute_qt_1x.png</file>
+ <file>../icons/Volume_up_qt_1x.png</file>
+ </qresource>
+</RCC>
diff --git a/src/qtdevicesettings/generalsettingsplugin/plugin.cpp b/src/qtdevicesettings/generalsettingsplugin/plugin.cpp
new file mode 100644
index 0000000..c7c6f40
--- /dev/null
+++ b/src/qtdevicesettings/generalsettingsplugin/plugin.cpp
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+#include <QtQml/QQmlExtensionPlugin>
+#include <QtQml/qqml.h>
+#include <qcoreapplication.h>
+
+class GeneralSettingsQmlPlugin : public QQmlExtensionPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
+
+public:
+ void registerTypes(const char *uri)
+ {
+ qmlRegisterType(QUrl("qrc:/Display.qml"), uri, 1, 0, "Display");
+ }
+};
+
+#include "plugin.moc"
diff --git a/src/qtdevicesettings/generalsettingsplugin/qml.qrc b/src/qtdevicesettings/generalsettingsplugin/qml.qrc
new file mode 100644
index 0000000..03083d5
--- /dev/null
+++ b/src/qtdevicesettings/generalsettingsplugin/qml.qrc
@@ -0,0 +1,6 @@
+<RCC>
+ <qresource prefix="/">
+ <file>Display.qml</file>
+ <file>Sound.qml</file>
+ </qresource>
+</RCC>
diff --git a/src/qtdevicesettings/generalsettingsplugin/qmldir b/src/qtdevicesettings/generalsettingsplugin/qmldir
new file mode 100644
index 0000000..410dcca
--- /dev/null
+++ b/src/qtdevicesettings/generalsettingsplugin/qmldir
@@ -0,0 +1,2 @@
+module com.theqtcompany.settings.general
+plugin qmlgeneralsettingsplugin
diff --git a/src/qtdevicesettings/icons/Alert_yellow_1x.png b/src/qtdevicesettings/icons/Alert_yellow_1x.png
new file mode 100644
index 0000000..2306ff6
--- /dev/null
+++ b/src/qtdevicesettings/icons/Alert_yellow_1x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/Audio_qt_6x.png b/src/qtdevicesettings/icons/Audio_qt_6x.png
new file mode 100644
index 0000000..8251129
--- /dev/null
+++ b/src/qtdevicesettings/icons/Audio_qt_6x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/Bluetooth_qt_1x.png b/src/qtdevicesettings/icons/Bluetooth_qt_1x.png
new file mode 100644
index 0000000..af6968d
--- /dev/null
+++ b/src/qtdevicesettings/icons/Bluetooth_qt_1x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/Bluetooth_qt_6x.png b/src/qtdevicesettings/icons/Bluetooth_qt_6x.png
new file mode 100644
index 0000000..55e4fb1
--- /dev/null
+++ b/src/qtdevicesettings/icons/Bluetooth_qt_6x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/Camcorder_qt_1x.png b/src/qtdevicesettings/icons/Camcorder_qt_1x.png
new file mode 100644
index 0000000..7ffb2c8
--- /dev/null
+++ b/src/qtdevicesettings/icons/Camcorder_qt_1x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/Camera_qt_1x.png b/src/qtdevicesettings/icons/Camera_qt_1x.png
new file mode 100644
index 0000000..b84e53a
--- /dev/null
+++ b/src/qtdevicesettings/icons/Camera_qt_1x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/Chevron-left_black_1x.png b/src/qtdevicesettings/icons/Chevron-left_black_1x.png
new file mode 100644
index 0000000..225176b
--- /dev/null
+++ b/src/qtdevicesettings/icons/Chevron-left_black_1x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/Clock_qt_1x.png b/src/qtdevicesettings/icons/Clock_qt_1x.png
new file mode 100644
index 0000000..ee58f95
--- /dev/null
+++ b/src/qtdevicesettings/icons/Clock_qt_1x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/Clock_qt_6x.png b/src/qtdevicesettings/icons/Clock_qt_6x.png
new file mode 100644
index 0000000..aba8b60
--- /dev/null
+++ b/src/qtdevicesettings/icons/Clock_qt_6x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/Display_qt_6x.png b/src/qtdevicesettings/icons/Display_qt_6x.png
new file mode 100644
index 0000000..e45c45c
--- /dev/null
+++ b/src/qtdevicesettings/icons/Display_qt_6x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/Flag_qt_6x.png b/src/qtdevicesettings/icons/Flag_qt_6x.png
new file mode 100644
index 0000000..f549ebd
--- /dev/null
+++ b/src/qtdevicesettings/icons/Flag_qt_6x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/Headphones_qt_1x.png b/src/qtdevicesettings/icons/Headphones_qt_1x.png
new file mode 100644
index 0000000..82b04e7
--- /dev/null
+++ b/src/qtdevicesettings/icons/Headphones_qt_1x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/Heartbeat_qt_1x.png b/src/qtdevicesettings/icons/Heartbeat_qt_1x.png
new file mode 100644
index 0000000..16a94bc
--- /dev/null
+++ b/src/qtdevicesettings/icons/Heartbeat_qt_1x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/Keyboard_qt_1x.png b/src/qtdevicesettings/icons/Keyboard_qt_1x.png
new file mode 100644
index 0000000..cc6417d
--- /dev/null
+++ b/src/qtdevicesettings/icons/Keyboard_qt_1x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/Laptop_qt_1x.png b/src/qtdevicesettings/icons/Laptop_qt_1x.png
new file mode 100644
index 0000000..2924015
--- /dev/null
+++ b/src/qtdevicesettings/icons/Laptop_qt_1x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/Microphone_qt_1x.png b/src/qtdevicesettings/icons/Microphone_qt_1x.png
new file mode 100644
index 0000000..f76a963
--- /dev/null
+++ b/src/qtdevicesettings/icons/Microphone_qt_1x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/MobilePhone_qt_1x.png b/src/qtdevicesettings/icons/MobilePhone_qt_1x.png
new file mode 100644
index 0000000..363d667
--- /dev/null
+++ b/src/qtdevicesettings/icons/MobilePhone_qt_1x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/Mouse_qt_1x.png b/src/qtdevicesettings/icons/Mouse_qt_1x.png
new file mode 100644
index 0000000..24d057d
--- /dev/null
+++ b/src/qtdevicesettings/icons/Mouse_qt_1x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/Power_black_1x.png b/src/qtdevicesettings/icons/Power_black_1x.png
new file mode 100644
index 0000000..cca0fe8
--- /dev/null
+++ b/src/qtdevicesettings/icons/Power_black_1x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/Tablet_qt_1x.png b/src/qtdevicesettings/icons/Tablet_qt_1x.png
new file mode 100644
index 0000000..e218184
--- /dev/null
+++ b/src/qtdevicesettings/icons/Tablet_qt_1x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/Volume_down_qt_1x.png b/src/qtdevicesettings/icons/Volume_down_qt_1x.png
new file mode 100644
index 0000000..2068819
--- /dev/null
+++ b/src/qtdevicesettings/icons/Volume_down_qt_1x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/Volume_mute_qt_1x.png b/src/qtdevicesettings/icons/Volume_mute_qt_1x.png
new file mode 100644
index 0000000..1a41927
--- /dev/null
+++ b/src/qtdevicesettings/icons/Volume_mute_qt_1x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/Volume_up_qt_1x.png b/src/qtdevicesettings/icons/Volume_up_qt_1x.png
new file mode 100644
index 0000000..45a8b61
--- /dev/null
+++ b/src/qtdevicesettings/icons/Volume_up_qt_1x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/WifiAnim_black_2x.png b/src/qtdevicesettings/icons/WifiAnim_black_2x.png
new file mode 100644
index 0000000..76c850d
--- /dev/null
+++ b/src/qtdevicesettings/icons/WifiAnim_black_2x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/Wifi_lightgray_2x.png b/src/qtdevicesettings/icons/Wifi_lightgray_2x.png
new file mode 100644
index 0000000..3e6183a
--- /dev/null
+++ b/src/qtdevicesettings/icons/Wifi_lightgray_2x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/World_qt_6x.png b/src/qtdevicesettings/icons/World_qt_6x.png
new file mode 100644
index 0000000..9024031
--- /dev/null
+++ b/src/qtdevicesettings/icons/World_qt_6x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/generate_icons.sh b/src/qtdevicesettings/icons/generate_icons.sh
new file mode 100755
index 0000000..55867b8
--- /dev/null
+++ b/src/qtdevicesettings/icons/generate_icons.sh
@@ -0,0 +1,27 @@
+############################################################################
+##
+## Copyright (C) 2015 Digia Plc
+## All rights reserved.
+## For any questions to Digia, please use the contact form at
+## http://www.qt.io
+##
+## This file is part of Qt Enterprise Embedded.
+##
+## Licensees holding valid Qt Enterprise licenses may use this file in
+## accordance with the Qt Enterprise License Agreement provided with the
+## Software or, alternatively, in accordance with the terms contained in
+## a written agreement between you and Digia.
+##
+## If you have questions regarding the use of this file, please use
+## the contact form at http://www.qt.io
+##
+#############################################################################
+#!/bin/bash
+#
+# This script resizes and sets correct brand colors for the icons in ref folder
+#
+
+./scripts/cimages.sh ./ref/*.png
+./scripts/cimage.sh ./ref/extra/Alert.png red
+./scripts/cimage.sh ./ref/extra/Alert.png yellow
+./scripts/rimages.sh *.png
diff --git a/src/qtdevicesettings/icons/ref/Audio.png b/src/qtdevicesettings/icons/ref/Audio.png
new file mode 100644
index 0000000..8434f0a
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Audio.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Back.png b/src/qtdevicesettings/icons/ref/Back.png
new file mode 100644
index 0000000..9029fd0
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Back.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Bluetooth.png b/src/qtdevicesettings/icons/ref/Bluetooth.png
new file mode 100644
index 0000000..e7c80a9
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Bluetooth.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Camcorder.png b/src/qtdevicesettings/icons/ref/Camcorder.png
new file mode 100644
index 0000000..8c317a2
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Camcorder.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Camera.png b/src/qtdevicesettings/icons/ref/Camera.png
new file mode 100644
index 0000000..c71ab25
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Camera.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Chevron-left.png b/src/qtdevicesettings/icons/ref/Chevron-left.png
new file mode 100644
index 0000000..95006f4
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Chevron-left.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Chevron-right.png b/src/qtdevicesettings/icons/ref/Chevron-right.png
new file mode 100644
index 0000000..2860e9a
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Chevron-right.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Circle-x.png b/src/qtdevicesettings/icons/ref/Circle-x.png
new file mode 100644
index 0000000..2bbfa97
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Circle-x.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Clock.png b/src/qtdevicesettings/icons/ref/Clock.png
new file mode 100644
index 0000000..1dae63e
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Clock.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Cogs.png b/src/qtdevicesettings/icons/ref/Cogs.png
new file mode 100644
index 0000000..feaae50
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Cogs.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Connections.png b/src/qtdevicesettings/icons/ref/Connections.png
new file mode 100644
index 0000000..b042d3c
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Connections.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Display.png b/src/qtdevicesettings/icons/ref/Display.png
new file mode 100644
index 0000000..cf1251a
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Display.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Flag.png b/src/qtdevicesettings/icons/ref/Flag.png
new file mode 100644
index 0000000..485ed48
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Flag.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Headphones.png b/src/qtdevicesettings/icons/ref/Headphones.png
new file mode 100644
index 0000000..9e5c483
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Headphones.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Heartbeat.png b/src/qtdevicesettings/icons/ref/Heartbeat.png
new file mode 100644
index 0000000..168135e
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Heartbeat.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Keyboard.png b/src/qtdevicesettings/icons/ref/Keyboard.png
new file mode 100644
index 0000000..c814e8e
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Keyboard.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Laptop.png b/src/qtdevicesettings/icons/ref/Laptop.png
new file mode 100644
index 0000000..465bb54
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Laptop.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Lock.png b/src/qtdevicesettings/icons/ref/Lock.png
new file mode 100644
index 0000000..6afb6ac
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Lock.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Microphone.png b/src/qtdevicesettings/icons/ref/Microphone.png
new file mode 100644
index 0000000..63cb500
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Microphone.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/MobilePhone.png b/src/qtdevicesettings/icons/ref/MobilePhone.png
new file mode 100644
index 0000000..b186c09
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/MobilePhone.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Mouse.png b/src/qtdevicesettings/icons/ref/Mouse.png
new file mode 100644
index 0000000..146305b
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Mouse.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Plus.png b/src/qtdevicesettings/icons/ref/Plus.png
new file mode 100644
index 0000000..391fe94
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Plus.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Power.png b/src/qtdevicesettings/icons/ref/Power.png
new file mode 100644
index 0000000..b54a084
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Power.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Settings.png b/src/qtdevicesettings/icons/ref/Settings.png
new file mode 100644
index 0000000..d8b255c
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Settings.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Tablet.png b/src/qtdevicesettings/icons/ref/Tablet.png
new file mode 100644
index 0000000..71b0065
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Tablet.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Volume_down.png b/src/qtdevicesettings/icons/ref/Volume_down.png
new file mode 100644
index 0000000..0773b1d
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Volume_down.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Volume_mute.png b/src/qtdevicesettings/icons/ref/Volume_mute.png
new file mode 100644
index 0000000..36ab384
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Volume_mute.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Volume_up.png b/src/qtdevicesettings/icons/ref/Volume_up.png
new file mode 100644
index 0000000..61eebbd
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Volume_up.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Wifi.png b/src/qtdevicesettings/icons/ref/Wifi.png
new file mode 100644
index 0000000..5d1e0d9
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Wifi.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Wifi1.png b/src/qtdevicesettings/icons/ref/Wifi1.png
new file mode 100644
index 0000000..f1b1489
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Wifi1.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Wifi2.png b/src/qtdevicesettings/icons/ref/Wifi2.png
new file mode 100644
index 0000000..a22b472
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Wifi2.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Wifi3.png b/src/qtdevicesettings/icons/ref/Wifi3.png
new file mode 100644
index 0000000..76d412b
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Wifi3.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Wifi4.png b/src/qtdevicesettings/icons/ref/Wifi4.png
new file mode 100644
index 0000000..5d1e0d9
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Wifi4.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/WifiAnim.png b/src/qtdevicesettings/icons/ref/WifiAnim.png
new file mode 100644
index 0000000..0694f63
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/WifiAnim.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/World.png b/src/qtdevicesettings/icons/ref/World.png
new file mode 100644
index 0000000..cf6eaf0
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/World.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/Wrench.png b/src/qtdevicesettings/icons/ref/Wrench.png
new file mode 100644
index 0000000..5b6e1c6
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/Wrench.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/ref/extra/Alert.png b/src/qtdevicesettings/icons/ref/extra/Alert.png
new file mode 100644
index 0000000..80914fc
--- /dev/null
+++ b/src/qtdevicesettings/icons/ref/extra/Alert.png
Binary files differ
diff --git a/src/qtdevicesettings/icons/scripts/cimage.sh b/src/qtdevicesettings/icons/scripts/cimage.sh
new file mode 100755
index 0000000..ae73622
--- /dev/null
+++ b/src/qtdevicesettings/icons/scripts/cimage.sh
@@ -0,0 +1,45 @@
+############################################################################
+##
+## Copyright (C) 2015 Digia Plc
+## All rights reserved.
+## For any questions to Digia, please use the contact form at
+## http://www.qt.io
+##
+## This file is part of Qt Enterprise Embedded.
+##
+## Licensees holding valid Qt Enterprise licenses may use this file in
+## accordance with the Qt Enterprise License Agreement provided with the
+## Software or, alternatively, in accordance with the terms contained in
+## a written agreement between you and Digia.
+##
+## If you have questions regarding the use of this file, please use
+## the contact form at http://www.qt.io
+##
+#############################################################################
+#!/bin/bash
+
+fullfile=$1
+filename=$(basename "$fullfile")
+extension="${filename##*.}"
+filename="${filename%.*}"
+
+color=$2
+if [ "$color" = "qt" ]; then
+ fill='rgb(128,195,66)'
+elif [ "$color" = "black" ]; then
+ fill='rgb(32,40,42)'
+elif [ "$color" = "white" ]; then
+ fill='rgb(255,255,255)'
+elif [ "$color" = "lightgray" ]; then
+ fill='rgb(214,214,214)'
+elif [ "$color" = "red" ]; then
+ fill='rgb(228,30,37)'
+elif [ "$color" = "yellow" ]; then
+ fill='rgb(250,206,32)'
+else
+ fill="black"
+fi
+
+separator="_"
+
+convert $fullfile -fuzz 100% -fill $fill -opaque black $filename$separator$color.$extension
diff --git a/src/qtdevicesettings/icons/scripts/cimages.sh b/src/qtdevicesettings/icons/scripts/cimages.sh
new file mode 100755
index 0000000..94ac1cd
--- /dev/null
+++ b/src/qtdevicesettings/icons/scripts/cimages.sh
@@ -0,0 +1,28 @@
+############################################################################
+##
+## Copyright (C) 2015 Digia Plc
+## All rights reserved.
+## For any questions to Digia, please use the contact form at
+## http://www.qt.io
+##
+## This file is part of Qt Enterprise Embedded.
+##
+## Licensees holding valid Qt Enterprise licenses may use this file in
+## accordance with the Qt Enterprise License Agreement provided with the
+## Software or, alternatively, in accordance with the terms contained in
+## a written agreement between you and Digia.
+##
+## If you have questions regarding the use of this file, please use
+## the contact form at http://www.qt.io
+##
+#############################################################################
+#!/bin/bash
+
+for dir in "$@"
+do
+ echo "$dir"
+ scripts/cimage.sh $dir qt
+ scripts/cimage.sh $dir black
+ scripts/cimage.sh $dir white
+ scripts/cimage.sh $dir lightgray
+done
diff --git a/src/qtdevicesettings/icons/scripts/rimage.sh b/src/qtdevicesettings/icons/scripts/rimage.sh
new file mode 100755
index 0000000..d98088f
--- /dev/null
+++ b/src/qtdevicesettings/icons/scripts/rimage.sh
@@ -0,0 +1,37 @@
+############################################################################
+##
+## Copyright (C) 2015 Digia Plc
+## All rights reserved.
+## For any questions to Digia, please use the contact form at
+## http://www.qt.io
+##
+## This file is part of Qt Enterprise Embedded.
+##
+## Licensees holding valid Qt Enterprise licenses may use this file in
+## accordance with the Qt Enterprise License Agreement provided with the
+## Software or, alternatively, in accordance with the terms contained in
+## a written agreement between you and Digia.
+##
+## If you have questions regarding the use of this file, please use
+## the contact form at http://www.qt.io
+##
+#############################################################################
+#!/bin/bash
+fullfile=$1
+filename=$(basename "$fullfile")
+extension="${filename##*.}"
+filename="${filename%.*}"
+
+postix="_1x"
+convert $fullfile -resize x16 $filename$postix.$extension
+postix="_2x"
+convert $fullfile -resize x32 $filename$postix.$extension
+postix="_3x"
+convert $fullfile -resize x48 $filename$postix.$extension
+postix="_4x"
+convert $fullfile -resize x64 $filename$postix.$extension
+postix="_5x"
+convert $fullfile -resize x80 $filename$postix.$extension
+postix="_6x"
+convert $fullfile -resize x96 $filename$postix.$extension
+
diff --git a/src/qtdevicesettings/icons/scripts/rimages.sh b/src/qtdevicesettings/icons/scripts/rimages.sh
new file mode 100755
index 0000000..7b76da8
--- /dev/null
+++ b/src/qtdevicesettings/icons/scripts/rimages.sh
@@ -0,0 +1,25 @@
+############################################################################
+##
+## Copyright (C) 2015 Digia Plc
+## All rights reserved.
+## For any questions to Digia, please use the contact form at
+## http://www.qt.io
+##
+## This file is part of Qt Enterprise Embedded.
+##
+## Licensees holding valid Qt Enterprise licenses may use this file in
+## accordance with the Qt Enterprise License Agreement provided with the
+## Software or, alternatively, in accordance with the terms contained in
+## a written agreement between you and Digia.
+##
+## If you have questions regarding the use of this file, please use
+## the contact form at http://www.qt.io
+##
+#############################################################################
+#!/bin/bash
+
+for dir in "$@"
+do
+ echo "$dir"
+ scripts/rimage.sh $dir
+done
diff --git a/src/qtdevicesettings/localesettingsplugin/Language.qml b/src/qtdevicesettings/localesettingsplugin/Language.qml
new file mode 100644
index 0000000..e630b00
--- /dev/null
+++ b/src/qtdevicesettings/localesettingsplugin/Language.qml
@@ -0,0 +1,111 @@
+/****************************************************************************
+**
+** 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.locale 1.0
+
+Item {
+ id: root
+ property string title: qsTr("Language and Region")
+
+ Column {
+ id: content
+ anchors.fill: parent
+ anchors.margins: Math.round(40 * Flat.FlatStyle.scaleFactor)
+
+ GroupBox {
+ id: groupBox
+ width: parent.width
+ title: qsTr("Regional Format")
+ Layout.fillWidth: true
+ property var currentRegion: Qt.locale(LocaleManager.locale)
+
+ ColumnLayout {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ width: parent.width
+ Layout.fillWidth: true
+
+ Component {
+ id: regionSelect
+ RegionSelect { }
+ }
+
+ GroupBox {
+ width: parent.width
+ title: {
+ if (groupBox.currentRegion.name === "C" || groupBox.currentRegion.name === "POSIX") {
+ return qsTr("Default");
+ }
+ else if (groupBox.currentRegion.name !== "") {
+ return qsTr("%L1/%L2").arg(groupBox.currentRegion.nativeLanguageName).arg(groupBox.currentRegion.nativeCountryName)
+ }
+ else {
+ return qsTr("Region not set");
+ }
+ }
+
+ flat: true
+
+ ColumnLayout {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ Layout.fillWidth: true
+ width: parent.width
+
+ TextLabel {
+ text: Date().toLocaleString(groupBox.currentRegion)
+ }
+
+ TextLabel {
+ text: Number(2343.34).toLocaleString(groupBox.currentRegion)
+ }
+
+ TextLabel {
+ text: Number(41334.34).toLocaleCurrencyString(groupBox.currentRegion)
+ }
+ }
+ }
+
+ Button {
+ text: qsTr("Change region")
+ onClicked: stackView.push(regionSelect)
+ }
+ }
+ }
+ }
+}
diff --git a/src/qtdevicesettings/localesettingsplugin/RegionSelect.qml b/src/qtdevicesettings/localesettingsplugin/RegionSelect.qml
new file mode 100644
index 0000000..9247630
--- /dev/null
+++ b/src/qtdevicesettings/localesettingsplugin/RegionSelect.qml
@@ -0,0 +1,96 @@
+/****************************************************************************
+**
+** 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.locale 1.0
+
+Item {
+ id: root
+ property string title: qsTr("Select language")
+
+ Component.onCompleted: country.text = LocaleFilter.filter
+
+ Column {
+ id: content
+ anchors.fill: parent
+ anchors.margins: Math.round(20 * Flat.FlatStyle.scaleFactor)
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+
+ TextLabel {
+ text: qsTr("Search region: ")
+ }
+
+ TextField {
+ id: country
+ text: ""
+ onTextChanged: LocaleFilter.filter = country.text
+ }
+ }
+
+ TableView {
+ width: parent.width
+ height: Math.round(parent.height - 40 * Flat.FlatStyle.scaleFactor)
+ Layout.fillWidth: true
+ model: LocaleFilter
+ headerVisible: true
+
+ TableViewColumn {
+ role: "language"
+ title: qsTr("Language")
+ width: Math.round(parent.width * 0.66)
+ }
+
+ TableViewColumn {
+ role: "country"
+ title: qsTr("Region")
+ width: Math.round(parent.width * 0.33)
+ }
+
+ onClicked: {
+ var val = model.itemFromRow(row);
+ if (val !== "") {
+ LocaleManager.locale = val;
+ stackView.pop();
+ }
+ }
+ }
+ }
+}
diff --git a/src/qtdevicesettings/localesettingsplugin/icons.qrc b/src/qtdevicesettings/localesettingsplugin/icons.qrc
new file mode 100644
index 0000000..af8a564
--- /dev/null
+++ b/src/qtdevicesettings/localesettingsplugin/icons.qrc
@@ -0,0 +1,4 @@
+<RCC>
+ <qresource prefix="/">
+ </qresource>
+</RCC>
diff --git a/src/qtdevicesettings/localesettingsplugin/locale.xml b/src/qtdevicesettings/localesettingsplugin/locale.xml
new file mode 100644
index 0000000..b722456
--- /dev/null
+++ b/src/qtdevicesettings/localesettingsplugin/locale.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<node name="/Service" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+<node>
+ <interface name="org.freedesktop.locale1">
+ <property name="Locale" type="as" access="read"/>
+ <method name="SetLocale">
+ <arg name="locale" type="as" direction="in"/>
+ <arg name="user_interaction" type="b" direction="in"/>
+ </method>
+ </interface>
+</node>
+
diff --git a/src/qtdevicesettings/localesettingsplugin/localefiltermodel.cpp b/src/qtdevicesettings/localesettingsplugin/localefiltermodel.cpp
new file mode 100644
index 0000000..027caba
--- /dev/null
+++ b/src/qtdevicesettings/localesettingsplugin/localefiltermodel.cpp
@@ -0,0 +1,96 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#include "localemodel.h"
+#include "localefiltermodel.h"
+
+LocaleFilterModel::LocaleFilterModel(QObject* parent)
+ :QSortFilterProxyModel(parent)
+{
+ connect(this, &LocaleFilterModel::filterChanged, this, &LocaleFilterModel::invalidate);
+}
+
+LocaleFilterModel::~LocaleFilterModel()
+{
+
+}
+
+QString LocaleFilterModel::filter() const
+{
+ return m_filter;
+}
+
+void LocaleFilterModel::setFilter(const QString& aFilter)
+{
+ m_filter = aFilter;
+ emit filterChanged();
+}
+
+bool LocaleFilterModel::filterAcceptsRow( int source_row, const QModelIndex& source_parent ) const
+{
+ bool ret = false;
+ if (this->sourceModel())
+ {
+ QModelIndex index = this->sourceModel()->index( source_row, 0, source_parent );
+ if (index.isValid())
+ {
+ QVariant nameRole = index.data(LocaleModel::Country);
+ if (nameRole.isValid())
+ {
+ QString name = nameRole.toString();
+ if (name.contains(m_filter, Qt::CaseInsensitive)) {
+ ret = true;
+ }
+ }
+ }
+ }
+ return ret;
+}
+
+QVariant LocaleFilterModel::itemFromRow(const int row) const
+{
+ QModelIndex idx = index(row, 0);
+ QModelIndex mapped = mapToSource(idx);
+ if (mapped.isValid())
+ {
+ QVariant nameRole = mapped.data(LocaleModel::Code);
+ if (nameRole.isValid())
+ {
+ return nameRole;
+ }
+ }
+ return QVariant::fromValue(QString(""));
+}
+
diff --git a/src/qtdevicesettings/localesettingsplugin/localefiltermodel.h b/src/qtdevicesettings/localesettingsplugin/localefiltermodel.h
new file mode 100644
index 0000000..f4dce1b
--- /dev/null
+++ b/src/qtdevicesettings/localesettingsplugin/localefiltermodel.h
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#ifndef LOCALEFILTERMODEL_H
+#define LOCALEFILTERMODEL_H
+
+#include <QSortFilterProxyModel>
+
+class LocaleFilterModel : public QSortFilterProxyModel
+{
+ Q_OBJECT
+ Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
+public:
+ explicit LocaleFilterModel(QObject* parent);
+ virtual ~LocaleFilterModel();
+ bool filterAcceptsRow( int source_row, const QModelIndex& source_parent ) const override;
+ QString filter() const;
+ void setFilter(const QString& aFilter);
+ Q_INVOKABLE QVariant itemFromRow(const int row) const;
+signals:
+ void filterChanged();
+private:
+ QString m_filter;
+
+};
+
+#endif // LOCALEFILTERMODEL_H
diff --git a/src/qtdevicesettings/localesettingsplugin/localemodel.cpp b/src/qtdevicesettings/localesettingsplugin/localemodel.cpp
new file mode 100644
index 0000000..be24e02
--- /dev/null
+++ b/src/qtdevicesettings/localesettingsplugin/localemodel.cpp
@@ -0,0 +1,167 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+#include <QLocale>
+#include <QQmlPropertyMap>
+#include <QFuture>
+#include <QFutureWatcher>
+#include <QThread>
+#include <QtConcurrent/QtConcurrentRun>
+#include "localemodel.h"
+
+
+LocaleItem::LocaleItem(const QLocale& locale, QObject *parent)
+ :QObject(parent)
+{
+ m_code = locale.name();
+ m_country = locale.nativeCountryName();
+ if (m_country.isEmpty()) {
+ m_country = locale.countryToString(locale.country());
+ }
+
+ m_language = locale.nativeLanguageName();
+ if (m_language.isEmpty()) {
+ m_language = locale.languageToString(locale.language());
+ }
+}
+
+QString LocaleItem::language() const
+{
+ return m_language;
+}
+
+QString LocaleItem::country() const
+{
+ return m_country;
+}
+
+QString LocaleItem::code() const
+{
+ return m_code;
+}
+
+LocaleModel::LocaleModel(QObject *parent)
+ : QAbstractListModel(parent)
+{
+ m_roleNames.insert(Qt::UserRole, "modelData");
+ m_roleNames.insert(Country, "country");
+ m_roleNames.insert(Language, "language");
+ m_roleNames.insert(Code, "code");
+
+ QFutureWatcher<void> *watcher = new QFutureWatcher<void>(this);
+ QFuture<void> future = QtConcurrent::run(LocaleModel::generateModel, this);
+ watcher->setFuture(future);
+ connect(watcher, SIGNAL(finished()), this, SLOT(modelReady()));
+}
+
+void LocaleModel::modelReady()
+{
+ beginResetModel();
+ sort(0);
+ endResetModel();
+}
+
+void LocaleModel::generateModel(LocaleModel* model)
+{
+ QList<QLocale> allLocales = QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript, QLocale::AnyCountry);
+
+ for (const QLocale &locale : allLocales) {
+ if (locale.name() != "C") {
+ LocaleItem *l = new LocaleItem(locale);
+ l->moveToThread(model->thread());
+ QMetaObject::invokeMethod(model, "addNewItem", Q_ARG( QObject*, qobject_cast<QObject*>(l)));
+ }
+ }
+
+}
+
+void LocaleModel::addNewItem(QObject *item)
+{
+ beginInsertRows(QModelIndex(), m_items.count(), m_items.count());
+ LocaleItem* newItem = qobject_cast<LocaleItem*>(item);
+ if (newItem)
+ m_items.append(newItem);
+ endInsertRows();
+}
+
+LocaleModel::~LocaleModel()
+{
+ qDeleteAll(m_items);
+}
+
+QHash<int, QByteArray> LocaleModel::roleNames() const
+{
+ return m_roleNames;
+}
+
+int LocaleModel::rowCount(const QModelIndex & parent) const
+{
+ Q_UNUSED(parent);
+ return m_items.count();
+}
+
+QVariant LocaleModel::data(const QModelIndex & index, int role) const
+{
+ if (!index.isValid()) return QVariant();
+
+ LocaleItem *item = m_items[index.row()];
+
+ switch (role) {
+ case Country:
+ return item->country();
+ break;
+ case Language:
+ return item->language();
+ break;
+ case Code:
+ return item->code();
+ break;
+ default:
+ return "";
+ }
+}
+
+bool LocaleModel::variantLessThan(const LocaleItem* v1, const LocaleItem* v2)
+{
+ return v1->language() < v2->language();
+}
+
+void LocaleModel::sort(int column, Qt::SortOrder order)
+{
+ Q_UNUSED(column);
+ Q_UNUSED(order);
+ qSort(m_items.begin(), m_items.end(), LocaleModel::variantLessThan);
+}
diff --git a/src/qtdevicesettings/localesettingsplugin/localemodel.h b/src/qtdevicesettings/localesettingsplugin/localemodel.h
new file mode 100644
index 0000000..b83286e
--- /dev/null
+++ b/src/qtdevicesettings/localesettingsplugin/localemodel.h
@@ -0,0 +1,96 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#ifndef LOCALEMODEL_H
+#define LOCALEMODEL_H
+
+#include <QObject>
+#include <QAbstractListModel>
+#include <QLocale>
+#include <QMutex>
+
+class LocaleItem : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString code READ code CONSTANT)
+ Q_PROPERTY(QString country READ country CONSTANT)
+ Q_PROPERTY(QString language READ language CONSTANT)
+public:
+ explicit LocaleItem(const QLocale &locale, QObject *parent=0);
+ QString country() const;
+ QString language() const;
+ QString code() const;
+
+private:
+ QString m_country;
+ QString m_language;
+ QString m_code;
+};
+
+class LocaleModel : public QAbstractListModel
+{
+ Q_OBJECT
+
+public:
+ explicit LocaleModel(QObject *parent=0);
+ virtual ~LocaleModel();
+ // from QAbstractItemModel
+ int rowCount(const QModelIndex & parent = QModelIndex()) const;
+ QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
+ QHash<int, QByteArray> roleNames() const;
+ Q_INVOKABLE QVariant itemFromRow(const int row) const;
+ void sort(int column, Qt::SortOrder order=Qt::AscendingOrder);
+ static bool variantLessThan(const LocaleItem* v1, const LocaleItem* v2);
+
+ enum Roles {
+ Language = Qt::DisplayPropertyRole,
+ Country = Qt::UserRole,
+ Code
+ };
+
+ static void generateModel(LocaleModel* model);
+
+signals:
+ void addItem(LocaleItem* item);
+
+private slots:
+ void addNewItem(QObject* item);
+ void modelReady();
+
+private:
+ QList<LocaleItem*> m_items;
+ QHash<int, QByteArray> m_roleNames;
+};
+#endif // LOCALEMODEL_H
diff --git a/src/qtdevicesettings/localesettingsplugin/localesettingsplugin.pro b/src/qtdevicesettings/localesettingsplugin/localesettingsplugin.pro
new file mode 100644
index 0000000..8ff9157
--- /dev/null
+++ b/src/qtdevicesettings/localesettingsplugin/localesettingsplugin.pro
@@ -0,0 +1,36 @@
+TEMPLATE = lib
+CONFIG += plugin
+QT += qml dbus
+
+uri = com.theqtcompany.settings.locale
+
+DBUS_INTERFACES = locale.xml
+
+DESTDIR = imports/Locale
+TARGET = localesettingsplugin
+
+HEADERS = \
+ systemlocale.h \
+ systemlocale_p.h \
+ localemodel.h \
+ localefiltermodel.h
+SOURCES += plugin.cpp \
+ systemlocale.cpp \
+ localemodel.cpp \
+ localefiltermodel.cpp
+
+pluginfiles.files += \
+ qmldir \
+ Language.qml \
+ RegionSelect.qml
+
+installPath = $$[QT_INSTALL_QML]/$$replace(uri, \\., /)
+
+target.path = $$installPath
+pluginfiles.path += $$installPath
+INSTALLS += target pluginfiles
+
+
+RESOURCES += \
+ icons.qrc
+
diff --git a/src/qtdevicesettings/localesettingsplugin/plugin.cpp b/src/qtdevicesettings/localesettingsplugin/plugin.cpp
new file mode 100644
index 0000000..a050615
--- /dev/null
+++ b/src/qtdevicesettings/localesettingsplugin/plugin.cpp
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+#include <QtQml/QQmlExtensionPlugin>
+#include <QtQml/qqml.h>
+#include <qcoreapplication.h>
+#include <QQmlEngine>
+#include <QQmlContext>
+
+#include "systemlocale.h"
+#include "localemodel.h"
+#include "localefiltermodel.h"
+
+template <typename T>
+QObject *instance(QQmlEngine *engine, QJSEngine *) {
+ T *t = new T(engine);
+ t->setObjectName(T::staticMetaObject.className());
+ return t;
+}
+
+class LanguageSettingsQmlPlugin : public QQmlExtensionPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
+
+public:
+ void registerTypes(const char *uri)
+ {
+ qmlRegisterSingletonType<SystemLocale>(uri, 1, 0, "LocaleManager", &instance<SystemLocale>);
+ }
+
+ void initializeEngine(QQmlEngine * engine, const char * uri)
+ {
+ Q_ASSERT(QLatin1String(uri) == QLatin1String("com.theqtcompany.settings.locale"));
+ LocaleModel*localeModel = new LocaleModel(engine);
+ LocaleFilterModel* filter = new LocaleFilterModel(engine);
+ filter->setSourceModel(localeModel);
+ engine->rootContext()->setContextProperty("LocaleFilter", filter);
+ }
+};
+
+#include "plugin.moc"
diff --git a/src/qtdevicesettings/localesettingsplugin/qml.qrc b/src/qtdevicesettings/localesettingsplugin/qml.qrc
new file mode 100644
index 0000000..27fef3d
--- /dev/null
+++ b/src/qtdevicesettings/localesettingsplugin/qml.qrc
@@ -0,0 +1,6 @@
+<RCC>
+ <qresource prefix="/">
+ <file>Language.qml</file>
+ <file>RegionSelect.qml</file>
+ </qresource>
+</RCC>
diff --git a/src/qtdevicesettings/localesettingsplugin/qmldir b/src/qtdevicesettings/localesettingsplugin/qmldir
new file mode 100644
index 0000000..e915482
--- /dev/null
+++ b/src/qtdevicesettings/localesettingsplugin/qmldir
@@ -0,0 +1,3 @@
+module com.theqtcompany.settings.locale
+Language 1.0 Language.qml
+plugin localesettingsplugin
diff --git a/src/qtdevicesettings/localesettingsplugin/systemlocale.cpp b/src/qtdevicesettings/localesettingsplugin/systemlocale.cpp
new file mode 100644
index 0000000..21a1105
--- /dev/null
+++ b/src/qtdevicesettings/localesettingsplugin/systemlocale.cpp
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#include <QLocale>
+#include "systemlocale.h"
+#include "systemlocale_p.h"
+
+SystemLocale::SystemLocale(QObject *parent)
+ :QObject(parent)
+ ,d_ptr(new SystemLocalePrivate(this))
+{
+}
+
+QString SystemLocale::locale() const
+{
+ Q_D(const SystemLocale);
+ return d->locale();
+}
+
+void SystemLocale::setLocale(const QString& aLocale)
+{
+ Q_D(SystemLocale);
+ d->setLocale(aLocale);
+ emit localeChanged();
+}
diff --git a/src/qtdevicesettings/localesettingsplugin/systemlocale.h b/src/qtdevicesettings/localesettingsplugin/systemlocale.h
new file mode 100644
index 0000000..c02fdd3
--- /dev/null
+++ b/src/qtdevicesettings/localesettingsplugin/systemlocale.h
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#ifndef LOCALE_H
+#define LOCALE_H
+
+#include <QObject>
+
+class SystemLocalePrivate;
+
+class SystemLocale : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString locale READ locale WRITE setLocale NOTIFY localeChanged)
+public:
+ explicit SystemLocale(QObject *parent = 0);
+ QString locale() const;
+ void setLocale(const QString& aLocale);
+signals:
+ void localeChanged();
+public slots:
+
+protected:
+ SystemLocalePrivate *d_ptr;
+
+ Q_DISABLE_COPY(SystemLocale)
+ Q_DECLARE_PRIVATE(SystemLocale)
+};
+
+#endif // LOCALE_H
diff --git a/src/qtdevicesettings/localesettingsplugin/systemlocale_p.h b/src/qtdevicesettings/localesettingsplugin/systemlocale_p.h
new file mode 100644
index 0000000..417b958
--- /dev/null
+++ b/src/qtdevicesettings/localesettingsplugin/systemlocale_p.h
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#ifndef LOCALE_P_H
+#define LOCALE_P_H
+
+#include "systemlocale.h"
+#include "locale_interface.h"
+
+class SystemLocalePrivate
+{
+ Q_DECLARE_PUBLIC(SystemLocale)
+public:
+ SystemLocalePrivate(SystemLocale *qq)
+ :q_ptr(qq)
+ {
+ m_localeInterface = new OrgFreedesktopLocale1Interface(QStringLiteral("org.freedesktop.locale1"),
+ QStringLiteral("/org/freedesktop/locale1"),
+ QDBusConnection::systemBus(), qq);
+
+ QStringList locale = m_localeInterface->locale();
+ foreach (QString l, locale) {
+ QStringList nameValue = l.split('=');
+ if (nameValue.length() == 2)
+ m_localeCache[nameValue.at(0)] = nameValue.at(1);
+ }
+ }
+
+ QString locale() const {
+ return m_localeCache["LANG"];
+ }
+
+ void setLocale(const QString& aLocale) {
+ m_localeCache["LANG"] = aLocale;
+ updateLocale();
+ }
+
+ void updateLocale() {
+ QStringList newLocale;
+ QMap<QString, QString>::iterator i;
+ for (i = m_localeCache.begin(); i != m_localeCache.end(); ++i) {
+ QString val = i.key() + "=" + i.value();
+ newLocale.append(val);
+ }
+ m_localeInterface->SetLocale(newLocale, true);
+ }
+
+
+private:
+ QMap<QString, QString> m_localeCache;
+ OrgFreedesktopLocale1Interface *m_localeInterface;
+ SystemLocale *q_ptr;
+};
+
+#endif // LOCALE_P_H
diff --git a/src/qtdevicesettings/networksettingsplugin/icons.qrc b/src/qtdevicesettings/networksettingsplugin/icons.qrc
new file mode 100644
index 0000000..af8a564
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/icons.qrc
@@ -0,0 +1,4 @@
+<RCC>
+ <qresource prefix="/">
+ </qresource>
+</RCC>
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 } } )
+ }
+ }
+ }
+}
+
diff --git a/src/qtdevicesettings/networksettingsplugin/networksettings/connman/connman_manager.xml b/src/qtdevicesettings/networksettingsplugin/networksettings/connman/connman_manager.xml
new file mode 100644
index 0000000..5c52b27
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/networksettings/connman/connman_manager.xml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="utf-8"?>
+<node name="/Manager" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+ <interface name="net.connman.Manager">
+
+ <method name="GetProperties" tp:name-for-bindings="Get_Properties">
+ <arg name="properties" type="a{sv}" direction="out"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantMap"/>
+ </method>
+
+ <method name="SetProperty" tp:name-for-bindings="Set_Property">
+ <arg name="name" type="s"/>
+ <arg name="value" type="v"/>
+ </method>
+
+ <method name="GetTechnologies" tp:name-for-bindings="Get_Technologies">
+ <arg name="technologies" type="a(oa{sv})" direction="out"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="ConnmanMapList"/>
+ </method>
+
+ <method name="GetServices" tp:name-for-bindings="Get_Services">
+ <arg name="services" type="a(oa{sv})" direction="out"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="ConnmanMapList"/>
+ </method>
+
+ <method name="GetSavedServices" tp:name-for-bindings="Get_Saved_Services">
+ <arg name="services" type="a(oa{sv})" direction="out"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="ConnmanMapList"/>
+ </method>
+
+ <method name="RemoveSavedService" tp:name-for-bindings="Remove_Saved_Services">
+ <arg name="identifier" type="s" direction="in"/>
+ </method>
+
+ <method name="RegisterAgent" tp:name-for-bindings="Register_Agent">
+ <arg name="path" type="o"/>
+ </method>
+
+ <method name="UnregisterAgent" tp:name-for-bindings="Unregister_Agent">
+ <arg name="path" type="o"/>
+ </method>
+
+ <method name="RegisterCounter" tp:name-for-bindings="Register_Counter">
+ <arg name="path" type="o"/>
+ <arg name="accuracy" type="u"/>
+ <arg name="period" type="u"/>
+ </method>
+
+ <method name="UnregisterCounter" tp:name-for-bindings="Unregister_Counter">
+ <arg name="path" type="o"/>
+ </method>
+
+ <method name="ResetCounters" tp:name-for-bindings="Reset_Counters">
+ <arg name="type" type="s"/>
+ </method>
+
+ <method name="CreateSession" tp:name-for-bindings="Create_Session">
+ <arg name="settings" type="a{sv}"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
+ <arg name="notifier" type="o"/>
+ <arg name="session" type="o" direction="out"/>
+ </method>
+
+ <method name="DestroySession" tp:name-for-bindings="Destroy_Session">
+ <arg name="session" type="o"/>
+ </method>
+
+ <method name="RequestPrivateNetwork" tp:name-for-bindings="Request_Private_Network">
+ <arg name="options" type="a{sv}"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
+ <arg name="path" type="o" direction="out"/>
+ <arg name="dict" type="a{sv}" direction="out"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.Out1" value="QVariantMap"/>
+ <arg name="fd" type="i" direction="out"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QVariantMap"/>
+ </method>
+
+ <method name="ReleasePrivateNetwork" tp:name-for-bindings="Release_Private_Network">
+ <arg name="path" type="o"/>
+ </method>
+
+ <signal name="NetworkTypeAdded" tp:name-for-bindings="NetworkType_Added">
+ <arg name="technology" type="o"/>
+ <arg name="properties" type="a{sv}"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.In1" value="QVariantMap"/>
+ </signal>
+
+ <signal name="NetworkTypeRemoved" tp:name-for-bindings="NetworkType_Removed">
+ <arg name="technology" type="o"/>
+ </signal>
+
+ <signal name="ServicesChanged" tp:name-for-bindings="Services_Changed">
+ <arg name="changed" type="a(oa{sv})"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="ConnmanMapList"/>
+ <arg name="removed" type="ao"/>
+ </signal>
+
+ <signal name="SavedServicesChanged" tp:name-for-bindings="SavedServices_Changed">
+ <arg name="changed" type="a(oa{sv})"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="ConnmanMapList"/>
+ </signal>
+
+ <signal name="PropertyChanged" tp:name-for-bindings="Property_Changed">
+ <arg name="name" type="s"/>
+ <arg name="value" type="v"/>
+ </signal>
+
+ </interface>
+</node>
diff --git a/src/qtdevicesettings/networksettingsplugin/networksettings/connman/connman_service.xml b/src/qtdevicesettings/networksettingsplugin/networksettings/connman/connman_service.xml
new file mode 100644
index 0000000..c41aca4
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/networksettings/connman/connman_service.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<node name="/Service" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+ <interface name="net.connman.Service">
+
+ <method name="GetProperties" tp:name-for-bindings="Get_Properties">
+ <arg name="properties" type="a{sv}" direction="out"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantMap"/>
+ </method>
+
+ <method name="SetProperty" tp:name-for-bindings="Set_Property">
+ <arg name="name" type="s"/>
+ <arg name="value" type="v"/>
+ </method>
+
+ <method name="ClearProperty" tp:name-for-bindings="Clear_Property">
+ <arg name="name" type="s" />
+ </method>
+
+ <method name="Connect" tp:name-for-bindings="Connect" />
+
+ <method name="Disconnect" tp:name-for-bindings="Disconnect" />
+
+ <method name="Remove" tp:name-for-bindings="Remove" />
+
+ <method name="MoveBefore" tp:name-for-bindings="Move_Before">
+ <arg name="service" type="o"/>
+ </method>
+
+ <method name="MoveAfter" tp:name-for-bindings="Move_After">
+ <arg name="service" type="o"/>
+ </method>
+
+ <method name="ResetCounters" tp:name-for-bindings="Reset_Counters" />
+
+ <signal name="PropertyChanged" tp:name-for-bindings="Property_Changed">
+ <arg name="name" type="s"/>
+ <arg name="value" type="v"/>
+ </signal>
+
+ </interface>
+</node>
diff --git a/src/qtdevicesettings/networksettingsplugin/networksettings/connman/connman_technology.xml b/src/qtdevicesettings/networksettingsplugin/networksettings/connman/connman_technology.xml
new file mode 100644
index 0000000..08d780f
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/networksettings/connman/connman_technology.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<node name="/Service" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+ <interface name="net.connman.Technology">
+
+ <method name="GetProperties" tp:name-for-bindings="Get_Properties">
+ <arg name="properties" type="a{sv}" direction="out"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantMap"/>
+ </method>
+
+ <method name="SetProperty" tp:name-for-bindings="Set_Property">
+ <arg name="name" type="s"/>
+ <arg name="value" type="v"/>
+ </method>
+
+ <method name="Scan" tp:name-for-bindings="Scan"/>
+
+ <signal name="PropertyChanged" tp:name-for-bindings="Property_Changed">
+ <arg name="name" type="s"/>
+ <arg name="value" type="v"/>
+ </signal>
+
+ </interface>
+</node>
diff --git a/src/qtdevicesettings/networksettingsplugin/networksettings/connman/networksettingsmanager_linux.cpp b/src/qtdevicesettings/networksettingsplugin/networksettings/connman/networksettingsmanager_linux.cpp
new file mode 100644
index 0000000..c4973ea
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/networksettings/connman/networksettingsmanager_linux.cpp
@@ -0,0 +1,583 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#include <QQmlPropertyMap>
+
+#include "networkconfig.h"
+#include "networksettingsmanager_linux_p.h"
+#include "connman_manager_interface.cpp"
+#include "moc_connman_manager_interface.cpp"
+#include "connman_service_interface.h"
+#include "connman_technology_interface.h"
+
+const QString PropertyIPv4("IPv4");
+const QString PropertyIPv4Config("IPv4.Configuration");
+const QString PropertyIPv6("IPv6");
+const QString PropertyIPv6Config("IPv6.Configuration");
+const QString PropertyNameservers("Nameservers");
+const QString PropertyNameserversConfig("Nameservers.Configuration");
+const QString PropertyDomains("Domains");
+const QString PropertyDomainsConfig("Domains.Configuration");
+const QString PropertyProxy("Proxy");
+const QString PropertyProxyConfig("Proxy.Configuration");
+const QString PropertyState("State");
+const QString PropertyName("Name");
+const QString PropertyType("Type");
+const QString PropertyConnected("Connected");
+const QString PropertyPowered("Powered");
+const QString PropertyAddress("Address");
+const QString PropertyNetMask("Netmask");
+const QString PropertyGateway("Gateway");
+const QString PropertyPrefixLength("PrefixLength");
+const QString PropertyMethod("Method");
+const QString PropertyPrivacy("Privacy");
+const QString PropertyUrl("Url");
+const QString PropertyServers("Servers");
+const QString PropertyExcludes("Excludes");
+const QString AttributeAuto("auto");
+const QString AttributeDhcp("dhcp");
+const QString AttributeManual("manual");
+const QString AttributeOff("off");
+const QString AttributeDisabled("disabled");
+const QString AttributeEnabled("enabled");
+const QString AttributePreferred("preferred");
+const QString AttributeDirect("direct");
+const QString AttributeWifi("wifi");
+const QString AttributeEthernet("ethernet");
+const QString AttributeIdle("idle");
+const QString AttributeFailure("failure");
+const QString AttributeAssociation("association");
+const QString AttributeConfiguration("configuration");
+const QString AttributeReady("ready");
+const QString AttributeDisconnect("disconnect");
+const QString AttributeOneline("online");
+
+//Conversion operations for datatypes
+const QDBusArgument &operator>>(const QDBusArgument &argument, ConnmanMap &obj)
+{
+ argument.beginStructure();
+ argument >> obj.objectPath >> obj.propertyMap;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator<<(QDBusArgument &argument, const ConnmanMap &obj)
+{
+ argument.beginStructure();
+ argument << obj.objectPath << obj.propertyMap;
+ argument.endStructure();
+ return argument;
+}
+
+const QVariantMap &operator>>(const QVariantMap &argument, IPv4Config &obj)
+{
+ obj.setAddress(argument[PropertyAddress].toString());
+ obj.setMask(argument[PropertyNetMask].toString());
+ obj.setGateway(argument[PropertyGateway].toString());
+
+ QString method = argument[PropertyMethod].toString();
+
+ if (method == AttributeDhcp) {
+ obj.setMethod(IPv4Config::Dhcp);
+ }
+ else if (method == AttributeManual) {
+ obj.setMethod(IPv4Config::Manual);
+ }
+ else if (method == AttributeOff) {
+ obj.setMethod(IPv4Config::Off);
+ }
+ else {
+ obj.setMethod(IPv4Config::Off);
+ }
+ return argument;
+}
+
+const QVariantMap &operator<<(QVariantMap &argument, const IPv4Config &obj)
+{
+ argument.insert(PropertyAddress, QVariant::fromValue(obj.address()));
+
+ argument.insert(PropertyNetMask, QVariant::fromValue(obj.mask()));
+
+ argument.insert(PropertyGateway, QVariant::fromValue(obj.gateway()));
+
+ QString method;
+ switch (obj.method()) {
+ case IPv4Config::Dhcp:
+ method = AttributeDhcp;
+ break;
+ case IPv4Config::Manual:
+ method = AttributeManual;
+ break;
+ case IPv4Config::Off:
+ method = AttributeOff;
+ break;
+ default:
+ break;
+ }
+ argument.insert(PropertyMethod, QVariant::fromValue(method));
+ return argument;
+}
+
+const QVariantMap &operator>>(const QVariantMap &argument, IPv6Config &obj)
+{
+ obj.setAddress(argument[PropertyAddress].toString());
+ obj.setGateway(argument[PropertyGateway].toString());
+ obj.setPrefixLength(argument[PropertyPrefixLength].toInt());
+ QString method = argument[PropertyMethod].toString();
+ if (method == AttributeAuto) {
+ obj.setMethod(IPv6Config::Auto);
+ }
+ else if (method == AttributeManual) {
+ obj.setMethod(IPv6Config::Manual);
+ }
+ else if (method == AttributeOff) {
+ obj.setMethod(IPv6Config::Off);
+ }
+ QString privacy = argument[PropertyPrivacy].toString();
+
+ if (privacy == AttributeDisabled) {
+ obj.setPrivacy(IPv6Config::Disabled);
+ }
+ else if (privacy == AttributeEnabled) {
+ obj.setPrivacy(IPv6Config::Enabled);
+ }
+ else if (privacy == AttributePreferred) {
+ obj.setPrivacy(IPv6Config::Preferred);
+ }
+ return argument;
+}
+
+const QVariantMap &operator<<(QVariantMap &argument, const IPv6Config &obj)
+{
+ argument.insert(PropertyAddress, QVariant::fromValue(obj.address()));
+ argument.insert(PropertyGateway, QVariant::fromValue(obj.address()));
+ argument.insert(PropertyPrefixLength, QVariant::fromValue(obj.prefixLength()));
+
+ QString method;
+ switch (obj.method()) {
+ case IPv6Config::Auto:
+ method = AttributeAuto;
+ break;
+ case IPv6Config::Manual:
+ method = AttributeManual;
+ break;
+ case IPv6Config::Off:
+ method = AttributeOff;
+ break;
+ default:
+ break;
+ }
+ argument.insert(PropertyMethod, QVariant::fromValue(method));
+
+ QString privacy;
+ switch (obj.privacy()) {
+ case IPv6Config::Disabled:
+ method = AttributeDisabled;
+ break;
+ case IPv6Config::Enabled:
+ method = AttributeEnabled;
+ break;
+ case IPv6Config::Preferred:
+ method = AttributePreferred;
+ break;
+ default:
+ break;
+ }
+ argument.insert(PropertyPrivacy, QVariant::fromValue(privacy));
+
+ return argument;
+}
+
+
+const QVariantMap &operator>>(const QVariantMap &argument, ProxyConfig &obj)
+{
+ QString method = argument[PropertyMethod].toString();
+ if (method == AttributeDirect) {
+ obj.setMethod(ProxyConfig::Direct);
+ }
+ else if (method == AttributeAuto) {
+ obj.setMethod(ProxyConfig::Auto);
+ }
+ else if (method == AttributeManual) {
+ obj.setMethod(ProxyConfig::Manual);
+ }
+
+ QString urlStr = argument[PropertyUrl].toString();
+ obj.setUrl(QUrl(urlStr));
+
+ obj.setServers(argument[PropertyServers].toStringList());
+ obj.setExcludes(argument[PropertyExcludes].toStringList());
+
+ return argument;
+}
+
+const QVariantMap &operator<<(QVariantMap &argument, const ProxyConfig &obj)
+{
+ QString method;
+ switch (obj.method()) {
+ case ProxyConfig::Direct:
+ method = AttributeDirect;
+ break;
+ case ProxyConfig::Auto:
+ method = AttributeAuto;
+ break;
+ case ProxyConfig::Manual:
+ method = AttributeManual;
+ break;
+ default:
+ break;
+ }
+ argument.insert(PropertyMethod, QVariant::fromValue(method));
+ argument.insert(PropertyUrl, QVariant::fromValue(obj.url().toString()));
+ argument.insert(PropertyServers, QVariant::fromValue(obj.servers()));
+ argument.insert(PropertyServers, QVariant::fromValue(obj.excludes()));
+
+ return argument;
+}
+
+const QString &operator>>(const QString &argument, NetworkType &obj)
+{
+ if (argument == AttributeEthernet) {
+ obj.setType(NetworkType::Wired);
+ }
+ else if (argument == AttributeWifi) {
+ obj.setType(NetworkType::Wifi);
+ }
+ else {
+ obj.setType(NetworkType::Unknown);
+ }
+
+ return argument;
+}
+
+const QString &operator>>(const QString &argument, NetworkState &obj)
+{
+ if (argument == AttributeIdle) {
+ obj.setState(NetworkState::Idle);
+ }
+ else if (argument == AttributeFailure) {
+ obj.setState(NetworkState::Failure);
+ }
+ else if (argument == AttributeAssociation) {
+ obj.setState(NetworkState::Association);
+ }
+ else if (argument == AttributeConfiguration) {
+ obj.setState(NetworkState::Configuration);
+ }
+ else if (argument == AttributeReady) {
+ obj.setState(NetworkState::Ready);
+ }
+ else if (argument == AttributeDisconnect) {
+ obj.setState(NetworkState::Disconnect);
+ }
+ else if (argument == AttributeOneline) {
+ obj.setState(NetworkState::Online);
+ }
+ else {
+ obj.setState(NetworkState::Undefined);
+ }
+ return argument;
+}
+
+NetworkServicePrivate::NetworkServicePrivate(const QString& aPath, NetworkService *parent) :
+ QObject(parent)
+ ,q_ptr(parent)
+ ,m_path(aPath)
+{
+ qDBusRegisterMetaType<ConnmanMap>();
+ qDBusRegisterMetaType<ConnmanMapList>();
+
+ m_service = new NetConnmanServiceInterface("net.connman", m_path,
+ QDBusConnection::systemBus(), this);
+
+ connect(m_service, SIGNAL(PropertyChanged(QString,QDBusVariant)),
+ this, SLOT(updateProperty(QString,QDBusVariant)));
+
+ QDBusPendingReply<QVariantMap> reply = m_service->GetProperties();
+ QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this);
+
+ connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)),
+ this, SLOT(propertiesUpdated(QDBusPendingCallWatcher*)));
+}
+
+void NetworkServicePrivate::setupIpv6Config()
+{
+ QVariantMap param;
+ param << m_ipv6config;
+ if (m_service)
+ m_service->SetProperty(PropertyIPv6Config, QDBusVariant(QVariant(param)));
+}
+
+void NetworkServicePrivate::setupNameserversConfig()
+{
+ QVariant param = QVariant::fromValue(m_nameserverConfig.stringList());
+ if (m_service)
+ m_service->SetProperty(PropertyNameserversConfig, QDBusVariant(QVariant(param)));
+}
+
+void NetworkServicePrivate::setupDomainsConfig()
+{
+ QVariant param = QVariant::fromValue(m_domainsConfig.stringList());
+ if (m_service)
+ m_service->SetProperty(PropertyDomainsConfig, QDBusVariant(QVariant(param)));
+}
+
+void NetworkServicePrivate::setupProxyConfig()
+{
+ QVariantMap param;
+ param << m_proxyConfig;
+ if (m_service)
+ m_service->SetProperty(PropertyProxyConfig, QDBusVariant(QVariant(param)));
+}
+
+void NetworkServicePrivate::setupIpv4Config()
+{
+ QVariantMap param;
+ param << m_ipv4config;
+ if (m_service)
+ m_service->SetProperty(PropertyIPv4Config, QDBusVariant(QVariant(param)));
+}
+
+
+void NetworkServicePrivate::propertiesUpdated(QDBusPendingCallWatcher *call)
+{
+ QDBusPendingReply<QVariantMap> reply = *call;
+ call->deleteLater();
+
+ if (!reply.isError())
+ setupConfiguration(reply.value());
+}
+
+void NetworkServicePrivate::updateProperty(const QString &name, const QDBusVariant &value)
+{
+ updateProperty(name, value.variant());
+}
+
+void NetworkServicePrivate::updateProperty(const QString& key, const QVariant& val)
+{
+ Q_Q(NetworkService);
+
+ if (key == PropertyIPv4) {
+ QVariantMap value = qdbus_cast<QVariantMap>(val);
+ value >> m_ipv4config;
+ emit q->ipv4Changed();
+ }
+ else if (key == PropertyIPv6) {
+ QVariantMap value = qdbus_cast<QVariantMap>(val);
+ value >> m_ipv6config;
+ emit q->ipv6Changed();
+ }
+ else if (key == PropertyNameservers) {
+ QStringList value = qdbus_cast<QStringList>(val);
+ m_nameserverConfig.setStringList(value);
+ emit q->nameserversChanged();
+ }
+ else if (key == PropertyDomains) {
+ QStringList value = qdbus_cast<QStringList>(val);
+ m_domainsConfig.setStringList(value);
+ emit q->domainsChanged();
+ }
+ else if (key == PropertyProxy) {
+ QVariantMap value = qdbus_cast<QVariantMap>(val);
+ value >> m_proxyConfig;
+ emit q->proxyChanged();
+ }
+ else if (key == PropertyState) {
+ QString value = qdbus_cast<QString>(val);
+ value >> m_state;
+ emit q->stateChanged();
+ }
+ else if (key == PropertyName) {
+ m_name = qdbus_cast<QString>(val);
+ emit q->nameChanged();
+ }
+ else if (key == PropertyType) {
+ QString value = qdbus_cast<QString>(val);
+ value >> m_type;
+ }
+}
+
+void NetworkServicePrivate::setupConfiguration(const QVariantMap &properties)
+{
+ QVariantMap::const_iterator it = properties.constBegin(), end = properties.constEnd();
+ for ( ; it != end; ++it) {
+ updateProperty(it.key(), it.value());
+ }
+}
+
+NetworkTechnology::NetworkTechnology(const QString& path, const QVariantMap& properties, QObject* parent)
+ : NetworkItem(parent)
+ {
+ m_technology = new NetConnmanTechnologyInterface("net.connman", path,
+ QDBusConnection::systemBus(), this);
+ connect(m_technology, SIGNAL(PropertyChanged(QString,QDBusVariant)),
+ this, SLOT(updateProperty(QString,QDBusVariant)));
+
+ updateProperty(PropertyName, properties[PropertyName]);
+ updateProperty(PropertyType, properties[PropertyType]);
+ updateProperty(PropertyConnected, properties[PropertyConnected]);
+ updateProperty(PropertyPowered, properties[PropertyPowered]);
+ }
+
+void NetworkTechnology::updateProperty(const QString &name, const QDBusVariant &value)
+{
+ updateProperty(name, value.variant());
+}
+
+void NetworkTechnology::updateProperty(const QString &name, const QVariant &value)
+{
+ if (name == PropertyName) {
+ m_name = qdbus_cast<QString>(value);
+ }
+ else if (name == PropertyType) {
+ qdbus_cast<QString>(value) >> m_type;
+ emit typeChanged();
+ }
+ else if (name == PropertyConnected) {
+ bool connected = qdbus_cast<bool>(value);
+ if (connected)
+ m_state.setState(NetworkState::Online);
+ else
+ m_state.setState(NetworkState::Disconnect);
+ emit stateChanged();
+ }
+ else if (name == PropertyPowered) {
+ m_powered = qdbus_cast<bool>(value);
+ emit poweredChanged();
+ }
+}
+
+
+NetworkSettingsManagerPrivate::NetworkSettingsManagerPrivate(NetworkSettingsManager *parent)
+ :QObject(parent)
+ ,q_ptr(parent)
+{
+ m_manager = new NetConnmanManagerInterface("net.connman", "/",
+ QDBusConnection::systemBus(), this);
+
+ if (m_manager->isValid()) {
+ //List technologies
+ QDBusPendingReply<ConnmanMapList> reply = m_manager->GetTechnologies();
+ QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this);
+ connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)),
+ this, SLOT(getTechnologiesFinished(QDBusPendingCallWatcher*)));
+
+ reply = m_manager->GetServices();
+ watcher = new QDBusPendingCallWatcher(reply, this);
+ connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)),
+ this, SLOT(getServicesFinished(QDBusPendingCallWatcher*)));
+ }
+ else {
+ delete m_manager;
+ m_manager = NULL;
+ }
+}
+
+void NetworkSettingsManagerPrivate::getServicesFinished(QDBusPendingCallWatcher *watcher)
+{
+ Q_Q(NetworkSettingsManager);
+ QDBusPendingReply<ConnmanMapList> reply = *watcher;
+ watcher->deleteLater();
+ if (reply.isError())
+ return;
+
+ foreach (const ConnmanMap &object, reply.value()) {
+ const QString servicePath = object.objectPath.path();
+ NetworkService *service = new NetworkService(servicePath, this);
+ m_services.append(service);
+
+ //Update status property
+ QString n = qdbus_cast<QString>(object.propertyMap[PropertyName]);
+ QString t = qdbus_cast<QString>(object.propertyMap[PropertyType]);
+ QString s = qdbus_cast<QString>(object.propertyMap[PropertyState]);
+
+ NetworkType type;
+ t >> type;
+ NetworkState state;
+ s >> state;
+
+ foreach (NetworkItem* item, m_networksModel.getModel()) {
+ if (item->name() == n && item->type() == type.type()) {
+ item->setState(state.state());
+ }
+ }
+ }
+ emit q->servicesChanged();
+}
+
+void NetworkSettingsManagerPrivate::getTechnologiesFinished(QDBusPendingCallWatcher *watcher)
+{
+ Q_Q(NetworkSettingsManager);
+ QDBusPendingReply<ConnmanMapList> reply = *watcher;
+ watcher->deleteLater();
+ if (reply.isError())
+ return;
+
+ foreach (const ConnmanMap &object, reply.value()) {
+ NetworkTechnology *item = new NetworkTechnology(object.objectPath.path(), object.propertyMap, this);
+
+ //Wired to the top
+ if (item->type() == NetworkType::Wired)
+ m_networksModel.insert(0, item);
+ else if (item->type() == NetworkType::Wifi) {
+ connect(item, &NetworkItem::poweredChanged, q, &NetworkSettingsManager::wifiPoweredChanged);
+ m_networksModel.append(item);
+ }
+ emit q->networksChanged();
+ }
+}
+
+bool NetworkSettingsManagerPrivate::wifiPowered()
+{
+ foreach (NetworkItem* item, m_networksModel.getModel()) {
+ if (item->type() == NetworkType::Wifi) {
+ return item->powered();
+ }
+ }
+ return false;
+}
+
+void NetworkSettingsManagerPrivate::setWifiPowered(const bool powered)
+{
+ foreach (NetworkItem* item, m_networksModel.getModel()) {
+ if (item->type() == NetworkType::Wifi) {
+ NetworkTechnology* technology = qobject_cast<NetworkTechnology*>(item);
+ if (technology) {
+ NetConnmanTechnologyInterface *connmantech = technology->getTechnology();
+ connmantech->SetProperty(PropertyPowered, QDBusVariant(QVariant(powered)));
+ }
+ }
+ }
+}
diff --git a/src/qtdevicesettings/networksettingsplugin/networksettings/connman/networksettingsmanager_linux_p.h b/src/qtdevicesettings/networksettingsplugin/networksettings/connman/networksettingsmanager_linux_p.h
new file mode 100644
index 0000000..bccbed8
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/networksettings/connman/networksettingsmanager_linux_p.h
@@ -0,0 +1,148 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#ifndef NETWORKSETTINGSMANAGERPRIVATE_H
+#define NETWORKSETTINGSMANAGERPRIVATE_H
+
+#include <QObject>
+#include <QtDBus>
+#include <QList>
+#include <QtDBus/QDBusObjectPath>
+#include <QtCore/QMetaType>
+#include "networkaddressmodel.h"
+#include "networksettingsmanager.h"
+#include "networksmodel.h"
+
+class NetConnmanManagerInterface;
+class NetConnmanServiceInterface;
+class NetworkService;
+class NetConnmanTechnologyInterface;
+
+struct ConnmanMap {
+ QDBusObjectPath objectPath;
+ QVariantMap propertyMap;
+};
+
+QDBusArgument &operator<<(QDBusArgument &argument, const ConnmanMap &obj);
+
+const QDBusArgument &operator>>(const QDBusArgument &argument, ConnmanMap &obj);
+
+typedef QList<ConnmanMap> ConnmanMapList;
+
+Q_DECLARE_METATYPE( ConnmanMap )
+Q_DECLARE_METATYPE( ConnmanMapList )
+
+class NetworkServicePrivate : public QObject
+{
+ Q_OBJECT
+ Q_DECLARE_PUBLIC(NetworkService)
+public:
+ NetworkServicePrivate(const QString& aPath, NetworkService *parent=0);
+
+ NetworkService *q_ptr;
+private slots:
+ void propertiesUpdated(QDBusPendingCallWatcher *call);
+ void updateProperty(const QString &name, const QDBusVariant &value);
+
+private:
+ void setupConfiguration(const QVariantMap &properties);
+ void updateProperty(const QString& key, const QVariant& value);
+
+protected:
+ void setAutoConnect(const bool autoconnect);
+ void setupIpv4Config();
+ void setupIpv6Config();
+ void setupNameserversConfig();
+ void setupDomainsConfig();
+ void setupProxyConfig();
+
+ QString m_path;
+ QString m_name;
+ NetworkState m_state;
+ IPv4Config m_ipv4config;
+ IPv6Config m_ipv6config;
+ NetworkAddressModel m_domainsConfig;
+ NetworkAddressModel m_nameserverConfig;
+ ProxyConfig m_proxyConfig;
+ WifiConfig m_wifiConfig;
+ NetworkType m_type;
+ NetConnmanServiceInterface *m_service;
+};
+
+class NetworkTechnology : public NetworkItem
+{
+ Q_OBJECT
+public:
+ explicit NetworkTechnology(const QString& path, const QVariantMap& properties, QObject* parent=0);
+ virtual ~NetworkTechnology() {
+
+ }
+
+ NetConnmanTechnologyInterface *getTechnology() {
+ return m_technology;
+ }
+
+public slots:
+ void updateProperty(const QString &name, const QDBusVariant &value);
+protected:
+ void updateProperty(const QString &name, const QVariant &value);
+
+private:
+ NetConnmanTechnologyInterface *m_technology;
+};
+
+
+class NetworkSettingsManagerPrivate : public QObject
+{
+ Q_OBJECT
+ Q_DECLARE_PUBLIC(NetworkSettingsManager)
+public:
+ explicit NetworkSettingsManagerPrivate(NetworkSettingsManager *parent);
+ NetworkSettingsManager *q_ptr;
+ void setWifiPowered(const bool powered);
+ bool wifiPowered();
+
+public slots:
+ void getServicesFinished(QDBusPendingCallWatcher *watcher);
+ void getTechnologiesFinished(QDBusPendingCallWatcher *watcher);
+
+protected:
+ QList<NetworkService*> m_services;
+ NetworksModel m_networksModel;
+private:
+ NetConnmanManagerInterface *m_manager;
+};
+
+#endif // NETWORKSETTINGSMANAGERPRIVATE_H
diff --git a/src/qtdevicesettings/networksettingsplugin/networksettings/networkaddressmodel.cpp b/src/qtdevicesettings/networksettingsplugin/networksettings/networkaddressmodel.cpp
new file mode 100644
index 0000000..3df67ab
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/networksettings/networkaddressmodel.cpp
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#include "networkaddressmodel.h"
+
+NetworkAddressModel::NetworkAddressModel(QObject *parent)
+ :QStringListModel(parent)
+{
+}
+
+NetworkAddressModel::NetworkAddressModel(const QStringList &strings, QObject *parent)
+ :QStringListModel(parent)
+{
+ setStringList(strings);
+}
+
+void NetworkAddressModel::setStringList(const QStringList &addresses)
+{
+ m_addresses = addresses;
+ QStringListModel::setStringList(m_addresses);
+ emit countChanged();
+}
+
+void NetworkAddressModel::append(const QString& address)
+{
+ int row = rowCount();
+
+ bool succeed = insertRows(row, 1);
+ if (succeed)
+ succeed = setData(index(row), QVariant::fromValue(address));
+
+ Q_ASSERT(succeed == true);
+
+ emit countChanged();
+}
+
+void NetworkAddressModel::remove(int index)
+{
+ removeRows(index, 1);
+ emit countChanged();
+}
+
+int NetworkAddressModel::count() const
+{
+ return rowCount();
+}
+
+void NetworkAddressModel::resetChanges()
+{
+ QStringListModel::setStringList(m_addresses);
+}
diff --git a/src/qtdevicesettings/networksettingsplugin/networksettings/networkaddressmodel.h b/src/qtdevicesettings/networksettingsplugin/networksettings/networkaddressmodel.h
new file mode 100644
index 0000000..b90958f
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/networksettings/networkaddressmodel.h
@@ -0,0 +1,60 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#ifndef NETWORKADDRESSMODEL_H
+#define NETWORKADDRESSMODEL_H
+
+#include <QStringListModel>
+
+class NetworkAddressModel : public QStringListModel
+{
+ Q_OBJECT
+ Q_PROPERTY(int count READ count NOTIFY countChanged)
+public:
+ explicit NetworkAddressModel(QObject *parent = 0);
+ explicit NetworkAddressModel(const QStringList &strings, QObject *parent = 0);
+ Q_INVOKABLE void append(const QString& address);
+ Q_INVOKABLE void remove(int index);
+ Q_INVOKABLE void resetChanges();
+ void setStringList(const QStringList &addresses);
+ int count() const;
+
+signals:
+ void countChanged();
+private:
+ QStringList m_addresses;
+};
+
+#endif // NETWORKADDRESSMODEL_H
diff --git a/src/qtdevicesettings/networksettingsplugin/networksettings/networkconfig.h b/src/qtdevicesettings/networksettingsplugin/networksettings/networkconfig.h
new file mode 100644
index 0000000..cdff473
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/networksettings/networkconfig.h
@@ -0,0 +1,394 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#ifndef NETWORKCONFIG_H
+#define NETWORKCONFIG_H
+
+#include <QObject>
+#include <QUrl>
+#include <QVariantMap>
+#include "networkaddressmodel.h"
+
+class NetworkState : public QObject
+{
+ Q_OBJECT
+ Q_ENUMS(States)
+ Q_PROPERTY(States state READ state WRITE setState NOTIFY stateChanged)
+
+public:
+ enum States {Idle, Failure, Association, Configuration, Ready, Disconnect, Online, Undefined};
+
+ explicit NetworkState(States aState, QObject *parent = 0)
+ : QObject(parent)
+ {
+ m_state = aState;
+ }
+
+ explicit NetworkState(QObject *parent = 0)
+ : QObject(parent)
+ {
+ m_state = Undefined;
+ }
+
+ States state() const {
+ return m_state;
+ }
+
+ void setState(const States aState) {
+ m_state = aState;
+ emit stateChanged();
+ }
+
+signals:
+ void stateChanged();
+
+private:
+ States m_state;
+};
+
+class NetworkType : public QObject
+{
+ Q_OBJECT
+ Q_ENUMS(Types)
+ Q_PROPERTY(Types type READ type WRITE setType NOTIFY typeChanged)
+
+public:
+ enum Types {
+ Wired,
+ Wifi,
+ Bluetooth,
+ Unknown
+ };
+
+ explicit NetworkType(Types aType, QObject *parent = 0)
+ : QObject(parent)
+ {
+ m_type = aType;
+ }
+
+ explicit NetworkType(QObject *parent = 0)
+ : QObject(parent)
+ {
+ m_type = Unknown;
+ }
+
+
+ Types type() const {
+ return m_type;
+ }
+
+ void setType(const Types aType) {
+ m_type = aType;
+ emit typeChanged();
+ }
+
+signals:
+ void typeChanged();
+
+private:
+ Types m_type;
+};
+
+class IPv4Config : public QObject
+{
+ Q_OBJECT
+ Q_ENUMS(MethodType)
+ Q_PROPERTY(QString address READ address WRITE setAddress NOTIFY addressChanged)
+ Q_PROPERTY(QString gateway READ gateway WRITE setGateway NOTIFY gatewayChanged)
+ Q_PROPERTY(MethodType method READ method WRITE setMethod NOTIFY methodChanged)
+ Q_PROPERTY(QString mask READ mask WRITE setMask NOTIFY maskChanged)
+
+public:
+ explicit IPv4Config(QObject *parent = 0)
+ : QObject(parent)
+ {
+
+ }
+
+ enum MethodType {Dhcp, Manual, Off};
+
+ QString address() const {
+ return m_address;
+ }
+ void setAddress(const QString& aAdderess) {
+ m_address = aAdderess;
+ emit addressChanged();
+ }
+
+ QString gateway() const {
+ return m_gateway;
+ }
+
+ void setGateway(const QString& aGateway) {
+ m_gateway = aGateway;
+ emit gatewayChanged();
+ }
+
+ MethodType method() const {
+ return m_method;
+ }
+
+ void setMethod(const MethodType aMethod) {
+ m_method = aMethod;
+ emit methodChanged();
+ }
+
+ QString mask() const {
+ return m_mask;
+ }
+
+ void setMask(const QString& aMask) {
+ m_mask = aMask;
+ emit maskChanged();
+ }
+
+signals:
+ void addressChanged();
+ void gatewayChanged();
+ void methodChanged();
+ void maskChanged();
+
+private:
+ QString m_address;
+ QString m_gateway;
+ MethodType m_method;
+ QString m_mask;
+};
+
+
+class IPv6Config : public QObject
+{
+ Q_OBJECT
+ Q_ENUMS(MethodType PrivacyType)
+ Q_PROPERTY(QString address READ address WRITE setAddress NOTIFY addressChanged)
+ Q_PROPERTY(QString gateway READ gateway WRITE setGateway NOTIFY gatewayChanged)
+ Q_PROPERTY(MethodType method READ method WRITE setMethod NOTIFY methodChanged)
+ Q_PROPERTY(PrivacyType privacy READ privacy WRITE setPrivacy NOTIFY privacyChanged)
+ Q_PROPERTY(int prefixLength READ prefixLength WRITE setPrefixLength NOTIFY prefixLengthChanged)
+
+public:
+ explicit IPv6Config(QObject *parent = 0)
+ : QObject(parent)
+ {
+
+ }
+
+ enum MethodType {Auto, Manual, Off};
+ enum PrivacyType {Disabled, Enabled, Preferred};
+
+ QString address() const {
+ return m_address;
+ }
+ void setAddress(const QString& aAdderess) {
+ m_address = aAdderess;
+ emit addressChanged();
+ }
+
+ QString gateway() const {
+ return m_gateway;
+ }
+
+ void setGateway(const QString& aGateway) {
+ m_gateway = aGateway;
+ emit gatewayChanged();
+ }
+
+ MethodType method() const {
+ return m_method;
+ }
+
+ void setMethod(const MethodType aMethod) {
+ m_method = aMethod;
+ emit methodChanged();
+ }
+
+ PrivacyType privacy() const {
+ return m_privacy;
+ }
+
+ void setPrivacy(const PrivacyType aPrivacy) {
+ m_privacy = aPrivacy;
+ emit privacyChanged();
+ }
+
+ int prefixLength() const {
+ return m_prefixLength;
+ }
+
+ void setPrefixLength(const int& aPrefixLength) {
+ m_prefixLength = aPrefixLength;
+ emit prefixLengthChanged();
+ }
+
+signals:
+ void addressChanged();
+ void gatewayChanged();
+ void methodChanged();
+ void privacyChanged();
+ void prefixLengthChanged();
+
+private:
+ QString m_address;
+ QString m_gateway;
+ MethodType m_method;
+ PrivacyType m_privacy;
+ int m_prefixLength;
+};
+
+class ProxyConfig : public QObject
+{
+ Q_OBJECT
+ Q_ENUMS(MethodType)
+public:
+ Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged)
+ Q_PROPERTY(QAbstractItemModel* servers READ servers NOTIFY serversChanged)
+ Q_PROPERTY(QAbstractItemModel* excludes READ excludes NOTIFY excludesChanged)
+ Q_PROPERTY(MethodType method READ method WRITE setMethod NOTIFY methodChanged)
+
+ explicit ProxyConfig(QObject *parent=NULL)
+ : QObject(parent)
+ {
+
+ }
+
+ enum MethodType {Direct, Auto, Manual};
+
+ QUrl url() const {
+ return m_url;
+ }
+
+ void setUrl(const QUrl& aUrl) {
+ m_url = aUrl;
+ emit urlChanged();
+ }
+
+ QAbstractItemModel* servers(void) {
+ return &m_servers;
+ }
+
+ void setServers(const QStringList& aServers) {
+ m_servers.setStringList(aServers);
+ emit serversChanged();
+ }
+
+ QStringList servers() const {
+ return m_servers.stringList();
+ }
+
+ QAbstractItemModel* excludes(void) {
+ return &m_excludes;
+ }
+
+ QStringList excludes() const {
+ return m_excludes.stringList();
+ }
+
+ void setExcludes(const QStringList& aExcludes) {
+ m_excludes.setStringList(aExcludes);
+ emit excludesChanged();
+ }
+
+ MethodType method(void) const {
+ return m_method;
+ }
+
+ void setMethod(const MethodType& aMethod) {
+ m_method = aMethod;
+ emit methodChanged();
+ }
+
+signals:
+ void urlChanged();
+ void serversChanged();
+ void excludesChanged();
+ void methodChanged();
+private:
+ QUrl m_url;
+ NetworkAddressModel m_servers;
+ NetworkAddressModel m_excludes;
+ MethodType m_method;
+};
+
+class WifiConfig : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString bssid READ bssid NOTIFY bssidChanged)
+ Q_PROPERTY(int maxRate READ maxRate NOTIFY maxRateChanged)
+ Q_PROPERTY(int frequency READ frequency NOTIFY frequencyChanged)
+ Q_PROPERTY(QString encryptionMode READ encryptionMode NOTIFY encryptionModeChanged)
+ Q_PROPERTY(bool hidden READ hidden NOTIFY hiddenChanged)
+public:
+ explicit WifiConfig(QObject* parent = 0) :
+ QObject(parent) {
+
+ }
+
+ const QString bssid() {
+ return m_bssid;
+ }
+
+ int maxRate() {
+ return m_maxRate;
+ }
+
+ int frequency() {
+ return m_frequency;
+ }
+
+ const QString encryptionMode() {
+ return m_encryptionMode;
+ }
+
+ bool hidden() const {
+ return m_hidden;
+ }
+
+signals:
+ void bssidChanged(const QString &bssid);
+ void maxRateChanged(quint32 rate);
+ void frequencyChanged(quint16 frequency);
+ void encryptionModeChanged(const QString &mode);
+ void hiddenChanged(bool);
+
+private:
+ QString m_bssid;
+ quint32 m_maxRate;
+ quint16 m_frequency;
+ QString m_encryptionMode;
+ bool m_hidden;
+};
+
+
+#endif
diff --git a/src/qtdevicesettings/networksettingsplugin/networksettings/networksettings.pri b/src/qtdevicesettings/networksettingsplugin/networksettings/networksettings.pri
new file mode 100644
index 0000000..7a81571
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/networksettings/networksettings.pri
@@ -0,0 +1,28 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2015-11-03T13:52:45
+#
+#-------------------------------------------------
+
+QT += core network dbus
+
+INCLUDEPATH += $${PWD}/connman
+INCLUDEPATH += $${PWD}
+
+DBUS_INTERFACES = \
+ networksettings/connman/connman_manager.xml \
+ networksettings/connman/connman_service.xml \
+ networksettings/connman/connman_technology.xml
+
+
+SOURCES += networksettings/networksettingsmanager.cpp \
+ networksettings/connman/networksettingsmanager_linux.cpp \
+ networksettings/networkaddressmodel.cpp \
+ networksettings/networksmodel.cpp
+
+HEADERS += \
+ networksettings/networkconfig.h \
+ networksettings/connman/networksettingsmanager_linux_p.h \
+ networksettings/networkaddressmodel.h \
+ networksettings/networksettingsmanager.h \
+ networksettings/networksmodel.h
diff --git a/src/qtdevicesettings/networksettingsplugin/networksettings/networksettingsmanager.cpp b/src/qtdevicesettings/networksettingsplugin/networksettings/networksettingsmanager.cpp
new file mode 100644
index 0000000..6df0f22
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/networksettings/networksettingsmanager.cpp
@@ -0,0 +1,167 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#include "networksettingsmanager.h"
+#include "connman/networksettingsmanager_linux_p.h"
+#include <QStringListModel>
+
+NetworkService::NetworkService(const QString& aServiceId, QObject* parent) :
+ QObject(parent)
+ ,d_ptr(new NetworkServicePrivate(aServiceId, this))
+{
+
+}
+
+QString NetworkService::name() const
+{
+ Q_D(const NetworkService);
+ return d->m_name;
+}
+
+NetworkState::States NetworkService::state()
+{
+ Q_D(NetworkService);
+ return d->m_state.state();
+}
+
+NetworkType::Types NetworkService::type()
+{
+ Q_D(NetworkService);
+ return d->m_type.type();
+}
+
+IPv4Config* NetworkService::ipv4()
+{
+ Q_D(NetworkService);
+ return &d->m_ipv4config;
+}
+
+IPv6Config* NetworkService::ipv6()
+{
+ Q_D(NetworkService);
+ return &d->m_ipv6config;
+}
+
+ProxyConfig* NetworkService::proxy()
+{
+ Q_D(NetworkService);
+ return &d->m_proxyConfig;
+}
+
+QAbstractItemModel* NetworkService::domains()
+{
+ Q_D(NetworkService);
+ return &d->m_domainsConfig;
+}
+
+QAbstractItemModel* NetworkService::nameservers()
+{
+ Q_D(NetworkService);
+ return &d->m_nameserverConfig;
+}
+
+void NetworkService::setupIpv4Config()
+{
+ Q_D(NetworkService);
+ d->setupIpv4Config();
+}
+
+void NetworkService::setupIpv6Config()
+{
+ Q_D(NetworkService);
+ d->setupIpv6Config();
+}
+
+void NetworkService::setupNameserversConfig()
+{
+ Q_D(NetworkService);
+ d->setupNameserversConfig();
+}
+
+void NetworkService::setupDomainsConfig()
+{
+ Q_D(NetworkService);
+ d->setupDomainsConfig();
+}
+
+void NetworkService::setupProxyConfig()
+{
+ Q_D(NetworkService);
+ d->setupProxyConfig();
+}
+
+NetworkSettingsManager::NetworkSettingsManager(QObject *parent) :
+ QObject(parent)
+ ,d_ptr(new NetworkSettingsManagerPrivate(this))
+{
+
+}
+
+QQmlListProperty<NetworkService> NetworkSettingsManager::services()
+{
+ Q_D(NetworkSettingsManager);
+ return QQmlListProperty<NetworkService>(this, d->m_services);
+}
+
+QAbstractItemModel* NetworkSettingsManager::networks()
+{
+ Q_D(NetworkSettingsManager);
+ return &d->m_networksModel;
+}
+
+NetworkService* NetworkSettingsManager::getService(const QString& aName, const int aType)
+{
+ Q_D(NetworkSettingsManager);
+
+ foreach (NetworkService* service, d->m_services) {
+ if (service->name() == aName && service->type() == aType) {
+ return service;
+ }
+ }
+ return NULL;
+}
+
+
+bool NetworkSettingsManager::wifiPowered()
+{
+ Q_D(NetworkSettingsManager);
+ return d->wifiPowered();
+}
+
+void NetworkSettingsManager::setWifiPowered(const bool power)
+{
+ Q_D(NetworkSettingsManager);
+ d->setWifiPowered(power);
+}
diff --git a/src/qtdevicesettings/networksettingsplugin/networksettings/networksettingsmanager.h b/src/qtdevicesettings/networksettingsplugin/networksettings/networksettingsmanager.h
new file mode 100644
index 0000000..8e51258
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/networksettings/networksettingsmanager.h
@@ -0,0 +1,127 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#ifndef NETWORKSETTINGSMANAGER_H
+#define NETWORKSETTINGSMANAGER_H
+
+#include "networkconfig.h"
+#include <QObject>
+#include <QQmlListProperty>
+#include <QStringListModel>
+
+QT_FORWARD_DECLARE_CLASS(NetworkSettingsManagerPrivate)
+QT_FORWARD_DECLARE_CLASS(NetworkServicePrivate)
+QT_FORWARD_DECLARE_CLASS(NetworkNetworkTypePrivate)
+
+class NetworkService : public QObject
+{
+ Q_OBJECT
+ Q_ENUMS(StateTypes)
+ Q_PROPERTY(QString name READ name NOTIFY nameChanged)
+ Q_PROPERTY(NetworkState::States state READ state NOTIFY stateChanged)
+ Q_PROPERTY(NetworkType::Types type READ type NOTIFY typeChanged)
+ Q_PROPERTY(IPv4Config* ipv4 READ ipv4 NOTIFY ipv4Changed)
+ Q_PROPERTY(IPv6Config* ipv6 READ ipv6 NOTIFY ipv6Changed)
+ Q_PROPERTY(ProxyConfig* proxy READ proxy NOTIFY proxyChanged)
+ Q_PROPERTY(QAbstractItemModel* domains READ domains NOTIFY domainsChanged)
+ Q_PROPERTY(QAbstractItemModel* nameservers READ nameservers NOTIFY nameserversChanged)
+public:
+ explicit NetworkService(const QString& aServiceId, QObject* parent = 0);
+
+ QString name() const;
+ NetworkState::States state();
+ NetworkType::Types type();
+ IPv4Config* ipv4();
+ IPv6Config* ipv6();
+ ProxyConfig* proxy();
+ QAbstractItemModel* domains();
+ QAbstractItemModel* nameservers();
+
+ Q_INVOKABLE void setAutoConnect(const bool autoconnect);
+ Q_INVOKABLE void setupIpv4Config();
+ Q_INVOKABLE void setupIpv6Config();
+ Q_INVOKABLE void setupNameserversConfig();
+ Q_INVOKABLE void setupDomainsConfig();
+ Q_INVOKABLE void setupProxyConfig();
+
+Q_SIGNALS:
+ void nameChanged();
+ void stateChanged();
+ void typeChanged();
+ void proxyChanged();
+ void ipv4Changed();
+ void ipv6Changed();
+ void domainsChanged();
+ void nameserversChanged();
+
+protected:
+ NetworkServicePrivate *d_ptr;
+
+ Q_DISABLE_COPY(NetworkService)
+ Q_DECLARE_PRIVATE(NetworkService)
+};
+
+class NetworkSettingsManager : public QObject
+{
+ Q_OBJECT
+ Q_ENUMS(StateTypes NetworkTypeTypes)
+ Q_PROPERTY(QQmlListProperty<NetworkService> services READ services NOTIFY servicesChanged)
+ Q_PROPERTY(QAbstractItemModel* networks READ networks NOTIFY networksChanged)
+ Q_PROPERTY(bool wifiPowered READ wifiPowered WRITE setWifiPowered NOTIFY wifiPoweredChanged)
+public:
+ explicit NetworkSettingsManager(QObject* parent = 0);
+ QQmlListProperty<NetworkService> services();
+
+ QAbstractItemModel* networks();
+
+ Q_INVOKABLE NetworkService* getService(const QString& aName, const int aType);
+
+ bool wifiPowered();
+ void setWifiPowered(const bool power);
+
+Q_SIGNALS:
+ void servicesChanged();
+ void wifiPoweredChanged();
+ void networksChanged();
+
+protected:
+ NetworkSettingsManagerPrivate *d_ptr;
+
+private:
+ Q_DISABLE_COPY(NetworkSettingsManager)
+ Q_DECLARE_PRIVATE(NetworkSettingsManager)
+};
+
+#endif // NETWORKSETTINGSMANAGER_H
diff --git a/src/qtdevicesettings/networksettingsplugin/networksettings/networksmodel.cpp b/src/qtdevicesettings/networksettingsplugin/networksettings/networksmodel.cpp
new file mode 100644
index 0000000..8524417
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/networksettings/networksmodel.cpp
@@ -0,0 +1,111 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#include <QQmlPropertyMap>
+#include "networksmodel.h"
+
+NetworksModel::NetworksModel(QObject *parent)
+ : QAbstractListModel(parent)
+{
+ m_roleNames.insert(Qt::UserRole, "modelData");
+ m_roleNames.insert(Type, "type");
+ m_roleNames.insert(Status, "status");
+ m_roleNames.insert(Name, "name");
+}
+
+NetworksModel::~NetworksModel()
+{
+
+}
+
+QHash<int, QByteArray> NetworksModel::roleNames() const
+{
+ return m_roleNames;
+}
+
+
+int NetworksModel::rowCount(const QModelIndex & parent) const
+{
+ Q_UNUSED(parent);
+ return m_items.count();
+}
+
+QVariant NetworksModel::data(const QModelIndex & index, int role) const
+{
+ if (!index.isValid()) return QVariant();
+
+ NetworkItem *item = m_items[index.row()];
+ if (role == Qt::UserRole) {
+ return QVariant::fromValue(static_cast<QObject*>(item));
+ }
+
+ switch (role) {
+ case Type:
+ return item->type();
+ break;
+ case Name:
+ return item->name();
+ break;
+ case Status:
+ return item->state();
+ break;
+ default:
+ return "";
+ }
+
+}
+
+void NetworksModel::append(NetworkItem* item)
+{
+ item->setParent(this);
+
+ beginInsertRows(QModelIndex(), rowCount(), rowCount());
+ m_items.append(item);
+ endInsertRows();
+}
+
+void NetworksModel::insert(int row, NetworkItem* item)
+{
+ item->setParent(this);
+
+ beginInsertRows(QModelIndex(), row, row);
+ m_items.insert(row, item);
+ endInsertRows();
+}
+
+QList<NetworkItem*> NetworksModel::getModel()
+{
+ return m_items;
+}
diff --git a/src/qtdevicesettings/networksettingsplugin/networksettings/networksmodel.h b/src/qtdevicesettings/networksettingsplugin/networksettings/networksmodel.h
new file mode 100644
index 0000000..d4c389c
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/networksettings/networksmodel.h
@@ -0,0 +1,131 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#ifndef NETWORKSMODEL_H
+#define NETWORKSMODEL_H
+
+#include <QAbstractListModel>
+#include "networkconfig.h"
+
+QT_FORWARD_DECLARE_CLASS(NetworksModelPrivate)
+QT_FORWARD_DECLARE_CLASS(QQmlPropertyMap)
+
+class NetworkItem : public QObject {
+ Q_OBJECT
+ Q_PROPERTY(QString name READ name NOTIFY nameChanged)
+ Q_PROPERTY(NetworkState::States state READ state NOTIFY stateChanged)
+ Q_PROPERTY(NetworkType::Types type READ type NOTIFY typeChanged)
+ Q_PROPERTY(bool powered READ powered NOTIFY poweredChanged)
+
+public:
+ explicit NetworkItem(QObject* parent=0) :
+ QObject(parent) {
+
+ }
+
+ QString name() const {
+ return m_name;
+ }
+
+ void setName(const QString& aName) {
+ m_name = aName;
+ }
+
+ NetworkState::States state() const {
+ return m_state.state();
+ }
+
+ NetworkType::Types type() const {
+ return m_type.type();
+ }
+
+ void setState(const NetworkState::States aState) {
+ m_state.setState(aState);
+ }
+
+ void setType(const NetworkType::Types aType) {
+ m_type.setType(aType);
+ }
+
+ bool powered() const {
+ return m_powered;
+ }
+
+ void setPowered(const bool aPowered) {
+ m_powered = aPowered;
+ }
+
+signals:
+ void nameChanged();
+ void stateChanged();
+ void typeChanged();
+ void poweredChanged();
+
+protected:
+ QString m_name;
+ NetworkState m_state;
+ NetworkType m_type;
+ bool m_powered;
+ friend class NetworksModel;
+};
+
+class NetworksModel : public QAbstractListModel
+{
+ Q_OBJECT
+
+public:
+ explicit NetworksModel(QObject *parent=0);
+ virtual ~NetworksModel();
+ // from QAbstractItemModel
+ int rowCount(const QModelIndex & parent = QModelIndex()) const;
+ QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
+ QHash<int, QByteArray> roleNames() const;
+
+ void append(NetworkItem* networkItem);
+ void insert(int row, NetworkItem* networkItem);
+ QList<NetworkItem*> getModel();
+
+ enum Roles {
+ Type = Qt::UserRole + 1,
+ Status,
+ Name
+ };
+
+private:
+ QList<NetworkItem*> m_items;
+ QHash<int, QByteArray> m_roleNames;
+};
+
+#endif // NETWORKSMODEL_H
diff --git a/src/qtdevicesettings/networksettingsplugin/networksettingsplugin.pro b/src/qtdevicesettings/networksettingsplugin/networksettingsplugin.pro
new file mode 100644
index 0000000..c514393
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/networksettingsplugin.pro
@@ -0,0 +1,45 @@
+TEMPLATE = lib
+TARGET = networksettingsplugin
+QT += qml quick
+CONFIG += qt plugin
+
+uri = com.theqtcompany.settings.network
+
+include(networksettings/networksettings.pri)
+
+# Input
+SOURCES += \
+ networksettingsplugin_plugin.cpp
+HEADERS += \
+ networksettingsplugin_plugin.h
+
+DISTFILES = qmldir
+
+!equals(_PRO_FILE_PWD_, $$OUT_PWD) {
+ copy_qmldir.target = $$OUT_PWD/qmldir
+ copy_qmldir.depends = $$_PRO_FILE_PWD_/qmldir
+ copy_qmldir.commands = $(COPY_FILE) \"$$replace(copy_qmldir.depends, /, $$QMAKE_DIR_SEP)\" \"$$replace(copy_qmldir.target, /, $$QMAKE_DIR_SEP)\"
+ QMAKE_EXTRA_TARGETS += copy_qmldir
+ PRE_TARGETDEPS += $$copy_qmldir.target
+}
+
+qmldir.files = qmldir
+
+pluginfiles.files += \
+ imports/NetworkSettings/EditWiredSettings.qml \
+ imports/NetworkSettings/NetworkDetails.qml \
+ imports/NetworkSettings/WifiSettings.qml \
+ imports/NetworkSettings/IpAddressTextField.qml \
+ imports/NetworkSettings/NetworkSettings.qml \
+ imports/NetworkSettings/WiredSettings.qml
+
+installPath = $$[QT_INSTALL_QML]/$$replace(uri, \\., /)
+
+pluginfiles.path = $$installPath
+qmldir.path = $$installPath
+target.path = $$installPath
+INSTALLS += target qmldir pluginfiles
+
+RESOURCES += \
+ icons.qrc
+
diff --git a/src/qtdevicesettings/networksettingsplugin/networksettingsplugin_plugin.cpp b/src/qtdevicesettings/networksettingsplugin/networksettingsplugin_plugin.cpp
new file mode 100644
index 0000000..684cef0
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/networksettingsplugin_plugin.cpp
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#include "networksettingsplugin_plugin.h"
+#include "networkconfig.h"
+#include "networksettingsmanager.h"
+
+#include <qqml.h>
+#include <QQmlEngine>
+
+template <typename T>
+QObject *instance(QQmlEngine *engine, QJSEngine *) {
+ T *t = new T(engine);
+ t->setObjectName(T::staticMetaObject.className());
+ return t;
+}
+
+void NetworksettingspluginPlugin::registerTypes(const char *uri)
+{
+ Q_ASSERT(QLatin1String(uri) == QLatin1String("com.theqtcompany.settings.network"));
+ qmlRegisterUncreatableType<NetworkService>(uri, 1, 0, "NetworkService", "Cannot be instantiated directly.");
+ qmlRegisterUncreatableType<IPv4Config>(uri, 1, 0, "IPv4Config", "Cannot be instantiated directly.");
+ qmlRegisterUncreatableType<IPv6Config>(uri, 1, 0, "IPv6Config", "Cannot be instantiated directly.");
+ qmlRegisterUncreatableType<ProxyConfig>(uri, 1, 0, "ProxyConfig", "Cannot be instantiated directly.");
+ qmlRegisterUncreatableType<NetworkType>(uri, 1, 0, "NetworkType", "Cannot be instantiated directly.");
+ qmlRegisterSingletonType<NetworkSettingsManager>(uri, 1, 0, "NetworkSettingsManager", &instance<NetworkSettingsManager>);
+}
+
+
diff --git a/src/qtdevicesettings/networksettingsplugin/networksettingsplugin_plugin.h b/src/qtdevicesettings/networksettingsplugin/networksettingsplugin_plugin.h
new file mode 100644
index 0000000..40e02e2
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/networksettingsplugin_plugin.h
@@ -0,0 +1,51 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#ifndef NETWORKSETTINGSPLUGIN_PLUGIN_H
+#define NETWORKSETTINGSPLUGIN_PLUGIN_H
+
+#include <QQmlExtensionPlugin>
+
+class NetworksettingspluginPlugin : public QQmlExtensionPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
+
+public:
+ void registerTypes(const char *uri);
+};
+
+#endif // NETWORKSETTINGSPLUGIN_PLUGIN_H
+
diff --git a/src/qtdevicesettings/networksettingsplugin/qml.qrc b/src/qtdevicesettings/networksettingsplugin/qml.qrc
new file mode 100644
index 0000000..87c3639
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/qml.qrc
@@ -0,0 +1,10 @@
+<RCC>
+ <qresource prefix="/">
+ <file>qml/EditWiredSettings.qml</file>
+ <file>qml/IpAddressTextField.qml</file>
+ <file>qml/NetworkDetails.qml</file>
+ <file>qml/NetworkSettings.qml</file>
+ <file>qml/WifiSettings.qml</file>
+ <file>qml/WiredSettings.qml</file>
+ </qresource>
+</RCC>
diff --git a/src/qtdevicesettings/networksettingsplugin/qmldir b/src/qtdevicesettings/networksettingsplugin/qmldir
new file mode 100644
index 0000000..71f3726
--- /dev/null
+++ b/src/qtdevicesettings/networksettingsplugin/qmldir
@@ -0,0 +1,4 @@
+module com.theqtcompany.settings.network
+NetworkSettings 1.0 NetworkSettings.qml
+plugin networksettingsplugin
+
diff --git a/src/qtdevicesettings/settingscomponents/icons.qrc b/src/qtdevicesettings/settingscomponents/icons.qrc
new file mode 100644
index 0000000..d6ff9da
--- /dev/null
+++ b/src/qtdevicesettings/settingscomponents/icons.qrc
@@ -0,0 +1,21 @@
+<RCC>
+ <qresource prefix="/">
+ <file>imports/Settings/Back.png</file>
+ <file>imports/Settings/Chevron-left.png</file>
+ <file>imports/Settings/Chevron-right.png</file>
+ <file>imports/Settings/Circle-x.png</file>
+ <file>imports/Settings/Cogs.png</file>
+ <file>imports/Settings/Connections.png</file>
+ <file>imports/Settings/Display.png</file>
+ <file>imports/Settings/Lock.png</file>
+ <file>imports/Settings/Plus.png</file>
+ <file>imports/Settings/Settings.png</file>
+ <file>imports/Settings/Wifi.png</file>
+ <file>imports/Settings/World.png</file>
+ <file>imports/Settings/Wrench.png</file>
+ <file>imports/Settings/Chevron-left-med.png</file>
+ <file>imports/Settings/Chevron-left-big.png</file>
+ <file>imports/Settings/Settings-big.png</file>
+ <file>imports/Settings/Connections-big.png</file>
+ </qresource>
+</RCC>
diff --git a/src/qtdevicesettings/settingscomponents/imports/Settings/CustomCombobox.qml b/src/qtdevicesettings/settingscomponents/imports/Settings/CustomCombobox.qml
new file mode 100644
index 0000000..72342e1
--- /dev/null
+++ b/src/qtdevicesettings/settingscomponents/imports/Settings/CustomCombobox.qml
@@ -0,0 +1,184 @@
+/****************************************************************************
+**
+** 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 QtQml.Models 2.1
+
+Item {
+ id: control
+ property alias popupParent: popupView.parent
+ property bool popupVisible: popupView.visible
+ property int selectedIndex: -1
+ property alias model: comboboxModel.model
+ property string textRole: "text"
+ property bool modified: false
+ property alias popupVisibility: popupView.visible
+ property alias textValue: label.text
+ property int popupHeight: comboboxModel.items.count * height
+ property bool enabled: true
+ property bool editable: true
+ property Component delegate
+
+ implicitWidth: Math.round(100 * Flat.FlatStyle.scaleFactor)
+ implicitHeight: Math.round(26 * Flat.FlatStyle.scaleFactor)
+
+ Component.onCompleted: {
+ //Find root window for parent
+ var p = control.parent
+ while (p.parent) {
+ p = p.parent;
+ }
+ popupParent = p;
+ }
+
+ function hide() {
+ popupView.visible = false
+ button.checked = false
+ }
+
+ function setSelectIndexToVal(value, role) {
+ if (model) {
+ for (var i=0, len=comboboxModel.items.count;i<len;i++) {
+ if (comboboxModel.items.get(i).model[role] === value) {
+ selectedIndex = i;
+ return;
+ }
+ }
+ }
+ selectedIndex = -1;
+ }
+
+ Button {
+ id: button
+ checkable: true
+ enabled: true
+ anchors.fill: parent
+ checked: popupView.visible
+ onClicked: popupView.visible = !popupView.visible
+
+ TextLabel {
+ id: label
+ anchors.fill: parent
+ anchors.margins: 10 * Flat.FlatStyle.scaleFactor
+ color: button.hovered || button.checked ? Flat.FlatStyle.selectedTextColor:Flat.FlatStyle.styleColor
+ horizontalAlignment: Text.AlignLeft
+ text: selectedIndex>=0 ? comboboxModel.items.count>0 ? comboboxModel.items.get(selectedIndex).model[textRole]:"":""
+ }
+
+ Flat.LeftArrowIcon {
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.rightMargin: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ width: Math.round(14 * Flat.FlatStyle.scaleFactor)
+ height: Math.round(14 * Flat.FlatStyle.scaleFactor)
+ rotation: popupVisibility ? 90 : -90
+ color: button.hovered || button.checked ? Flat.FlatStyle.selectedTextColor:Flat.FlatStyle.styleColor
+ opacity: control.enabled || control.editable ? 1.0 : 0.2
+ }
+ }
+
+ Item {
+ id: popupView
+ y: 0
+ x: 0
+ height: control.popupHeight
+ width: control.width
+ visible: false
+ onVisibleChanged: {
+ if (visible) {
+ var pos = control.mapToItem(popupView.parent, 0, 0)
+ x = pos.x
+ y = pos.y + button.height
+
+ if (y + control.popupHeight > popupParent.height) {
+ y = popupParent.height - control.popupHeight;
+ }
+ }
+ }
+
+ Rectangle {
+ anchors.fill: parent
+ border.color: Flat.FlatStyle.darkFrameColor
+ border.width: 1
+ color: "white"
+
+ Column {
+ ExclusiveGroup {
+ id: exgroup
+ }
+
+ DelegateModel {
+ id: comboboxModel
+ delegate: comboboxDelete
+ }
+
+ Repeater {
+ id: comboboxView
+ model: comboboxModel
+ }
+ }
+ }
+ }
+
+ Component {
+ id: comboboxDelete
+ Item {
+ id: comboboxViewDelegate
+ property bool checked
+ width: control.width
+ height: control.height
+
+ Loader {
+ id: loader
+ sourceComponent: delegate
+ anchors.fill: parent
+ property var modelData: model
+ onLoaded : exgroup.bindCheckable(item)
+ }
+
+ Connections {
+ target: loader.item
+ onClicked: {
+ popupView.visible = false;
+ button.checked = false
+ selectedIndex = index
+ }
+ }
+ }
+ }
+}
diff --git a/src/qtdevicesettings/settingscomponents/imports/Settings/FlatStyledDropdownDelegate.qml b/src/qtdevicesettings/settingscomponents/imports/Settings/FlatStyledDropdownDelegate.qml
new file mode 100644
index 0000000..ca68e16
--- /dev/null
+++ b/src/qtdevicesettings/settingscomponents/imports/Settings/FlatStyledDropdownDelegate.qml
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** 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
+
+Item {
+ id: root
+ property bool checkable: true
+ property bool checked: false
+ property bool pressed: false
+ signal clicked()
+
+ MouseArea {
+ id: delegateButton
+ anchors.fill: parent
+ hoverEnabled: true
+
+ onPressed: root.pressed = true
+ onClicked: root.clicked();
+ onEntered: checked = !checked;
+
+ Rectangle {
+ anchors.fill: parent
+ color: root.checked ? Flat.FlatStyle.disabledColor : "transparent"
+ opacity: root.checked ? 0.15 : 1.0
+ }
+ Rectangle {
+ color: Flat.FlatStyle.darkFrameColor
+ width: parent.width
+ height: Flat.FlatStyle.onePixel
+ anchors.bottom: parent.bottom
+ }
+ TextLabel {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+ anchors.margins: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ horizontalAlignment: Text.AlignLeft
+ text: modelData.text
+ }
+ }
+}
diff --git a/src/qtdevicesettings/settingscomponents/imports/Settings/IconButton.qml b/src/qtdevicesettings/settingscomponents/imports/Settings/IconButton.qml
new file mode 100644
index 0000000..898e5e0
--- /dev/null
+++ b/src/qtdevicesettings/settingscomponents/imports/Settings/IconButton.qml
@@ -0,0 +1,54 @@
+/****************************************************************************
+**
+** 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
+
+MouseArea {
+ id: root
+ property alias pressedIcon: pressedImage.source
+ property alias releasedIcon: releasedImage.source
+ width: pressedImage.sourceSize.width
+ height: pressedImage.sourceSize.height
+
+ Image {
+ id: pressedImage
+ visible: root.pressed
+ }
+
+ Image {
+ id: releasedImage
+ visible: !root.pressed
+ }
+}
diff --git a/src/qtdevicesettings/settingscomponents/imports/Settings/TextLabel.qml b/src/qtdevicesettings/settingscomponents/imports/Settings/TextLabel.qml
new file mode 100644
index 0000000..176f848
--- /dev/null
+++ b/src/qtdevicesettings/settingscomponents/imports/Settings/TextLabel.qml
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** 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
+
+Text {
+ color: systemPalette.text
+ font.family: Flat.FlatStyle.fontFamily
+ font.pixelSize: Math.round(12 * Flat.FlatStyle.scaleFactor)
+ renderType: Text.QtRendering
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+}
diff --git a/src/qtdevicesettings/settingscomponents/imports/Settings/qmldir b/src/qtdevicesettings/settingscomponents/imports/Settings/qmldir
new file mode 100644
index 0000000..2810983
--- /dev/null
+++ b/src/qtdevicesettings/settingscomponents/imports/Settings/qmldir
@@ -0,0 +1,5 @@
+module com.theqtcompany.settings.common
+TextLabel 1.0 TextLabel.qml
+IconButton 1.0 IconButton.qml
+CustomCombobox 1.0 CustomCombobox.qml
+FlatStyledDropdownDelegate 1.0 FlatStyledDropdownDelegate.qml
diff --git a/src/qtdevicesettings/settingscomponents/settingscomponents.pro b/src/qtdevicesettings/settingscomponents/settingscomponents.pro
new file mode 100644
index 0000000..9d2567e
--- /dev/null
+++ b/src/qtdevicesettings/settingscomponents/settingscomponents.pro
@@ -0,0 +1,26 @@
+TEMPLATE = lib
+CONFIG += plugin
+QT += qml
+
+uri = com.theqtcompany.settings.common
+
+DESTDIR = imports/Settings
+TARGET = qmlsettingsplugin
+
+pluginfiles.files += \
+ imports/Settings/qmldir \
+ imports/Settings/TextLabel.qml \
+ imports/Settings/IconButton.qml \
+ imports/Settings/CustomCombobox.qml \
+ imports/Settings/FlatStyledDropdownDelegate.qml
+
+installPath = $$[QT_INSTALL_QML]/$$replace(uri, \\., /)
+
+target.path = $$installPath
+pluginfiles.path += $$installPath
+INSTALLS += target pluginfiles
+
+RESOURCES +=
+
+DISTFILES +=
+
diff --git a/src/qtdevicesettings/settingsui/deployment.pri b/src/qtdevicesettings/settingsui/deployment.pri
new file mode 100644
index 0000000..5441b63
--- /dev/null
+++ b/src/qtdevicesettings/settingsui/deployment.pri
@@ -0,0 +1,27 @@
+android-no-sdk {
+ target.path = /data/user/qt
+ export(target.path)
+ INSTALLS += target
+} else:android {
+ x86 {
+ target.path = /libs/x86
+ } else: armeabi-v7a {
+ target.path = /libs/armeabi-v7a
+ } else {
+ target.path = /libs/armeabi
+ }
+ export(target.path)
+ INSTALLS += target
+} else:unix {
+ isEmpty(target.path) {
+ qnx {
+ target.path = /tmp/$${TARGET}/bin
+ } else {
+ target.path = /opt/$${TARGET}/bin
+ }
+ export(target.path)
+ }
+ INSTALLS += target
+}
+
+export(INSTALLS)
diff --git a/src/qtdevicesettings/settingsui/icons.qrc b/src/qtdevicesettings/settingsui/icons.qrc
new file mode 100644
index 0000000..8656aa4
--- /dev/null
+++ b/src/qtdevicesettings/settingsui/icons.qrc
@@ -0,0 +1,12 @@
+<RCC>
+ <qresource prefix="/">
+ <file>../icons/Chevron-left_black_1x.png</file>
+ <file>../icons/Power_black_1x.png</file>
+ <file>../icons/Display_qt_6x.png</file>
+ <file>../icons/Clock_qt_6x.png</file>
+ <file>../icons/Flag_qt_6x.png</file>
+ <file>../icons/World_qt_6x.png</file>
+ <file>../icons/Audio_qt_6x.png</file>
+ <file>../icons/Bluetooth_qt_6x.png</file>
+ </qresource>
+</RCC>
diff --git a/src/qtdevicesettings/settingsui/main.cpp b/src/qtdevicesettings/settingsui/main.cpp
new file mode 100644
index 0000000..b345225
--- /dev/null
+++ b/src/qtdevicesettings/settingsui/main.cpp
@@ -0,0 +1,41 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the FOO module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** 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 https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QGuiApplication>
+#include <QQmlApplicationEngine>
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication app(argc, argv);
+
+ QQmlApplicationEngine engine;
+ engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
+
+ return app.exec();
+}
diff --git a/src/qtdevicesettings/settingsui/main.qml b/src/qtdevicesettings/settingsui/main.qml
new file mode 100644
index 0000000..4c8080a
--- /dev/null
+++ b/src/qtdevicesettings/settingsui/main.qml
@@ -0,0 +1,170 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the FOO module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** 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 https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.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 QtQuick.XmlListModel 2.0
+import com.theqtcompany.settings.common 1.0
+
+ApplicationWindow {
+ id: root
+ title: qsTr("Device settings")
+ width: 800
+ height: 600
+ visible: true
+ property var service
+
+ SystemPalette { id: systemPalette; colorGroup: SystemPalette.Active }
+
+ toolBar:ToolBar {
+ id: titlebar
+ property string title: ""
+ implicitWidth: parent.width
+ implicitHeight: Math.round(40 * Flat.FlatStyle.scaleFactor)
+ Item {
+ anchors.fill: parent
+
+ ToolButton {
+ iconSource: "../icons/Chevron-left_black_1x.png"
+ text: ""
+ visible: stackView.depth > 1
+ height: parent.height
+ width: parent.height
+ onClicked: stackView.pop();
+ }
+ TextLabel {
+ id: titleText
+ font.pixelSize: Math.round(16 * Flat.FlatStyle.scaleFactor)
+ anchors.fill: parent
+ text: stackView.currentItem.title
+ }
+
+
+ ToolButton {
+ iconSource: "../icons/Power_black_1x.png"
+ text: ""
+ visible: stackView.depth == 1
+ height: parent.height
+ width: parent.height
+ anchors.right: parent.right
+ onClicked: {
+ menu.__xOffset = Math.round(-100 * Flat.FlatStyle.scaleFactor);
+ menu.popup();
+ }
+ }
+ }
+ }
+
+ Menu {
+ id: menu
+ title: ""
+ enabled: false
+
+ MenuItem {
+ text: qsTr("Reboot")
+ onTriggered: B2QtDevice.reboot()
+ }
+
+ MenuItem {
+ text: qsTr("Shutdown")
+ onTriggered: B2QtDevice.powerOff()
+ }
+ }
+
+ StackView {
+ id: stackView
+ initialItem: mainView
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ Component {
+ id: mainView
+ Item {
+ property string title: qsTr("Device Settings")
+ XmlListModel {
+ id: xmlModel
+ source: "settingsview.xml"
+ query: "/xml/settings/item"
+ XmlRole { name: "title"; query: "title/string()"}
+ XmlRole { name: "icon"; query: "icon/string()"}
+ XmlRole { name: "plugin"; query: "plugin/string()"}
+ XmlRole { name: "view"; query: "view/string()"}
+ }
+
+ GridView {
+ id: grid
+ anchors.fill: parent
+ anchors.margins: Math.round(40 * Flat.FlatStyle.scaleFactor)
+ cellHeight: Math.round(133 * Flat.FlatStyle.scaleFactor) + spacing
+ cellWidth: Math.round(117 * Flat.FlatStyle.scaleFactor) + spacing
+ property int spacing: Math.round(20 * Flat.FlatStyle.scaleFactor)
+
+ model: xmlModel
+ delegate:
+ MouseArea {
+ width: grid.cellWidth - grid.spacing
+ height: grid.cellHeight - grid.spacing
+
+ Rectangle {
+ anchors.fill: parent
+ color: "#d6d6d6"
+ radius: 5
+ visible: pressed
+ }
+
+ Column {
+ anchors.fill: parent
+ anchors.topMargin: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ Image {
+ id: image
+ source: icon
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+
+ TextLabel {
+ text: title
+ anchors.horizontalCenter: parent.horizontalCenter
+ font.pixelSize: Math.round(16 * Flat.FlatStyle.scaleFactor)
+ }
+ }
+
+ onClicked: {
+ var url = 'import ' + plugin + '; ' + view + ' {}';
+ stackView.push({item: Qt.createQmlObject(url,stackView)});
+ titlebar.title = title
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/qtdevicesettings/settingsui/qml.qrc b/src/qtdevicesettings/settingsui/qml.qrc
new file mode 100644
index 0000000..7b1f07b
--- /dev/null
+++ b/src/qtdevicesettings/settingsui/qml.qrc
@@ -0,0 +1,6 @@
+<RCC>
+ <qresource prefix="/">
+ <file>main.qml</file>
+ <file>settingsview.xml</file>
+ </qresource>
+</RCC>
diff --git a/src/qtdevicesettings/settingsui/settingsui.pro b/src/qtdevicesettings/settingsui/settingsui.pro
new file mode 100644
index 0000000..026d911
--- /dev/null
+++ b/src/qtdevicesettings/settingsui/settingsui.pro
@@ -0,0 +1,17 @@
+TEMPLATE = app
+
+QT += qml quick
+SOURCES += main.cpp
+
+RESOURCES += \
+ qml.qrc \
+ icons.qrc
+
+# Additional import path used to resolve QML modules in Qt Creator's code model
+QML_IMPORT_PATH =
+
+# Default rules for deployment.
+include(deployment.pri)
+
+DISTFILES += \
+ settingsview.xml
diff --git a/src/qtdevicesettings/settingsui/settingsview.xml b/src/qtdevicesettings/settingsui/settingsview.xml
new file mode 100644
index 0000000..b2cfc51
--- /dev/null
+++ b/src/qtdevicesettings/settingsui/settingsview.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xml>
+ <settings>
+ <item>
+ <title>Network</title>
+ <plugin>com.theqtcompany.settings.network 1.0</plugin>
+ <view>NetworkSettings</view>
+ <icon>../icons/World_qt_6x.png</icon>
+ </item>
+ <item>
+ <title>Display</title>
+ <plugin>com.theqtcompany.settings.general 1.0</plugin>
+ <view>Display</view>
+ <icon>../icons/Display_qt_6x.png</icon>
+ </item>
+ <item>
+ <title>Audio</title>
+ <plugin>com.theqtcompany.settings.general 1.0</plugin>
+ <view>Sound</view>
+ <icon>../icons/Audio_qt_6x.png</icon>
+ </item>
+ <item>
+ <title>Date and Time</title>
+ <plugin>com.theqtcompany.settings.timedate 1.0</plugin>
+ <view>TimeDate</view>
+ <icon>../icons/Clock_qt_6x.png</icon>
+ </item>
+ <item>
+ <title>Language</title>
+ <plugin>com.theqtcompany.settings.locale 1.0</plugin>
+ <view>Language</view>
+ <icon>../icons/Flag_qt_6x.png</icon>
+ </item>
+ <item>
+ <title>Bluetooth</title>
+ <plugin>com.theqtcompany.settings.bluetooth 1.0</plugin>
+ <view>Bluetooth</view>
+ <icon>../icons/Bluetooth_qt_6x.png</icon>
+ </item>
+ </settings>
+</xml>
diff --git a/src/qtdevicesettings/timedateplugin/AnalogClock.qml b/src/qtdevicesettings/timedateplugin/AnalogClock.qml
new file mode 100644
index 0000000..2b89401
--- /dev/null
+++ b/src/qtdevicesettings/timedateplugin/AnalogClock.qml
@@ -0,0 +1,255 @@
+/****************************************************************************
+**
+** 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 com.theqtcompany.settings.common 1.0
+import com.theqtcompany.settings.timedate 1.0
+
+Item {
+ property var currentTime: TimeManager.time
+ property var newTime: new Date
+ property bool editMode: false
+
+ function showTime(time) {
+ return time.getHours() + ":" + time.getMinutes()
+ }
+
+ onEditModeChanged: if (editMode) newTime = new Date
+
+ Rectangle {
+ border.color: "#bdbebf"
+ border.width: 1
+ color: "white"
+ anchors.fill: parent
+
+ Connections {
+ target: TimeManager
+ onTimeChanged : newTime.setSeconds(currentTime.getSeconds())
+ onTimeZoneChanged : Date.timeZoneUpdated()
+ }
+
+ TextLabel {
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.topMargin: 10
+ anchors.top: parent.top
+ text: editMode ? newTime.toTimeString() : currentTime.toTimeString()
+ }
+
+ Rectangle {
+ id: root
+ anchors.fill: parent
+ anchors.margins: Math.round(40 * Flat.FlatStyle.scaleFactor)
+ color: "white"
+ border.color: editMode ? "#d6d6d6" : "#5caa15"
+ border.width: Math.round(root.width * 0.120)
+ radius: parent.width / 2
+ property int handOffset: Math.round(root.width * 0.040)
+ antialiasing: true
+
+ Rectangle {
+ id: minutes
+ x: root.height / 2 - width / 2
+ y: root.height / 2 - height + root.handOffset
+ color: editMode ? "#d6d6d6" : "#5caa15"
+ width: Math.round(root.width * 0.080)
+ height: Math.round(root.height / 2 * 0.65 + root.handOffset)
+ antialiasing: true
+ transform: Rotation {
+ id: minuteRotation
+ origin.x: Math.round(minutes.width / 2)
+ origin.y: Math.round(minutes.height - root.handOffset)
+ angle: currentTime.getMinutes() * 6
+ Behavior on angle {
+ SpringAnimation { spring: 2; damping: 0.2; modulus: 360 }
+ }
+ }
+ }
+
+ Rectangle {
+ id: hours
+ x: Math.round(root.height / 2 - width / 2)
+ y: Math.round(root.height / 2 - height + root.handOffset)
+ height: Math.round(root.height / 2 * 0.4 + root.handOffset)
+ width: Math.round(root.width * 0.080)
+ color: editMode ? "#d6d6d6" : "#80c342"
+ antialiasing: true
+ transform: Rotation {
+ id: hourRotation
+ origin.x: Math.round(hours.width / 2)
+ origin.y: hours.height - root.handOffset;
+ angle: (currentTime.getHours() * 30) + (currentTime.getMinutes() * 0.5)
+ Behavior on angle {
+ SpringAnimation { spring: 2; damping: 0.2; modulus: 360 }
+ }
+ }
+ }
+
+ Rectangle {
+ id: seconds
+ x: root.height / 2 - width / 2
+ y: root.height / 2 - height + root.handOffset
+ visible: !editMode
+ color: "#46a2da"
+ width: Math.round(root.width * 0.0128)
+ height: Math.round(root.height / 2 * 0.74)
+ radius: Math.round(width / 2)
+ antialiasing: true
+ transform: Rotation {
+ id: secondRotation
+ origin.x: Math.round(seconds.width / 2)
+ origin.y: Math.round(seconds.height - root.handOffset)
+ angle: currentTime.getSeconds() * 6
+ Behavior on angle {
+ SpringAnimation { spring: 2; damping: 0.2; modulus: 360 }
+ }
+ }
+ }
+
+ Component {
+ id: editor
+
+ Rectangle {
+ id: rect
+ property var angle: mouseArea.drag ? mouseArea.angle : defaultAngle
+ property var defaultAngle: angleBinding
+ x: Math.round(Math.cos((-90+ angle)*Math.PI/180) *
+ (pos - root.handOffset - width /2 + radius) + root.width / 2 - width / 2)
+ y: Math.round(Math.sin((-90+ angle)*Math.PI/180) *
+ (pos - root.handOffset - width /2 + radius) + root.height / 2 - width / 2)
+ color: "#5caa15"
+ width: size
+ radius: width / 2
+ height: width
+ antialiasing: true
+
+ function calcAngle(mouse) {
+ var mouseGlobal = mapToItem(root, mouse.x, mouse.y)
+ var origin = root.width/2
+ var angle = (90+Math.atan2((mouseGlobal.y-origin), (mouseGlobal.x-origin))*180/Math.PI)
+ if (angle < 0)
+ angle += 360;
+ updateAngle(angle);
+ return angle;
+ }
+
+ MouseArea {
+ id: mouseArea
+ anchors.fill: parent
+ property int startX: 0
+ property int startY: 0
+ property bool drag: false
+ property var angle: 0.0
+ preventStealing: true
+
+ onPressed: {
+ var mouseGlobal = mapToItem(root, mouse.x, mouse.y);
+ startX = mouseGlobal.x;
+ startY = mouseGlobal.y;
+ angle = calcAngle(mouse);
+ drag = true;
+ }
+ onReleased: {
+ drag = false;
+ ready(angle)
+ }
+ onMouseXChanged: if (drag) angle = calcAngle(mouse)
+ }
+ }
+ }
+
+ Loader {
+ property var angleBinding: (currentTime.getHours() * 30) + (currentTime.getMinutes() * 0.5)
+ property int size: Math.round(root.width * 0.120)
+ property int pos: hours.height
+ property bool pm: false
+ visible: editMode
+
+ function updateAngle(angle) {
+ var newHour = Math.floor(angle / 30);
+ var preHour = newTime.getHours();
+
+ if (preHour == 11 && newHour == 0) {
+ newHour = 12;
+ pm = true;
+ }
+ else if (preHour === 23 && newHour === 0) {
+ pm = false;
+ }
+ else if (preHour == 0 && newHour === 11) {
+ pm = true;
+ }
+ else if (preHour == 12 && newHour == 11) {
+ pm = false;
+ }
+
+ if (pm == true) {
+ newHour += 12;
+ }
+
+ newTime.setHours(newHour);
+ }
+
+ function ready(val) {
+ var newhours = Math.round(val / 30);
+ currentTime.setHours(newhours);
+ TimeManager.time = currentTime;
+ }
+ sourceComponent: editor
+ }
+
+ Loader {
+ property var angleBinding: currentTime.getMinutes() * 6
+ property int size: Math.round(root.width * 0.120)
+ property int pos: minutes.height
+ visible: editMode
+ sourceComponent: editor
+
+ function updateAngle(angle) {
+ var newMin = Math.round(angle / 6);
+ var hours = newTime.getHours();
+ newTime.setMinutes(newMin);
+ newTime.setHours(hours);
+ }
+
+ function ready(val) {
+ var newmins = Math.round(val / 6);
+ currentTime.setMinutes(newmins);
+ TimeManager.time = currentTime;
+ }
+ }
+ }
+ }
+}
+
diff --git a/src/qtdevicesettings/timedateplugin/TimeDate.qml b/src/qtdevicesettings/timedateplugin/TimeDate.qml
new file mode 100644
index 0000000..6731805
--- /dev/null
+++ b/src/qtdevicesettings/timedateplugin/TimeDate.qml
@@ -0,0 +1,167 @@
+/****************************************************************************
+**
+** 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.timedate 1.0
+
+Item {
+ id: root
+ property string title: qsTr("Time and Date settings")
+
+ Flickable {
+ anchors.fill: parent
+ anchors.margins: Math.round(40 * Flat.FlatStyle.scaleFactor)
+ anchors.bottomMargin: Math.round(20 * Flat.FlatStyle.scaleFactor)
+ contentHeight: content.height
+ contentWidth: width
+
+ Column {
+ id: content
+ width: parent.width
+
+ GroupBox {
+ width: parent.width
+ title: qsTr("Time Settings")
+ Layout.fillWidth: true
+
+ ColumnLayout {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ width: parent.width
+ Layout.fillWidth: true
+
+ ExclusiveGroup { id: exgroup }
+
+ RadioButton {
+ id: automatic
+ text: qsTr("Automatic time set")
+ exclusiveGroup: exgroup
+ checked: TimeManager.ntp
+ onCheckedChanged: if (checked) calloader.reload();
+ }
+ RadioButton {
+ id: custom
+ text: qsTr("Manual")
+ exclusiveGroup: exgroup
+ checked: !TimeManager.ntp
+ onCheckedChanged: TimeManager.ntp = !checked
+ }
+ RowLayout {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ Layout.fillWidth: true
+
+ Component {
+ id: calendar
+
+ Item {
+ width: cal.width
+ height: cal.height
+
+ Timer {
+ id: timer
+ }
+ function delay(delayTime, cb) {
+ timer.interval = delayTime;
+ timer.repeat = false;
+ timer.triggered.connect(cb);
+ timer.start();
+ }
+
+ Calendar {
+ id: cal
+ weekNumbersVisible: false
+ enabled: !automatic.checked
+ onClicked: {
+ var currentTime = TimeManager.time;
+ var newDate = date;
+ newDate.setHours(currentTime.getHours());
+ newDate.setMinutes(currentTime.getMinutes());
+ newDate.setSeconds(currentTime.getSeconds());
+ TimeManager.time = newDate;
+ delay(100, function() {
+ calloader.reload();
+ });
+ }
+ }
+ }
+ }
+
+ Loader {
+ id: calloader
+ sourceComponent: calendar
+ function reload() {
+ calloader.sourceComponent = undefined;
+ calloader.sourceComponent = calendar;
+ }
+ }
+
+ AnalogClock {
+ id: clock
+ width: calloader.width
+ height: width
+ editMode: !automatic.checked
+ }
+ }
+
+ Component {
+ id: zoneselect
+ TimezonesView { }
+ }
+
+ GroupBox {
+ title: qsTr("Timezone Settings")
+ Layout.fillWidth: true
+ width: parent.width
+ visible: true
+ flat: true
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ TextLabel {
+ text: TimeManager.timeZone
+ }
+ Button {
+ text: "Change"
+ onClicked : stackView.push(zoneselect)
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/qtdevicesettings/timedateplugin/TimezonesView.qml b/src/qtdevicesettings/timedateplugin/TimezonesView.qml
new file mode 100644
index 0000000..458d611
--- /dev/null
+++ b/src/qtdevicesettings/timedateplugin/TimezonesView.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.timedate 1.0
+
+
+Item {
+ id: root
+ Component.onCompleted: timezone.text = TimezonesFilter.filter
+
+ Column {
+ id: content
+ anchors.fill: parent
+ anchors.margins: Math.round(20 * Flat.FlatStyle.scaleFactor)
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+
+ TextLabel {
+ text: qsTr("Search area: ")
+ }
+
+ TextField {
+ id: timezone
+ text: ""
+ onTextChanged: TimezonesFilter.filter = timezone.text
+ }
+ }
+
+ TableView {
+ width: parent.width
+ height: Math.round(parent.height - 40 * Flat.FlatStyle.scaleFactor)
+ Layout.fillWidth: true
+ model: TimezonesFilter
+ headerVisible: true
+
+ TableViewColumn {
+ role: "name"
+ title: qsTr("Timezone")
+ width: Math.round(parent.width * 0.66)
+ }
+ TableViewColumn {
+ role: "country"
+ title: qsTr("Country")
+ width: Math.round(parent.width * 0.33)
+ }
+
+ onClicked: {
+ var val = model.itemFromRow(row);
+ if (val !== "") {
+ TimeManager.timeZone = val;
+ stackView.pop();
+ }
+ }
+ }
+ }
+}
diff --git a/src/qtdevicesettings/timedateplugin/icons.qrc b/src/qtdevicesettings/timedateplugin/icons.qrc
new file mode 100644
index 0000000..af8a564
--- /dev/null
+++ b/src/qtdevicesettings/timedateplugin/icons.qrc
@@ -0,0 +1,4 @@
+<RCC>
+ <qresource prefix="/">
+ </qresource>
+</RCC>
diff --git a/src/qtdevicesettings/timedateplugin/plugin.cpp b/src/qtdevicesettings/timedateplugin/plugin.cpp
new file mode 100644
index 0000000..3fa4939
--- /dev/null
+++ b/src/qtdevicesettings/timedateplugin/plugin.cpp
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+#include <QtQml/QQmlExtensionPlugin>
+#include <QtQml/qqml.h>
+#include <qcoreapplication.h>
+#include <QQmlEngine>
+#include <QQmlContext>
+
+#include "systemtime.h"
+#include "timezonemodel.h"
+#include "timezonefiltermodel.h"
+
+template <typename T>
+QObject *instance(QQmlEngine *engine, QJSEngine *) {
+ T *t = new T(engine);
+ t->setObjectName(T::staticMetaObject.className());
+ return t;
+}
+
+class TimeDateSettingsQmlPlugin : public QQmlExtensionPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
+
+public:
+ void registerTypes(const char *uri)
+ {
+ const QString prefix = "qrc:";
+ qmlRegisterSingletonType<SystemTime>(uri, 1, 0, "TimeManager", &instance<SystemTime>);
+ }
+
+ void initializeEngine(QQmlEngine * engine, const char * uri)
+ {
+ Q_ASSERT(QLatin1String(uri) == QLatin1String("com.theqtcompany.settings.timedate"));
+ TimezoneModel* timezoneModel = new TimezoneModel(engine);
+ TimezoneFilterModel* filter = new TimezoneFilterModel(engine);
+ filter->setSourceModel(timezoneModel);
+
+ engine->rootContext()->setContextProperty("Timezones", timezoneModel);
+ engine->rootContext()->setContextProperty("TimezonesFilter", filter);
+ }
+};
+
+#include "plugin.moc"
diff --git a/src/qtdevicesettings/timedateplugin/qml.qrc b/src/qtdevicesettings/timedateplugin/qml.qrc
new file mode 100644
index 0000000..e04454d
--- /dev/null
+++ b/src/qtdevicesettings/timedateplugin/qml.qrc
@@ -0,0 +1,7 @@
+<RCC>
+ <qresource prefix="/">
+ <file>TimeDate.qml</file>
+ <file>AnalogClock.qml</file>
+ <file>TimezonesView.qml</file>
+ </qresource>
+</RCC>
diff --git a/src/qtdevicesettings/timedateplugin/qmldir b/src/qtdevicesettings/timedateplugin/qmldir
new file mode 100644
index 0000000..2d7a8a6
--- /dev/null
+++ b/src/qtdevicesettings/timedateplugin/qmldir
@@ -0,0 +1,3 @@
+module com.theqtcompany.settings.timedate
+TimeDate 1.0 TimeDate.qml
+plugin qmltimedatesettingsplugin
diff --git a/src/qtdevicesettings/timedateplugin/systemtime.cpp b/src/qtdevicesettings/timedateplugin/systemtime.cpp
new file mode 100644
index 0000000..c84b036
--- /dev/null
+++ b/src/qtdevicesettings/timedateplugin/systemtime.cpp
@@ -0,0 +1,85 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#include "systemtime.h"
+#include "systemtime_p.h"
+
+SystemTime::SystemTime(QObject *parent) :
+ QObject(parent)
+ ,d_ptr(new SystemTimePrivate(this))
+{
+ QTimer *secTimer = new QTimer(this);
+ connect(secTimer, &QTimer::timeout, this, &SystemTime::timeChanged);
+ secTimer->setInterval(1001);
+ secTimer->setSingleShot(false);
+ secTimer->start();
+}
+
+bool SystemTime::ntp() const
+{
+ const Q_D(SystemTime);
+ return d->ntp();
+}
+
+void SystemTime::setNtp(const bool aNtp)
+{
+ Q_D(SystemTime);
+ d->setNtp(aNtp);
+}
+
+void SystemTime::setTime(const QDateTime& aTime)
+{
+ Q_D(SystemTime);
+ d->setTime(aTime.toMSecsSinceEpoch()*1000);
+ emit timeChanged();
+}
+
+QString SystemTime::timeZone() const
+{
+ Q_D(const SystemTime);
+ return d->timeZone();
+}
+
+void SystemTime::setTimeZone(const QString& aTimeZone)
+{
+ Q_D(SystemTime);
+ d->setTimeZone(aTimeZone);
+ emit timeZoneChanged();
+}
+
+QDateTime SystemTime::time() const
+{
+ return QDateTime::currentDateTime();
+}
diff --git a/src/qtdevicesettings/timedateplugin/systemtime.h b/src/qtdevicesettings/timedateplugin/systemtime.h
new file mode 100644
index 0000000..092712c
--- /dev/null
+++ b/src/qtdevicesettings/timedateplugin/systemtime.h
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#ifndef SYSTEMTIME_H
+#define SYSTEMTIME_H
+
+#include <QObject>
+#include <QTime>
+
+class SystemTimePrivate;
+
+class SystemTime : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString timeZone READ timeZone WRITE setTimeZone NOTIFY timeZoneChanged)
+ Q_PROPERTY(bool ntp READ ntp WRITE setNtp NOTIFY ntpChanged)
+ Q_PROPERTY(QDateTime time READ time WRITE setTime NOTIFY timeChanged)
+public:
+ explicit SystemTime(QObject *parent = 0);
+ bool ntp() const;
+ void setNtp(const bool aNtp);
+ void setTime(const QDateTime& aTime);
+ QString timeZone() const;
+ QDateTime time() const;
+ void setTimeZone(const QString& aTimeZone);
+
+signals:
+ void timeZoneChanged();
+ void ntpChanged();
+ void timeChanged();
+
+public slots:
+
+protected:
+ SystemTimePrivate *d_ptr;
+
+ Q_DISABLE_COPY(SystemTime)
+ Q_DECLARE_PRIVATE(SystemTime)
+};
+
+#endif // SYSTEMTIME_H
diff --git a/src/qtdevicesettings/timedateplugin/systemtime_p.h b/src/qtdevicesettings/timedateplugin/systemtime_p.h
new file mode 100644
index 0000000..5ee6eef
--- /dev/null
+++ b/src/qtdevicesettings/timedateplugin/systemtime_p.h
@@ -0,0 +1,88 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#ifndef SYSTEMTIME_P_H
+#define SYSTEMTIME_P_H
+
+#include "systemtime.h"
+#include "timedated_interface.h"
+
+class SystemTimePrivate
+{
+ Q_DECLARE_PUBLIC(SystemTime)
+public:
+ SystemTimePrivate(SystemTime *qq)
+ :q_ptr(qq)
+ {
+ m_timeInterface = new OrgFreedesktopTimedate1Interface(QStringLiteral("org.freedesktop.timedate1"),
+ QStringLiteral("/org/freedesktop/timedate1"),
+ QDBusConnection::systemBus(), qq);
+
+ }
+
+ bool ntp() const {
+ if (m_timeInterface)
+ return m_timeInterface->nTP();
+ return false;
+ }
+
+ void setNtp(bool val) {
+ if (m_timeInterface)
+ m_timeInterface->SetNTP(val, true);
+ }
+
+ QString timeZone() const {
+ if (m_timeInterface)
+ return m_timeInterface->timezone();
+ return "";
+ }
+
+ void setTimeZone(const QString& aTimeZone) {
+ if (m_timeInterface)
+ m_timeInterface->SetTimezone(aTimeZone, true);
+ }
+
+ void setTime(qlonglong usecsSinceEpoch) {
+ if (m_timeInterface)
+ m_timeInterface->SetTime(usecsSinceEpoch, false, true);
+ }
+
+private:
+ OrgFreedesktopTimedate1Interface *m_timeInterface;
+ SystemTime *q_ptr;
+};
+
+
+#endif // SYSTEMTIME_P_H
diff --git a/src/qtdevicesettings/timedateplugin/timedated.xml b/src/qtdevicesettings/timedateplugin/timedated.xml
new file mode 100644
index 0000000..95bafb8
--- /dev/null
+++ b/src/qtdevicesettings/timedateplugin/timedated.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<node name="/Service" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+<node>
+ <interface name="org.freedesktop.timedate1">
+ <property name="Timezone" type="s" access="read"/>
+ <property name="LocalRTC" type="b" access="read"/>
+ <property name="CanNTP" type="b" access="read"/>
+ <property name="NTP" type="b" access="read"/>
+ <method name="SetTime">
+ <arg name="usec_utc" type="x" direction="in"/>
+ <arg name="relative" type="b" direction="in"/>
+ <arg name="user_interaction" type="b" direction="in"/>
+ </method>
+ <method name="SetTimezone">
+ <arg name="timezone" type="s" direction="in"/>
+ <arg name="user_interaction" type="b" direction="in"/>
+ </method>
+ <method name="SetLocalRTC">
+ <arg name="local_rtc" type="b" direction="in"/>
+ <arg name="fix_system" type="b" direction="in"/>
+ <arg name="user_interaction" type="b" direction="in"/>
+ </method>
+ <method name="SetNTP">
+ <arg name="use_ntp" type="b" direction="in"/>
+ <arg name="user_interaction" type="b" direction="in"/>
+ </method>
+ </interface>
+</node>
+
+
diff --git a/src/qtdevicesettings/timedateplugin/timedateplugin.pro b/src/qtdevicesettings/timedateplugin/timedateplugin.pro
new file mode 100644
index 0000000..d82529d
--- /dev/null
+++ b/src/qtdevicesettings/timedateplugin/timedateplugin.pro
@@ -0,0 +1,42 @@
+TEMPLATE = lib
+CONFIG += plugin
+QT += qml dbus
+
+uri = com.theqtcompany.settings.timedate
+
+DBUS_INTERFACES = timedated.xml
+
+DESTDIR = imports/TimeDate
+TARGET = qmltimedatesettingsplugin
+
+SOURCES += plugin.cpp \
+ systemtime.cpp \
+ timezonemodel.cpp \
+ timezonefiltermodel.cpp
+
+pluginfiles.files += \
+ qmldir
+
+
+pluginfiles.files += \
+ AnalogClock.qml \
+ TimeDate.qml \
+ TimezonesView.qml \
+
+installPath = $$[QT_INSTALL_QML]/$$replace(uri, \\., /)
+
+target.path = $$installPath
+pluginfiles.path += $$installPath
+INSTALLS += target pluginfiles
+
+
+RESOURCES += \
+ icons.qrc
+
+HEADERS += \
+ systemtime.h \
+ systemtime_p.h \
+ timezonemodel.h \
+ timezonefiltermodel.h
+
+
diff --git a/src/qtdevicesettings/timedateplugin/timezonefiltermodel.cpp b/src/qtdevicesettings/timedateplugin/timezonefiltermodel.cpp
new file mode 100644
index 0000000..3d1c0a4
--- /dev/null
+++ b/src/qtdevicesettings/timedateplugin/timezonefiltermodel.cpp
@@ -0,0 +1,104 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#include "timezonemodel.h"
+#include "timezonefiltermodel.h"
+
+TimezoneFilterModel::TimezoneFilterModel(QObject* parent)
+ :QSortFilterProxyModel(parent)
+{
+ connect(this, &TimezoneFilterModel::filterChanged, this, &TimezoneFilterModel::invalidate);
+}
+
+TimezoneFilterModel::~TimezoneFilterModel()
+{
+
+}
+
+QString TimezoneFilterModel::filter() const
+{
+ return m_filter;
+}
+
+void TimezoneFilterModel::setFilter(const QString& aFilter)
+{
+ m_filter = aFilter;
+ emit filterChanged();
+}
+
+bool TimezoneFilterModel::filterAcceptsRow( int source_row, const QModelIndex& source_parent ) const
+{
+ bool ret = false;
+ if (this->sourceModel())
+ {
+ QModelIndex index = this->sourceModel()->index( source_row, 0, source_parent );
+ if (index.isValid())
+ {
+ QVariant nameRole = index.data(TimezoneModel::Name);
+ if (nameRole.isValid())
+ {
+ QString name = nameRole.toString();
+ if (name.contains(m_filter, Qt::CaseInsensitive)) {
+ ret = true;
+ }
+ }
+ QVariant countryRole = index.data(TimezoneModel::Country);
+ if (ret == false && countryRole.isValid())
+ {
+ QString country = countryRole.toString();
+ if (country.contains(m_filter, Qt::CaseInsensitive)) {
+ ret = true;
+ }
+ }
+ }
+ }
+ return ret;
+}
+
+QVariant TimezoneFilterModel::itemFromRow(const int row) const
+{
+ QModelIndex idx = index(row, 0);
+ QModelIndex mapped = mapToSource(idx);
+ if (mapped.isValid())
+ {
+ QVariant nameRole = mapped.data(TimezoneModel::Name);
+ if (nameRole.isValid())
+ {
+ return nameRole;
+ }
+ }
+ return QVariant::fromValue(QString(""));
+}
+
diff --git a/src/qtdevicesettings/timedateplugin/timezonefiltermodel.h b/src/qtdevicesettings/timedateplugin/timezonefiltermodel.h
new file mode 100644
index 0000000..dd9009f
--- /dev/null
+++ b/src/qtdevicesettings/timedateplugin/timezonefiltermodel.h
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#ifndef TIMEZONEFILTERMODEL_H
+#define TIMEZONEFILTERMODEL_H
+
+#include <QSortFilterProxyModel>
+
+class TimezoneFilterModel : public QSortFilterProxyModel
+{
+ Q_OBJECT
+ Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
+public:
+ explicit TimezoneFilterModel(QObject* parent);
+ virtual ~TimezoneFilterModel();
+ bool filterAcceptsRow( int source_row, const QModelIndex& source_parent ) const override;
+ QString filter() const;
+ void setFilter(const QString& aFilter);
+ Q_INVOKABLE QVariant itemFromRow(const int row) const;
+signals:
+ void filterChanged();
+private:
+ QString m_filter;
+
+};
+
+#endif // TIMEZONEFILTERMODEL_H
diff --git a/src/qtdevicesettings/timedateplugin/timezonemodel.cpp b/src/qtdevicesettings/timedateplugin/timezonemodel.cpp
new file mode 100644
index 0000000..b6cf27b
--- /dev/null
+++ b/src/qtdevicesettings/timedateplugin/timezonemodel.cpp
@@ -0,0 +1,140 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+#include <QLocale>
+#include <QQmlPropertyMap>
+#include <QFuture>
+#include <QThread>
+#include <QtConcurrent/QtConcurrentRun>
+#include "timezonemodel.h"
+
+TimezoneItem::TimezoneItem(const QByteArray& id, QObject *parent)
+ :QObject(parent)
+{
+ QTimeZone tz = QTimeZone(id);
+ m_name = tz.displayName(QTimeZone::StandardTime);
+ m_country = QLocale::countryToString(tz.country());
+ m_id = id;
+}
+
+QString TimezoneItem::name() const
+{
+ return m_name;
+}
+
+QString TimezoneItem::country() const
+{
+ return m_country;
+}
+
+QString TimezoneItem::id() const
+{
+ return m_id;
+}
+
+TimezoneModel::TimezoneModel(QObject *parent)
+ : QAbstractListModel(parent)
+{
+ m_roleNames.insert(Qt::UserRole, "modelData");
+ m_roleNames.insert(Country, "country");
+ m_roleNames.insert(Name, "name");
+ m_roleNames.insert(Id, "id");
+
+ QFuture<void> t1 = QtConcurrent::run(TimezoneModel::generateModel, this);
+}
+
+void TimezoneModel::generateModel(TimezoneModel* model)
+{
+ QList<QByteArray> ids = QTimeZone::availableTimeZoneIds();
+ foreach (QByteArray id, ids) {
+ TimezoneItem *zone = new TimezoneItem(id);
+ zone->moveToThread(model->thread());
+ QMetaObject::invokeMethod(model, "addNewItem", Q_ARG( QObject*, qobject_cast<QObject*>(zone)));
+ }
+}
+
+void TimezoneModel::addNewItem(QObject* item)
+{
+ beginInsertRows(QModelIndex(), m_items.count(), m_items.count());
+ TimezoneItem* newItem = qobject_cast<TimezoneItem*>(item);
+ if (newItem)
+ m_items.append(newItem);
+ endInsertRows();
+}
+
+TimezoneModel::~TimezoneModel()
+{
+ qDeleteAll(m_items);
+}
+
+QHash<int, QByteArray> TimezoneModel::roleNames() const
+{
+ return m_roleNames;
+}
+
+
+int TimezoneModel::rowCount(const QModelIndex & parent) const
+{
+ Q_UNUSED(parent);
+ return m_items.count();
+}
+
+QVariant TimezoneModel::data(const QModelIndex & index, int role) const
+{
+ if (!index.isValid()) return QVariant();
+
+ TimezoneItem *item = m_items[index.row()];
+ if (role == Qt::UserRole) {
+ return item->id();
+ }
+
+ switch (role) {
+ case Name:
+ return item->id();
+ break;
+ case Country:
+ return item->country();
+ break;
+ case Id:
+ return item->id();
+ break;
+ case Qt::DisplayRole:
+ return item->id();
+ break;
+ default:
+ return "";
+ }
+}
diff --git a/src/qtdevicesettings/timedateplugin/timezonemodel.h b/src/qtdevicesettings/timedateplugin/timezonemodel.h
new file mode 100644
index 0000000..af86c75
--- /dev/null
+++ b/src/qtdevicesettings/timedateplugin/timezonemodel.h
@@ -0,0 +1,89 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+#ifndef TIMEZONEMODEL_H
+#define TIMEZONEMODEL_H
+
+#include <QObject>
+#include <QAbstractListModel>
+#include <QTimeZone>
+#include <QMutex>
+
+class TimezoneItem : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString id READ id CONSTANT)
+public:
+ explicit TimezoneItem(const QByteArray& id, QObject *parent=0);
+ QString name() const;
+ QString country() const;
+ QString id() const;
+
+private:
+ QString m_name;
+ QString m_country;
+ QString m_id;
+};
+
+class TimezoneModel : public QAbstractListModel
+{
+ Q_OBJECT
+
+public:
+ explicit TimezoneModel(QObject *parent=0);
+ virtual ~TimezoneModel();
+ // from QAbstractItemModel
+ int rowCount(const QModelIndex & parent = QModelIndex()) const;
+ QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
+ QHash<int, QByteArray> roleNames() const;
+ Q_INVOKABLE QVariant itemFromRow(const int row) const;
+
+ enum Roles {
+ Name = Qt::UserRole + 1,
+ Country,
+ Id
+ };
+
+ static void generateModel(TimezoneModel* model);
+
+private slots:
+ void addNewItem(QObject* item);
+
+private:
+ QList<TimezoneItem*> m_items;
+ QHash<int, QByteArray> m_roleNames;
+};
+
+#endif // TIMEZONEMODEL_H
diff --git a/src/qtdevicesettings/wifisettingsplugin/WifiManagerView.qml b/src/qtdevicesettings/wifisettingsplugin/WifiManagerView.qml
new file mode 100644
index 0000000..71115d5
--- /dev/null
+++ b/src/qtdevicesettings/wifisettingsplugin/WifiManagerView.qml
@@ -0,0 +1,180 @@
+/****************************************************************************
+**
+** 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.wifi 1.0
+import B2Qt.Wifi 1.0
+
+Item {
+ id: root
+ Component.onCompleted: {
+ if (WifiManager.backendState === WifiManager.NotRunning) {
+ WifiManager.start();
+ }
+ else if (WifiManager.backendState == WifiManager.Running) {
+ WifiManager.scanning = true;
+ }
+ }
+
+ WifiConfiguration {
+ id: config
+ property bool connected: WifiManager.networkState === WifiManager.Connected
+ }
+
+ ColumnLayout {
+ id: content
+ anchors.fill: parent
+
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+
+ TextLabel {
+ text: qsTr("Selected network ")
+ width: root.width*0.382
+ horizontalAlignment: Text.AlignRight
+ }
+
+ CustomCombobox {
+ id: networkSelection
+ model: WifiManager.networks
+ width: Math.round(200 * Flat.FlatStyle.scaleFactor)
+ textRole: "ssid"
+ Component.onCompleted: {
+ setSelectIndexToVal(WifiManager.currentSSID, "ssid");
+ }
+ onSelectedIndexChanged : {
+ var ssid = networkSelection.textValue;
+ config.ssid = ssid;
+ if (WifiManager.currentSSID !== ssid || !config.connected) {
+ connectView.visible = true;
+ }
+ }
+ delegate: WifiSelectorDelegate { }
+ }
+
+ Image {
+ id: warning
+ anchors.verticalCenter: parent.verticalCenter
+ source: "../icons/Alert_yellow_1x.png"
+ visible: WifiManager.state === WifiManager.HandshakeFailed ||
+ WifiManager.state === WifiManager.DhcpRequestFailed
+ }
+ }
+
+ Button {
+ id: disconnect
+ text: qsTr("Disconnect")
+ visible: config.connected
+ onClicked: {
+ WifiManager.disconnect();
+ networkSelection.currentIndex = -1;
+ }
+ }
+
+ GroupBox {
+ id: connectView
+ title: qsTr("Enter a password")
+ flat: false
+ visible: false
+ ColumnLayout {
+ Row {
+ id: errorView
+ property alias text: text.text
+ visible: text.text !== ""
+
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ Image {
+ source: "../icons/Alert_yellow_1x.png"
+ }
+ Text {
+ id: text
+ color: "#face20"
+ text: ""
+ }
+ }
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ visible: false
+ TextLabel {
+ text: qsTr("User name")
+ width: root.width*0.382
+ horizontalAlignment: Text.AlignRight
+ }
+ TextField {
+ text: ""
+ inputMethodHints: Qt.ImhNoPredictiveText
+ }
+ }
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ TextLabel {
+ text: qsTr("Password")
+ horizontalAlignment: Text.AlignRight
+ }
+ TextField {
+ id: password
+ text: ""
+ echoMode: TextInput.Password
+ inputMethodHints: Qt.ImhNoPredictiveText
+ }
+ }
+ Row {
+ spacing: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ Button {
+ text: qsTr("Connect")
+ onClicked: {
+ config.passphrase = password.text
+ if (!WifiManager.connect(config)) {
+ print("failed to connect: " + WifiManager.lastError)
+ errorView.text = qsTr("Invalid password");
+ }
+ else {
+ connectView.visible = false
+ }
+ }
+ }
+ Button {
+ text: qsTr("Cancel")
+ onClicked:connectView.visible = false
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/qtdevicesettings/wifisettingsplugin/WifiSelectorDelegate.qml b/src/qtdevicesettings/wifisettingsplugin/WifiSelectorDelegate.qml
new file mode 100644
index 0000000..cea3750
--- /dev/null
+++ b/src/qtdevicesettings/wifisettingsplugin/WifiSelectorDelegate.qml
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** 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 com.theqtcompany.settings.common 1.0
+import com.theqtcompany.settings.wifi 1.0
+
+Item {
+ id: root
+ property bool checkable: true
+ property bool checked: false
+ property bool pressed: false
+ signal clicked()
+
+ MouseArea {
+ id: delegateButton
+ anchors.fill: parent
+ hoverEnabled: true
+ onPressed: root.pressed = true
+ onClicked: root.clicked()
+ onEntered: checked = !checked
+
+ Rectangle {
+ anchors.fill: parent
+ color: root.checked ? Flat.FlatStyle.disabledColor : "transparent"
+ opacity: root.checked ? 0.15 : 1.0
+ }
+ Rectangle {
+ color: Flat.FlatStyle.darkFrameColor
+ width: parent.width
+ height: Flat.FlatStyle.onePixel
+ anchors.bottom: parent.bottom
+ }
+ TextLabel {
+ id: text
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+ anchors.margins: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ horizontalAlignment: Text.AlignLeft
+ text: modelData["ssid"]
+ }
+ WifiSignalMonitor {
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.right
+ anchors.margins: Math.round(10 * Flat.FlatStyle.scaleFactor)
+ height: Math.round(parent.height * .8)
+ width: height
+ signalStrength: modelData["signalStrength"]
+ }
+ }
+}
diff --git a/src/qtdevicesettings/wifisettingsplugin/WifiSignalMonitor.qml b/src/qtdevicesettings/wifisettingsplugin/WifiSignalMonitor.qml
new file mode 100644
index 0000000..e3ab0c8
--- /dev/null
+++ b/src/qtdevicesettings/wifisettingsplugin/WifiSignalMonitor.qml
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** 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
+
+Item {
+ id: root
+
+ property bool scanning: false
+ property int signalStrength: 100
+ property bool connected: false
+
+ onSignalStrengthChanged: {
+ sprite.visible = true;
+
+ if (signalStrength < 10) {
+ sprite.visible = false;
+ }
+ else if (signalStrength < 30) {
+ sprite.currentFrame = 0;
+ }
+ else if (signalStrength < 60) {
+ sprite.currentFrame = 1;
+ }
+ else if (signalStrength < 80) {
+ sprite.currentFrame = 2;
+ }
+ else if (signalStrength <= 100) {
+ sprite.currentFrame = 3;
+ }
+ }
+
+ Image {
+ anchors.fill: parent
+ source: "../icons/Wifi_lightgray_2x.png"
+ }
+
+ AnimatedSprite {
+ id: sprite
+ anchors.fill: parent
+ source: connected ? "../icons/WifiAnim_qt_2x.png" : "../icons/WifiAnim_black_2x.png"
+ frameDuration: 500
+ frameCount: 4
+ currentFrame: 3
+ frameSync: false
+ frameWidth: 32
+ frameHeight: 32
+ loops: 40
+ running: scanning
+ }
+}
diff --git a/src/qtdevicesettings/wifisettingsplugin/icons.qrc b/src/qtdevicesettings/wifisettingsplugin/icons.qrc
new file mode 100644
index 0000000..ac67804
--- /dev/null
+++ b/src/qtdevicesettings/wifisettingsplugin/icons.qrc
@@ -0,0 +1,7 @@
+<RCC>
+ <qresource prefix="/">
+ <file>../icons/Wifi_lightgray_2x.png</file>
+ <file>../icons/WifiAnim_black_2x.png</file>
+ <file>../icons/Alert_yellow_1x.png</file>
+ </qresource>
+</RCC>
diff --git a/src/qtdevicesettings/wifisettingsplugin/plugin.cpp b/src/qtdevicesettings/wifisettingsplugin/plugin.cpp
new file mode 100644
index 0000000..c87f68a
--- /dev/null
+++ b/src/qtdevicesettings/wifisettingsplugin/plugin.cpp
@@ -0,0 +1,58 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+#include <QtQml/QQmlExtensionPlugin>
+#include <QtQml/qqml.h>
+#include <qcoreapplication.h>
+
+class WifiSettingsQmlPlugin : public QQmlExtensionPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
+
+public:
+ void registerTypes(const char *uri)
+ {
+ Q_ASSERT(QLatin1String(uri) == QLatin1String("com.theqtcompany.settings.wifi"));
+ const QString prefix = "qrc:";
+ qmlRegisterType(QUrl(prefix + "WifiManagerView.qml"), uri, 1, 0, "WifiManagerView");
+ qmlRegisterType(QUrl(prefix + "WifiSignalMonitor.qml"), uri, 1, 0, "WifiSignalMonitor");
+ qmlRegisterType(QUrl(prefix + "WifiSelectorDelegate.qml"), uri, 1, 0, "WifiSelectorDelegate");
+
+ }
+};
+
+#include "plugin.moc"
diff --git a/src/qtdevicesettings/wifisettingsplugin/qml.qrc b/src/qtdevicesettings/wifisettingsplugin/qml.qrc
new file mode 100644
index 0000000..b43e801
--- /dev/null
+++ b/src/qtdevicesettings/wifisettingsplugin/qml.qrc
@@ -0,0 +1,7 @@
+<RCC>
+ <qresource prefix="/">
+ <file>WifiManagerView.qml</file>
+ <file>WifiSignalMonitor.qml</file>
+ <file>WifiSelectorDelegate.qml</file>
+ </qresource>
+</RCC>
diff --git a/src/qtdevicesettings/wifisettingsplugin/qmldir b/src/qtdevicesettings/wifisettingsplugin/qmldir
new file mode 100644
index 0000000..d5c237e
--- /dev/null
+++ b/src/qtdevicesettings/wifisettingsplugin/qmldir
@@ -0,0 +1,2 @@
+module com.theqtcompany.settings.wifi
+plugin qmlwifiplugin
diff --git a/src/qtdevicesettings/wifisettingsplugin/wifisettingsplugin.pro b/src/qtdevicesettings/wifisettingsplugin/wifisettingsplugin.pro
new file mode 100644
index 0000000..aa50429
--- /dev/null
+++ b/src/qtdevicesettings/wifisettingsplugin/wifisettingsplugin.pro
@@ -0,0 +1,26 @@
+TEMPLATE = lib
+CONFIG += plugin
+QT += qml
+
+uri = com.theqtcompany.settings.wifi
+
+DESTDIR = imports/Wifi
+TARGET = qmlwifiplugin
+
+SOURCES += plugin.cpp
+
+pluginfiles.files += \
+ qmldir \
+
+installPath = $$[QT_INSTALL_QML]/$$replace(uri, \\., /)
+
+target.path = $$installPath
+pluginfiles.path += $$installPath
+INSTALLS += target pluginfiles
+
+
+RESOURCES += \
+ icons.qrc \
+ qml.qrc
+
+HEADERS +=