diff options
-rw-r--r-- | src/imports/networksettings/plugin.cpp | 10 | ||||
-rw-r--r-- | src/imports/networksettings/plugins.qmltypes | 20 | ||||
-rw-r--r-- | src/networksettings/qnetworksettingsmanager.cpp | 21 | ||||
-rw-r--r-- | src/networksettings/qnetworksettingsmanager.h | 4 | ||||
-rw-r--r-- | src/settingsui/bluetooth/Bluetooth.qml | 1 | ||||
-rw-r--r-- | src/settingsui/common/CustomSwitch.qml (renamed from src/settingsui/bluetooth/CustomSwitch.qml) | 0 | ||||
-rw-r--r-- | src/settingsui/network/NetworkSettings.qml | 78 | ||||
-rw-r--r-- | src/settingsui/settingsuiapp.qrc | 2 | ||||
-rw-r--r-- | src/settingsui/settingsuiplugin/plugin.qrc | 2 |
9 files changed, 126 insertions, 12 deletions
diff --git a/src/imports/networksettings/plugin.cpp b/src/imports/networksettings/plugin.cpp index 665cb6a..431a099 100644 --- a/src/imports/networksettings/plugin.cpp +++ b/src/imports/networksettings/plugin.cpp @@ -32,6 +32,7 @@ #include <qnetworksettingsservice.h> #include <qnetworksettingsuseragent.h> #include <qnetworksettingsservicemodel.h> +#include <qnetworksettingsinterface.h> #include <qnetworksettingsinterfacemodel.h> #include <qqml.h> @@ -122,6 +123,14 @@ */ /*! + \qmlmethod NetworkInterface NetworkSettingsManager::interface(int type, int instance) + + Returns the interface with type \a type and order number of \a instance + + \sa NetworkInterface +*/ + +/*! \qmlmethod NetworkSettingsManager::userAgent.setPassphrase(string passphrase) Sets the \a passphrase for connecting to a Wifi network. @@ -162,6 +171,7 @@ void NetworksettingspluginPlugin::registerTypes(const char *uri) { Q_ASSERT(QLatin1String(uri) == QLatin1String("QtDeviceUtilities.NetworkSettings")); qmlRegisterUncreatableType<QNetworkSettingsService>(uri, 1, 0, "NetworkService", "Cannot be instantiated directly."); + qmlRegisterUncreatableType<QNetworkSettingsInterface>(uri, 1, 0, "NetworkInterface", "Cannot be instantiated directly."); qmlRegisterUncreatableType<QNetworkSettingsIPv4>(uri, 1, 0, "NetworkSettingsIPv4", "Cannot be instantiated directly."); qmlRegisterUncreatableType<QNetworkSettingsIPv6>(uri, 1, 0, "NetworkSettingsIPv6", "Cannot be instantiated directly."); qmlRegisterUncreatableType<QNetworkSettingsProxy>(uri, 1, 0, "NetworkSettingsProxy", "Cannot be instantiated directly."); diff --git a/src/imports/networksettings/plugins.qmltypes b/src/imports/networksettings/plugins.qmltypes index 5022d6f..ac0d3fc 100644 --- a/src/imports/networksettings/plugins.qmltypes +++ b/src/imports/networksettings/plugins.qmltypes @@ -7,7 +7,7 @@ import QtQuick.tooling 1.2 // 'qmlplugindump -nonrelocatable QtDeviceUtilities.NetworkSettings 1.0' Module { - dependencies: [] + dependencies: ["QtQuick 2.8"] Component { name: "QNetworkSettingsIPv4" prototype: "QObject" @@ -56,6 +56,18 @@ Module { Property { name: "prefixLength"; type: "int" } } Component { + name: "QNetworkSettingsInterface" + prototype: "QObject" + exports: ["QtDeviceUtilities.NetworkSettings/NetworkInterface 1.0"] + isCreatable: false + exportMetaObjectRevisions: [0] + Property { name: "name"; type: "string"; isReadonly: true } + Property { name: "state"; type: "QNetworkSettingsState::States"; isReadonly: true } + Property { name: "type"; type: "QNetworkSettingsType::Types"; isReadonly: true } + Property { name: "powered"; type: "bool" } + Method { name: "scanServices" } + } + Component { name: "QNetworkSettingsManager" prototype: "QObject" exports: [ @@ -88,6 +100,12 @@ Module { Parameter { name: "name"; type: "string" } Parameter { name: "type"; type: "int" } } + Method { + name: "interface" + type: "QNetworkSettingsInterface*" + Parameter { name: "type"; type: "int" } + Parameter { name: "instance"; type: "int" } + } } Component { name: "QNetworkSettingsProxy" diff --git a/src/networksettings/qnetworksettingsmanager.cpp b/src/networksettings/qnetworksettingsmanager.cpp index caf6057..eb687d1 100644 --- a/src/networksettings/qnetworksettingsmanager.cpp +++ b/src/networksettings/qnetworksettingsmanager.cpp @@ -29,6 +29,7 @@ #include "qnetworksettingsmanager.h" #include "qnetworksettingsservice.h" #include "qnetworksettingsservicemodel.h" +#include "qnetworksettingsinterface.h" #include "qnetworksettingsinterfacemodel.h" #include "qnetworksettingsmanager_p.h" #include <QStringListModel> @@ -51,7 +52,7 @@ QNetworkSettingsInterfaceModel *QNetworkSettingsManager::interfaces() return &d->m_interfaceModel; } -QNetworkSettingsService* QNetworkSettingsManager::service(const QString& name, const int type) +QNetworkSettingsService* QNetworkSettingsManager::service(const QString& name, int type) { Q_D(QNetworkSettingsManager); @@ -60,7 +61,23 @@ QNetworkSettingsService* QNetworkSettingsManager::service(const QString& name, c return service; } } - return NULL; + return nullptr; +} + +QNetworkSettingsInterface* QNetworkSettingsManager::interface(int type, int instance) +{ + Q_D(QNetworkSettingsManager); + int matchingInstance = 0; + + foreach (QNetworkSettingsInterface* interface, d->m_interfaceModel.getModel()) { + if (interface->type() == type) { + if (matchingInstance == instance) { + return interface; + } + matchingInstance++; + } + } + return nullptr; } void QNetworkSettingsManager::setUserAgent(QNetworkSettingsUserAgent *agent) diff --git a/src/networksettings/qnetworksettingsmanager.h b/src/networksettings/qnetworksettingsmanager.h index 7e7cfad..3ce5095 100644 --- a/src/networksettings/qnetworksettingsmanager.h +++ b/src/networksettings/qnetworksettingsmanager.h @@ -38,6 +38,7 @@ QT_FORWARD_DECLARE_CLASS(QNetworkSettingsService) QT_FORWARD_DECLARE_CLASS(QNetworkSettingsServiceModel) QT_FORWARD_DECLARE_CLASS(QNetworkSettingsUserAgent) QT_FORWARD_DECLARE_CLASS(QNetworkSettingsServiceFilter) +QT_FORWARD_DECLARE_CLASS(QNetworkSettingsInterface) QT_FORWARD_DECLARE_CLASS(QNetworkSettingsInterfaceModel) QT_BEGIN_NAMESPACE @@ -57,7 +58,8 @@ public: void setUserAgent(QNetworkSettingsUserAgent *agent); QNetworkSettingsUserAgent* userAgent(); - Q_INVOKABLE QNetworkSettingsService* service(const QString& name, const int type); + Q_INVOKABLE QNetworkSettingsService* service(const QString& name, int type); + Q_INVOKABLE QNetworkSettingsInterface* interface(int type, int instance); Q_SIGNALS: void servicesChanged(); diff --git a/src/settingsui/bluetooth/Bluetooth.qml b/src/settingsui/bluetooth/Bluetooth.qml index 13572a8..e89476f 100644 --- a/src/settingsui/bluetooth/Bluetooth.qml +++ b/src/settingsui/bluetooth/Bluetooth.qml @@ -30,6 +30,7 @@ import QtQuick 2.6 import QtQuick.Layouts 1.3 import QtQuick.Controls 2.0 import QtDeviceUtilities.BluetoothSettings 1.0 +import "../common" Item { id: root diff --git a/src/settingsui/bluetooth/CustomSwitch.qml b/src/settingsui/common/CustomSwitch.qml index fa9f9aa..fa9f9aa 100644 --- a/src/settingsui/bluetooth/CustomSwitch.qml +++ b/src/settingsui/common/CustomSwitch.qml diff --git a/src/settingsui/network/NetworkSettings.qml b/src/settingsui/network/NetworkSettings.qml index b3a6350..719ce77 100644 --- a/src/settingsui/network/NetworkSettings.qml +++ b/src/settingsui/network/NetworkSettings.qml @@ -30,13 +30,79 @@ import QtQuick 2.6 import QtQuick.Layouts 1.3 import QtQuick.Controls 2.2 import QtDeviceUtilities.NetworkSettings 1.0 +import QtDeviceUtilities.BluetoothSettings 1.0 +import "../common" Item { - NetworkListView { - id: networkList - anchors.top: parent.top - anchors.left: parent.left - anchors.right: parent.right - anchors.bottom: parent.bottom + id: root + property string title: qsTr("Network Settings") + + Column { + id: networkSettingsColumn + spacing: pluginMain.spacing + anchors.margins: viewSettings.pageMargin + + Row { + spacing: root.width * 0.025 + leftPadding: pluginMain.margin + Text { + text: qsTr("Wi-Fi") + anchors.verticalCenter: parent.verticalCenter + font.pixelSize: pluginMain.subTitleFontSize + font.family: appFont + color: "white" + } + + CustomSwitch { + id: wifiSwitch + indicatorWidth: root.width * 0.15 + indicatorHeight: root.height * 0.06 + property bool wiFiAvailable: NetworkSettingsManager.interface(NetworkSettingsType.Wifi, 0) !== null + enabled: wiFiAvailable && !wifiSwitchTimer.running + onCheckedChanged: { + // Power on/off all WiFi interfaces + for (var i = 0; NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i) !== null; i++) { + NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i).powered = checked + wifiSwitchTimer.start() + } + } + Component.onCompleted: { + // If any of the WiFi interfaces is powered on, switch is checked + var checkedStatus = false; + for (var i = 0; NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i) !== null; i++) { + if (NetworkSettingsManager.interface(NetworkSettingsType.Wifi, i).powered) { + checkedStatus = true; + break; + } + } + checked = checkedStatus; + } + + // At least 1s between switching on/off + Timer { + id: wifiSwitchTimer + interval: 1000 + running: false + } + } + } + + Text { + text: qsTr("Network list:") + font.pixelSize: pluginMain.subTitleFontSize + font.family: appFont + font.styleName: "SemiBold" + color: "white" + } + + Row { + id: listViewRow + leftPadding: pluginMain.margin + NetworkListView { + id: networkList + width: root.width - listViewRow.leftPadding + height: root.height - listViewRow.y - networkSettingsColumn.anchors.margins + } + } } } diff --git a/src/settingsui/settingsuiapp.qrc b/src/settingsui/settingsuiapp.qrc index 618d761..a3e7ca5 100644 --- a/src/settingsui/settingsuiapp.qrc +++ b/src/settingsui/settingsuiapp.qrc @@ -6,7 +6,7 @@ <file>power/Power.qml</file> <file>timedate/ManualTime.qml</file> <file>timedate/CustomComboBox.qml</file> - <file>bluetooth/CustomSwitch.qml</file> + <file>common/CustomSwitch.qml</file> <file>network/PassphraseEnter.qml</file> <file>locale/TableKey.qml</file> <file>locale/TableValue.qml</file> diff --git a/src/settingsui/settingsuiplugin/plugin.qrc b/src/settingsui/settingsuiplugin/plugin.qrc index 733c164..e6d02ea 100644 --- a/src/settingsui/settingsuiplugin/plugin.qrc +++ b/src/settingsui/settingsuiplugin/plugin.qrc @@ -27,7 +27,7 @@ <file>../power/Power.qml</file> <file>../timedate/ManualTime.qml</file> <file>../timedate/CustomComboBox.qml</file> - <file>../bluetooth/CustomSwitch.qml</file> + <file>../common/CustomSwitch.qml</file> <file>../network/NetworkListView.qml</file> <file>../network/PassphraseEnter.qml</file> <file>../locale/TableKey.qml</file> |