diff options
-rw-r--r-- | .qmake.conf | 2 | ||||
-rw-r--r-- | coin/product_dependencies.yaml | 4 | ||||
-rw-r--r-- | src/networksettings/connman/qnetworksettingsmanager_p.cpp | 175 | ||||
-rw-r--r-- | src/networksettings/connman/qnetworksettingsmanager_p.h | 25 | ||||
-rw-r--r-- | src/networksettings/qnetworksettings.cpp | 7 | ||||
-rw-r--r-- | src/networksettings/qnetworksettingsinterfacemodel.cpp | 9 | ||||
-rw-r--r-- | src/networksettings/qnetworksettingsmanager.cpp | 37 | ||||
-rw-r--r-- | src/networksettings/qnetworksettingsmanager.h | 10 | ||||
-rw-r--r-- | src/settingsui/ViewSettings.qml | 1 | ||||
-rw-r--r-- | src/settingsui/network/NetworkSettings.qml | 293 | ||||
-rw-r--r-- | src/timedatesettings/timezonemodel.h | 2 |
11 files changed, 451 insertions, 114 deletions
diff --git a/.qmake.conf b/.qmake.conf index d908038..d7ba8c9 100644 --- a/.qmake.conf +++ b/.qmake.conf @@ -1,3 +1,3 @@ load(qt_build_config) -MODULE_VERSION=5.15.1 +MODULE_VERSION=5.15.17 CMAKE_MODULE_TESTS=- diff --git a/coin/product_dependencies.yaml b/coin/product_dependencies.yaml new file mode 100644 index 0000000..36bf8b6 --- /dev/null +++ b/coin/product_dependencies.yaml @@ -0,0 +1,4 @@ +dependencies: + ../tqtc-qt5.git: + ref: "tqtc/lts-5.15" + diff --git a/src/networksettings/connman/qnetworksettingsmanager_p.cpp b/src/networksettings/connman/qnetworksettingsmanager_p.cpp index 5bea9e2..36dddfe 100644 --- a/src/networksettings/connman/qnetworksettingsmanager_p.cpp +++ b/src/networksettings/connman/qnetworksettingsmanager_p.cpp @@ -33,10 +33,14 @@ #include "qnetworksettingsinterface_p.h" #include "qnetworksettingsservicemodel.h" #include "qnetworksettingsuseragent.h" +#include <QFile> +#include <QNetworkInterface> QT_BEGIN_NAMESPACE const QString ConnManServiceName(QStringLiteral("net.connman")); +const QString QdbdFileName(QStringLiteral("/etc/default/qdbd")); +const char* SearchKeyword("USB_ETHERNET_PROTOCOL="); QNetworkSettingsManagerPrivate::QNetworkSettingsManagerPrivate(QNetworkSettingsManager *parent) :QObject(parent) @@ -137,8 +141,7 @@ void QNetworkSettingsManagerPrivate::tryNextConnection() } if (!service) { if (!m_unnamedServicesForSsidConnection.isEmpty()) { - service = *m_unnamedServicesForSsidConnection.begin(); - m_unnamedServicesForSsidConnection.erase(m_unnamedServicesForSsidConnection.begin()); + service = m_unnamedServicesForSsidConnection.take(m_unnamedServicesForSsidConnection.firstKey()); } else { q->clearConnectionState(); } @@ -148,6 +151,26 @@ void QNetworkSettingsManagerPrivate::tryNextConnection() } } +void QNetworkSettingsManagerPrivate::setCurrentWifiConnection(QNetworkSettingsService *connection) +{ + m_currentWifiConnection = connection; +} + +QNetworkSettingsService *QNetworkSettingsManagerPrivate::currentWifiConnection() const +{ + return m_currentWifiConnection.data(); +} + +void QNetworkSettingsManagerPrivate::setCurrentWiredConnection(QNetworkSettingsService *connection) +{ + m_currentWiredConnection = connection; +} + +QNetworkSettingsService *QNetworkSettingsManagerPrivate::currentWiredConnection() const +{ + return m_currentWiredConnection.data(); +} + void QNetworkSettingsManagerPrivate::onConnmanServiceRegistered(const QString &serviceName) { if (serviceName == ConnManServiceName) { @@ -184,7 +207,7 @@ void QNetworkSettingsManagerPrivate::onTechnologyRemoved(const QDBusObjectPath & foreach (QNetworkSettingsInterface* item, m_interfaceModel.getModel()) { ConnmanSettingsInterface* tech = qobject_cast<ConnmanSettingsInterface*>(item); if (tech->path() == technology.path()) { - m_interfaceModel.removeInterface(technology.path()); + m_interfaceModel.removeInterface(tech->name()); emit q->interfacesChanged(); } } @@ -229,21 +252,43 @@ void QNetworkSettingsManagerPrivate::getTechnologiesFinished(QDBusPendingCallWat void QNetworkSettingsManagerPrivate::onServicesChanged(ConnmanMapStructList changed, const QList<QDBusObjectPath> &removed) { - foreach (QDBusObjectPath path, removed) { - m_serviceModel->removeService(path.path()); - auto serviceIter = m_unnamedServices.find(path.path()); - if (serviceIter != m_unnamedServices.end()) { - serviceIter.value()->deleteLater(); - m_unnamedServices.erase(serviceIter); - } + Q_Q(QNetworkSettingsManager); + foreach (const QDBusObjectPath &dpath, removed) { + QString path = dpath.path(); + + if (m_serviceModel->removeService(path)) + emit q->servicesChanged(); + + if (auto service = m_unnamedServices.take(path)) + if (!service->placeholderState()) { + disconnect(service, &QNetworkSettingsService::nameChanged, + this, &QNetworkSettingsManagerPrivate::serviceReady); + disconnect(service, &QNetworkSettingsService::typeChanged, + this, &QNetworkSettingsManagerPrivate::serviceReady); + service->deleteLater(); + } + if (auto service = m_unknownServices.take(path)) + if (!service->placeholderState()) { + disconnect(service, &QNetworkSettingsService::nameChanged, + this, &QNetworkSettingsManagerPrivate::serviceReady); + disconnect(service, &QNetworkSettingsService::typeChanged, + this, &QNetworkSettingsManagerPrivate::serviceReady); + service->deleteLater(); + } + m_unnamedServicesForSsidConnection.remove(path); // do not delete here } QStringList newServices; - foreach (ConnmanMapStruct map, changed) { + foreach (const ConnmanMapStruct &map, changed) { + QString path = map.objectPath.path(); + + if (m_unknownServices.contains(path) || m_unnamedServices.contains(path)) + continue; + bool found = false; foreach (QNetworkSettingsService* service, m_serviceModel->getModel()) { - if (service->id() == map.objectPath.path() && service->placeholderState() == false) { - found =true; + if (service->id() == path && service->placeholderState() == false) { + found = true; break; } } @@ -254,6 +299,7 @@ void QNetworkSettingsManagerPrivate::onServicesChanged(ConnmanMapStructList chan foreach (QString newService, newServices) { handleNewService(newService); } + } void QNetworkSettingsManagerPrivate::handleNewService(const QString &servicePath) @@ -278,9 +324,20 @@ void QNetworkSettingsManagerPrivate::handleNewService(const QString &servicePath } } else { + bool isUnnamedWifi = false; + //Service name or type not set, wait for update - connect(service, &QNetworkSettingsService::nameChanged, this, &QNetworkSettingsManagerPrivate::serviceReady); - connect(service, &QNetworkSettingsService::typeChanged, this, &QNetworkSettingsManagerPrivate::serviceReady); + if (service->name().isEmpty()) { + connect(service, &QNetworkSettingsService::nameChanged, this, &QNetworkSettingsManagerPrivate::serviceReady); + isUnnamedWifi = (service->type() == QNetworkSettingsType::Wifi); + } + if (service->type() == QNetworkSettingsType::Unknown) + connect(service, &QNetworkSettingsService::typeChanged, this, &QNetworkSettingsManagerPrivate::serviceReady); + + if (isUnnamedWifi) + m_unnamedServices.insert(service->id(), service); + else + m_unknownServices.insert(service->id(), service); } } @@ -295,11 +352,14 @@ void QNetworkSettingsManagerPrivate::serviceReady() QNetworkSettingsService* service = qobject_cast<QNetworkSettingsService*>(sender()); - if (service->type() != QNetworkSettingsType::Unknown - && service->type() == QNetworkSettingsType::Wifi) { + // the type changed from Unknown to Wifi + if ((service->type() == QNetworkSettingsType::Wifi) + && m_unknownServices.contains(service->id())) { + m_unknownServices.remove(service->id()); m_unnamedServices.insert(service->id(), service); } + // we have a name and a length now if (service->name().length() > 0 && service->type() != QNetworkSettingsType::Unknown) { service->disconnect(this); m_unnamedServices.remove(service->id()); @@ -316,7 +376,88 @@ void QNetworkSettingsManagerPrivate::serviceReady() technology->setState(technology->state()); } } + } +} + +QString QNetworkSettingsManagerPrivate::usbEthernetInternetProtocolAddress() +{ + QString usbEthernetIp = QLatin1String("Not connected"); + QNetworkInterface interface = QNetworkInterface::interfaceFromName(QLatin1String("usb0")); + if (interface.flags().testFlag(QNetworkInterface::IsUp)) { + for (QNetworkAddressEntry &entry:interface.addressEntries()) { + if (entry.ip().protocol() == QAbstractSocket::IPv4Protocol){ + usbEthernetIp = entry.ip().toString(); + break; + } + } + } + return usbEthernetIp; +} + +QString QNetworkSettingsManagerPrivate::usbVirtualEthernetLinkProtocol() +{ + QByteArray line(QNetworkSettingsManagerPrivate::readUsbEthernetProtocolLine()); + QString protocol; + if (line.size()) { + int keywordStartIndex(line.indexOf("=")); + line = line.trimmed(); + protocol = QString::fromLatin1( line.mid(keywordStartIndex + 1, (line.length() - 1)).toUpper() ); + } + return protocol; +} + +bool QNetworkSettingsManagerPrivate::hasUsbEthernetProtocolConfiguration() +{ + return !(QNetworkSettingsManagerPrivate::readUsbEthernetProtocolLine().isEmpty()); +} + +void QNetworkSettingsManagerPrivate::setUsbVirtualEthernetLinkProtocol(const QString &protocol) +{ + if (QLatin1String("RNDIS") == protocol || QLatin1String("CDCECM") == protocol) { + QByteArray fileContent(QNetworkSettingsManagerPrivate::readQdbdFileContent()); + writeUsbEthernetProtocolToFileContent(fileContent, protocol); + } else{ + qWarning("Unsupported USB Ethernet protocol"); + } +} + +QByteArray QNetworkSettingsManagerPrivate::readQdbdFileContent() +{ + QFile qdbdFile(QdbdFileName); + QByteArray fileContent; + if (qdbdFile.open(QIODevice::ReadOnly | QIODevice::Text)) + fileContent = qdbdFile.readAll(); + + return fileContent; +} +QByteArray QNetworkSettingsManagerPrivate::readUsbEthernetProtocolLine() +{ + QByteArray fileContent(QNetworkSettingsManagerPrivate::readQdbdFileContent()); + int keywordStartIndex(fileContent.indexOf(SearchKeyword, 0)); + int keywordLineEndIndex(fileContent.indexOf("\n", keywordStartIndex)); + QByteArray keywordLine = fileContent.mid(keywordStartIndex, keywordLineEndIndex); + return keywordLine; +} + +void QNetworkSettingsManagerPrivate::writeUsbEthernetProtocolToFileContent(QByteArray &fileContent, const QString &protocol) +{ + int keywordStartIndex(fileContent.indexOf(SearchKeyword)); + QByteArray previousLines = fileContent.mid(0, keywordStartIndex); + int keywordLineEndIndex(fileContent.indexOf("\n", keywordStartIndex)); + QByteArray keywordLine = fileContent.mid(keywordStartIndex, keywordLineEndIndex); + QByteArray followingLines = fileContent.mid((keywordLineEndIndex), (fileContent.length() - 1)); + QByteArray updatedLines = previousLines.append(SearchKeyword); + updatedLines.append(protocol.toLatin1().toLower()); + updatedLines.append(followingLines); + QFile qdbdFile(QdbdFileName); + if (qdbdFile.open(QIODevice::WriteOnly | QIODevice::Text)) { + int result = qdbdFile.write(updatedLines); + if (-1 == result) + qDebug("USB Ethernet protocol write to file failed"); + + } else { + qDebug("USB Ethernet protocol file open failed"); } } diff --git a/src/networksettings/connman/qnetworksettingsmanager_p.h b/src/networksettings/connman/qnetworksettingsmanager_p.h index 8b5d1a7..16cb899 100644 --- a/src/networksettings/connman/qnetworksettingsmanager_p.h +++ b/src/networksettings/connman/qnetworksettingsmanager_p.h @@ -43,6 +43,7 @@ #include <QObject> #include <QtDBus> #include <QMap> +#include <QPointer> #include "connmancommon.h" #include "qnetworksettingsmanager.h" #include "qnetworksettingsinterfacemodel.h" @@ -70,10 +71,14 @@ public: void connectBySsid(const QString &name); void clearConnectionState(); void tryNextConnection(); - void setCurrentWifiConnection(QNetworkSettingsService *connection) {m_currentWifiConnection = connection;} - QNetworkSettingsService* currentWifiConnection() const {return m_currentWifiConnection;} - void setCurrentWiredConnection(QNetworkSettingsService *connection) {m_currentWiredConnection = connection;} - QNetworkSettingsService* currentWiredConnection() const {return m_currentWiredConnection;} + void setCurrentWifiConnection(QNetworkSettingsService *connection); + QNetworkSettingsService* currentWifiConnection() const; + void setCurrentWiredConnection(QNetworkSettingsService *connection); + QNetworkSettingsService* currentWiredConnection() const; + QString usbEthernetInternetProtocolAddress(); + QString usbVirtualEthernetLinkProtocol(); + bool hasUsbEthernetProtocolConfiguration(); + void setUsbVirtualEthernetLinkProtocol(const QString &protocol); public slots: void getServicesFinished(QDBusPendingCallWatcher *watcher); @@ -84,12 +89,18 @@ public slots: void onConnmanServiceRegistered(const QString &serviceName); void onTechnologyAdded(const QDBusObjectPath &technology, const QVariantMap &properties); void onTechnologyRemoved(const QDBusObjectPath &technology); + private: bool initialize(); - void handleNewService(const QString& servicePath); + void handleNewService(const QString &servicePath); + void writeUsbEthernetProtocolToFileContent(QByteArray &fileContent, const QString &protocol); + static QByteArray readQdbdFileContent(); + static QByteArray readUsbEthernetProtocolLine(); + protected: QNetworkSettingsInterfaceModel m_interfaceModel; QNetworkSettingsServiceModel *m_serviceModel; + QMap<QString, QNetworkSettingsService*> m_unknownServices; QMap<QString, QNetworkSettingsService*> m_unnamedServices; QMap<QString, QNetworkSettingsService*> m_unnamedServicesForSsidConnection; QNetworkSettingsServiceFilter *m_serviceFilter; @@ -98,8 +109,8 @@ private: QNetworkSettingsUserAgent *m_agent; QDBusServiceWatcher *m_serviceWatcher; QString m_currentSsid; - QNetworkSettingsService *m_currentWifiConnection; - QNetworkSettingsService *m_currentWiredConnection; + QPointer<QNetworkSettingsService> m_currentWifiConnection; + QPointer<QNetworkSettingsService> m_currentWiredConnection; bool m_initialized; }; diff --git a/src/networksettings/qnetworksettings.cpp b/src/networksettings/qnetworksettings.cpp index e4ddbad..be477e5 100644 --- a/src/networksettings/qnetworksettings.cpp +++ b/src/networksettings/qnetworksettings.cpp @@ -587,7 +587,12 @@ void QNetworkSettingsProxy::setMethod(const MethodType& method) { Creates a new Wifi network configuration with the parent \a parent. */ QNetworkSettingsWireless::QNetworkSettingsWireless(QObject* parent) - : QObject(parent) { + : QObject(parent) + , m_securityFlags(None) + , m_hidden(false) + , m_signalStrength(0) + , m_isOutOfRange(false) +{ } /*! diff --git a/src/networksettings/qnetworksettingsinterfacemodel.cpp b/src/networksettings/qnetworksettingsinterfacemodel.cpp index 045d3ff..8d6ca60 100644 --- a/src/networksettings/qnetworksettingsinterfacemodel.cpp +++ b/src/networksettings/qnetworksettingsinterfacemodel.cpp @@ -122,12 +122,7 @@ QVariant QNetworkSettingsInterfaceModel::data(const QModelIndex & index, int rol */ void QNetworkSettingsInterfaceModel::append(QNetworkSettingsInterface* item) { - item->setParent(this); - connectStateChanges(item); - - beginInsertRows(QModelIndex(), rowCount(), rowCount()); - m_items.append(item); - endInsertRows(); + insert(rowCount(), item); } /*! @@ -155,7 +150,7 @@ void QNetworkSettingsInterfaceModel::connectStateChanges(QNetworkSettingsInterfa void QNetworkSettingsInterfaceModel::remove(int row) { beginRemoveRows(QModelIndex(), row, row); - m_items.removeFirst(); + m_items.takeAt(row)->deleteLater(); endRemoveRows(); } diff --git a/src/networksettings/qnetworksettingsmanager.cpp b/src/networksettings/qnetworksettingsmanager.cpp index 667004f..a128049 100644 --- a/src/networksettings/qnetworksettingsmanager.cpp +++ b/src/networksettings/qnetworksettingsmanager.cpp @@ -330,4 +330,41 @@ QNetworkSettingsUserAgent* QNetworkSettingsManager::userAgent() return d->userAgent(); } +/*! + Returns the ip address of usb ethernet network. +*/ +QString QNetworkSettingsManager::usbEthernetInternetProtocolAddress() +{ + Q_D(QNetworkSettingsManager); + return d->usbEthernetInternetProtocolAddress(); +} + +/*! + Returns the usb ethernet protocol +*/ +QString QNetworkSettingsManager::usbVirtualEthernetLinkProtocol() +{ + Q_D(QNetworkSettingsManager); + return d->usbVirtualEthernetLinkProtocol(); +} + + +/*! + Returns true if usb ethernet protocol is configured by file and configuration file exists. +*/ +bool QNetworkSettingsManager::hasUsbEthernetProtocolConfiguration() +{ + Q_D(QNetworkSettingsManager); + return d->hasUsbEthernetProtocolConfiguration(); +} + +/*! + Set the usb ethernet protocol according to parameter. +*/ +void QNetworkSettingsManager::setUsbVirtualEthernetLinkProtocol(const QString &protocol) +{ + Q_D(QNetworkSettingsManager); + d->setUsbVirtualEthernetLinkProtocol(protocol); +} + QT_END_NAMESPACE diff --git a/src/networksettings/qnetworksettingsmanager.h b/src/networksettings/qnetworksettingsmanager.h index 17a3082..16ed539 100644 --- a/src/networksettings/qnetworksettingsmanager.h +++ b/src/networksettings/qnetworksettingsmanager.h @@ -52,6 +52,8 @@ class Q_DECL_EXPORT QNetworkSettingsManager : public QObject Q_PROPERTY(QNetworkSettingsUserAgent* userAgent READ userAgent CONSTANT) Q_PROPERTY(QNetworkSettingsService* currentWifiConnection READ currentWifiConnection NOTIFY currentWifiConnectionChanged) Q_PROPERTY(QNetworkSettingsService* currentWiredConnection READ currentWiredConnection NOTIFY currentWiredConnectionChanged) + Q_PROPERTY(QString usbEthernetIpAddress READ usbEthernetInternetProtocolAddress NOTIFY usbEthernetInternetProtocolAddressChanged) + Q_PROPERTY(QString usbEthernetProtocol READ usbVirtualEthernetLinkProtocol NOTIFY usbVirtualEthernetLinkProtocolChanged) public: explicit QNetworkSettingsManager(QObject* parent = Q_NULLPTR); @@ -69,18 +71,26 @@ public: QNetworkSettingsService* currentWifiConnection(); QNetworkSettingsService* currentWiredConnection(); Q_INVOKABLE QNetworkSettingsInterface* interface(int type, int instance); + Q_INVOKABLE QString usbEthernetInternetProtocolAddress(); + Q_INVOKABLE QString usbVirtualEthernetLinkProtocol(); + Q_INVOKABLE bool hasUsbEthernetProtocolConfiguration(); + Q_INVOKABLE void setUsbVirtualEthernetLinkProtocol(const QString &protocol); Q_SIGNALS: void servicesChanged(); void interfacesChanged(); void currentWifiConnectionChanged(); void currentWiredConnectionChanged(); + void usbEthernetInternetProtocolAddressChanged(const QString &newusbEthernetIpAddress); + void usbVirtualEthernetLinkProtocolChanged(const QString &newUsbEthernetProtocol); + protected: QNetworkSettingsManagerPrivate *d_ptr; private: Q_DISABLE_COPY(QNetworkSettingsManager) Q_DECLARE_PRIVATE(QNetworkSettingsManager) + }; QT_END_NAMESPACE diff --git a/src/settingsui/ViewSettings.qml b/src/settingsui/ViewSettings.qml index 9bbbc10..e9a1c74 100644 --- a/src/settingsui/ViewSettings.qml +++ b/src/settingsui/ViewSettings.qml @@ -40,4 +40,5 @@ Item { property string buttonGrayColor: "#9d9faa" property string buttonActiveColor: "#216729" property string scrollBarColor: "#41cd52" + property bool usbEthernetSettingVisible: false } diff --git a/src/settingsui/network/NetworkSettings.qml b/src/settingsui/network/NetworkSettings.qml index 982a858..f18173e 100644 --- a/src/settingsui/network/NetworkSettings.qml +++ b/src/settingsui/network/NetworkSettings.qml @@ -31,104 +31,237 @@ import QtQuick.Layouts 1.3 import QtQuick.Controls 2.2 import QtDeviceUtilities.NetworkSettings 1.0 import QtDeviceUtilities.QtButtonImageProvider 1.0 +import QtDeviceUtilities.LocalDeviceSettings 1.0 import "../common" +import "../timedate" Item { - id: root + id: networkSettingsRoot 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 + property bool usbEthernetSettingVisibility: ( viewSettings.usbEthernetSettingVisible && NetworkSettingsManager.hasUsbEthernetProtocolConfiguration() ) ? true : false + anchors.fill: parent + Text { + id: usbEthernetTitleText + visible: usbEthernetSettingVisibility + text: qsTr("USB Ethernet") + font.pixelSize: pluginMain.subTitleFontSize + font.family: appFont + font.styleName: "SemiBold" + color: "white" + anchors.left: parent.left + } + TextArea { + id: ipAddressTextArea + visible: usbEthernetSettingVisibility + text: qsTr("IP Address:") + NetworkSettingsManager.usbEthernetIpAddress + color: viewSettings.buttonGreenColor + font.family: appFont + font.styleName: "SemiBold" + font.pixelSize: pluginMain.subTitleFontSize - 2 + opacity: 1.0 + readOnly: true + anchors.left: usbEthernetTitleText.left + anchors.verticalCenter: usbEthernetCustomComboBox.verticalCenter + anchors.leftMargin: 15 + } + CustomComboBox { + id: usbEthernetCustomComboBox + visible: usbEthernetSettingVisibility + width: root.width * 0.15 + height: pluginMain.buttonHeight + anchors.top: usbEthernetTitleText.bottom + anchors.left: ipAddressTextArea.right + anchors.right: setUsbEthernetButton.left + anchors.rightMargin: 15 + anchors.leftMargin: 15 + model: ["RNDIS", "CDCECM" ] + currentIndex: 0 + delegate: ItemDelegate { + id: usbEthernetDelegate + contentItem: Text { + anchors.left: usbEthernetDelegate.left + anchors.leftMargin: pluginMain.margin + text: modelData + color: usbEthernetCustomComboBox.currentIndex == index ? viewSettings.buttonGreenColor : "white" + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + font.pixelSize: pluginMain.valueFontSize font.family: appFont - color: "white" + font.styleName: "Regular" } + } + Component.onCompleted: { + usbEthernetCustomComboBox.currentIndex = "RNDIS" === NetworkSettingsManager.usbEthernetProtocol ? 0 : 1 + } + } + QtButton { + id: setUsbEthernetButton + visible: usbEthernetSettingVisibility + height: pluginMain.buttonHeight + text: qsTr("SAVE & REBOOT") + anchors.right: parent.right + anchors.verticalCenter: usbEthernetCustomComboBox.verticalCenter + onClicked: { + showRebootAcceptPopup(); + } + } - 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() - } + function showRebootAcceptPopup() { + messageDialog.visible = true + } + + Dialog { + function rebootAccepted() { + NetworkSettingsManager.setUsbVirtualEthernetLinkProtocol(usbEthernetCustomComboBox.currentText) + LocalDevice.reboot() + } + id: messageDialog + anchors.centerIn: parent + width: parent.width + height: parent.height + opacity: 0.9 + background: Rectangle{ + id: messageDialogMainRectangle + width: parent.width + height: parent.height + color: viewSettings.backgroundColor + } + Rectangle { + id: messageDialogPopupRectangle + color: viewSettings.backgroundColor + border.color: viewSettings.borderColor + border.width: 3 + anchors.centerIn: parent + width: parent.width * 0.75 + height: parent.height * 0.75 + Column { + anchors.centerIn: parent + spacing: viewSettings.pageMargin + Text { + id: shutDownConfirmText + width: messageDialogPopupRectangle.width * 0.75 + height: messageDialogPopupRectangle.height * 0.25 + horizontalAlignment: Text.AlignHCenter + anchors.horizontalCenter: parent.horizontalCenter + fontSizeMode: Text.Fit + minimumPixelSize: 1 + font.pixelSize: messageDialogPopupRectangle.width * 0.3 + color: "white" + font.family: viewSettings.appFont + font.styleName: "SemiBold" + text: "Save and reboot the system?" } - 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; + QtButton { + id: saveRebootConfirm + height: pluginMain.buttonHeight + anchors.horizontalCenter: parent.horizontalCenter + text: "OK" + onClicked: messageDialog.rebootAccepted(); } - - // At least 1s between switching on/off - Timer { - id: wifiSwitchTimer - interval: 1000 - running: false + QtButton { + id: saveRebootCancel + height: pluginMain.buttonHeight + anchors.horizontalCenter: parent.horizontalCenter + borderColor: "transparent" + fillColor: viewSettings.buttonGrayColor + text: qsTr("CANCEL") + onClicked: { + messageDialog.visible = false + } } } - QtButton { - id: manualConnect - visible: true - enabled: wifiSwitch.checked - fillColor: enabled ? viewSettings.buttonGreenColor : viewSettings.buttonGrayColor - borderColor: "transparent" - height: pluginMain.buttonHeight - text: qsTr("Connect manually") - onClicked: { - networkList.connectBySsid() - } + } + } + Text { + id: wlanText + text: qsTr("WLAN") + font.pixelSize: pluginMain.subTitleFontSize + font.family: appFont + font.styleName: "SemiBold" + color: "white" + anchors.top: usbEthernetSettingVisibility ? usbEthernetCustomComboBox.bottom : networkSettingsRoot.top + anchors.left: parent.left + } + CustomSwitch { + id: wifiSwitch + anchors.top: wlanText.bottom + anchors.left: wlanText.left + height: pluginMain.buttonHeight + indicatorWidth: pluginMain.buttonWidth + indicatorHeight: pluginMain.buttonHeight + 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() } - QtButton { - id: manualDisconnect - visible: true - enabled: NetworkSettingsManager.currentWifiConnection - fillColor: enabled ? viewSettings.buttonGreenColor : viewSettings.buttonGrayColor - borderColor: "transparent" - height: pluginMain.buttonHeight - text: qsTr("Disconnect wireless") - onClicked: { - if (NetworkSettingsManager.currentWifiConnection) { - NetworkSettingsManager.currentWifiConnection.disconnectService(); - } + } + 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; } - Text { - text: qsTr("Network list:") - font.pixelSize: pluginMain.subTitleFontSize - font.family: appFont - font.styleName: "SemiBold" - color: "white" + // At least 1s between switching on/off + Timer { + id: wifiSwitchTimer + interval: 1000 + running: false } - - Row { - id: listViewRow - leftPadding: pluginMain.margin - NetworkListView { - id: networkList - width: root.width - listViewRow.leftPadding - height: root.height - listViewRow.y - networkSettingsColumn.anchors.margins + } + QtButton { + id: manualConnect + anchors.top: wlanText.bottom + anchors.left: wifiSwitch.right + anchors.right: manualDisconnect.left + anchors.rightMargin: 15 + enabled: wifiSwitch.checked + fillColor: enabled ? viewSettings.buttonGreenColor : viewSettings.buttonGrayColor + borderColor: "transparent" + height: pluginMain.buttonHeight + text: qsTr("MANUAL CONNECT") + onClicked: { + networkList.connectBySsid() + } + } + QtButton { + id: manualDisconnect + anchors.top: wlanText.bottom + anchors.right: parent.right + enabled: NetworkSettingsManager.currentWifiConnection + fillColor: enabled ? viewSettings.buttonGreenColor : viewSettings.buttonGrayColor + borderColor: "transparent" + height: pluginMain.buttonHeight + text: qsTr("DISCONNECT") + onClicked: { + if (NetworkSettingsManager.currentWifiConnection) { + NetworkSettingsManager.currentWifiConnection.disconnectService(); } } } + Text { + id: networkListTextItem + text: qsTr("Network list") + font.pixelSize: pluginMain.subTitleFontSize + font.family: appFont + font.styleName: "SemiBold" + color: "white" + anchors.top: wifiSwitch.bottom + } + NetworkListView { + id: networkList + anchors.top: networkListTextItem.bottom + anchors.left: networkListTextItem.left + width: networkSettingsRoot.width + height: networkSettingsRoot.height + } } + diff --git a/src/timedatesettings/timezonemodel.h b/src/timedatesettings/timezonemodel.h index 6684472..bfc63d2 100644 --- a/src/timedatesettings/timezonemodel.h +++ b/src/timedatesettings/timezonemodel.h @@ -36,7 +36,7 @@ QT_BEGIN_NAMESPACE -class TimezoneItem : public QObject +class Q_DECL_EXPORT TimezoneItem : public QObject { Q_OBJECT Q_PROPERTY(QString id READ id CONSTANT) |