New connection setup wizard

This commit is contained in:
Michael Zanetti 2021-06-10 14:54:08 +02:00
parent 7d75553b5f
commit 877d4fb6c3
13 changed files with 1249 additions and 14 deletions

View File

@ -33,6 +33,7 @@
#include <QDebug> #include <QDebug>
#include <QTimer> #include <QTimer>
#include <QBluetoothLocalDevice> #include <QBluetoothLocalDevice>
#include <QBluetoothUuid>
BluetoothDiscovery::BluetoothDiscovery(QObject *parent) : BluetoothDiscovery::BluetoothDiscovery(QObject *parent) :
QObject(parent), QObject(parent),
@ -180,6 +181,13 @@ void BluetoothDiscovery::deviceDiscovered(const QBluetoothDeviceInfo &deviceInfo
return; return;
} }
// Only show devices that either list the wifi service uuid or are called BT WLAN setup (for legacy reasons)
static QBluetoothUuid wifiServiceUuid = QBluetoothUuid(QUuid("e081fec0-f757-4449-b9c9-bfa83133f7fc"));
if (!deviceInfo.serviceUuids().contains(wifiServiceUuid) && deviceInfo.name() != "BT WLAN setup") {
qDebug() << "Skipping device" << deviceInfo.name() << deviceInfo.serviceUuids();
return;
}
foreach (BluetoothDeviceInfo *di, m_deviceInfos->deviceInfos()) { foreach (BluetoothDeviceInfo *di, m_deviceInfos->deviceInfos()) {
if (di->address() == deviceInfo.address().toString()) { if (di->address() == deviceInfo.address().toString()) {
di->setBluetoothDeviceInfo(deviceInfo); di->setBluetoothDeviceInfo(deviceInfo);

View File

@ -260,5 +260,7 @@
<file>ui/images/cleaning-robot.svg</file> <file>ui/images/cleaning-robot.svg</file>
<file>ui/images/chart.svg</file> <file>ui/images/chart.svg</file>
<file>ui/images/modbus.svg</file> <file>ui/images/modbus.svg</file>
<file>ui/images/setupwizard/wired-connection.svg</file>
<file>ui/images/setupwizard/wireless-connection.svg</file>
</qresource> </qresource>
</RCC> </RCC>

View File

@ -249,5 +249,7 @@
<file>ui/system/ModbusRtuSettingsPage.qml</file> <file>ui/system/ModbusRtuSettingsPage.qml</file>
<file>ui/system/ModbusRtuAddMasterPage.qml</file> <file>ui/system/ModbusRtuAddMasterPage.qml</file>
<file>ui/system/ModbusRtuReconfigureMasterPage.qml</file> <file>ui/system/ModbusRtuReconfigureMasterPage.qml</file>
<file>ui/connection/NewConnectionWizard.qml</file>
<file>ui/components/WizardPageBase.qml</file>
</qresource> </qresource>
</RCC> </RCC>

View File

@ -184,13 +184,14 @@ Item {
} else if (autoConnectHost.length > 0) { } else if (autoConnectHost.length > 0) {
var host = nymeaDiscovery.nymeaHosts.createLanHost(Configuration.systemName, autoConnectHost); var host = nymeaDiscovery.nymeaHosts.createLanHost(Configuration.systemName, autoConnectHost);
engine.jsonRpcClient.connectToHost(host) engine.jsonRpcClient.connectToHost(host)
return;
} else { } else {
// Only hide the splash right away if we're not trying to connect to something // Only hide the splash right away if we're not trying to connect to something
// If it's not hidden here it will be hidden in 3 seconds or when the connection is up, whichever comes first // If it's not hidden here it will be hidden in 3 seconds or when the connection is up, whichever comes first
PlatformHelper.hideSplashScreen(); PlatformHelper.hideSplashScreen();
} }
pageStack.push(Qt.resolvedUrl("connection/ConnectPage.qml"), StackView.Immediate) pageStack.push(Qt.resolvedUrl("connection/NewConnectionWizard.qml"), StackView.Immediate)
} }
Timer { running: true; repeat: false; interval: 3000; onTriggered: PlatformHelper.hideSplashScreen(); } Timer { running: true; repeat: false; interval: 3000; onTriggered: PlatformHelper.hideSplashScreen(); }
@ -200,7 +201,8 @@ Item {
pageStack.clear() pageStack.clear()
if (!engine.jsonRpcClient.currentHost) { if (!engine.jsonRpcClient.currentHost) {
print("pushing ConnectPage") print("pushing ConnectPage")
pageStack.push(Qt.resolvedUrl("connection/ConnectPage.qml")) tabSettings.lastConnectedHost = ""
pageStack.push(Qt.resolvedUrl("connection/NewConnectionWizard.qml"))
PlatformHelper.hideSplashScreen(); PlatformHelper.hideSplashScreen();
return; return;
} }
@ -475,7 +477,6 @@ Item {
Layout.fillWidth: true Layout.fillWidth: true
Material.elevation: 2 Material.elevation: 2
position: TabBar.Footer position: TabBar.Footer
property int tabWidth: Math.max(150, root.width / tabModel.count)
Repeater { Repeater {
model: tabModel.count model: tabModel.count
@ -485,7 +486,7 @@ Item {
property var engine: mainRepeater.itemAt(index)._engine property var engine: mainRepeater.itemAt(index)._engine
property string serverName: engine.nymeaConfiguration.serverName property string serverName: engine.nymeaConfiguration.serverName
Material.elevation: index Material.elevation: index
width: tabbar.tabWidth width: Math.max(150, tabbar.width / tabModel.count)
Rectangle { Rectangle {
anchors.fill: parent anchors.fill: parent

View File

@ -51,13 +51,17 @@ Item {
family: "Ubuntu", family: "Ubuntu",
pixelSize: 16 pixelSize: 16
}) })
readonly property font largeFont: Qt.font({ readonly property font bigFont: Qt.font({
family: "Ubuntu", family: "Ubuntu",
pixelSize: 20 pixelSize: 20
}) })
readonly property font largeFont: Qt.font({
family: "Ubuntu",
pixelSize: 32
})
readonly property font hugeFont: Qt.font({ readonly property font hugeFont: Qt.font({
family: "Ubuntu", family: "Ubuntu",
pixelSize: 40 pixelSize: 46
}) })

View File

@ -17,7 +17,7 @@ BigTile {
var contextMenu = contextMenuComponent.createObject(root, { thing: root.thing }) var contextMenu = contextMenuComponent.createObject(root, { thing: root.thing })
contextMenu.x = Qt.binding(function() { return (root.width - contextMenu.width) / 2 }) contextMenu.x = Qt.binding(function() { return (root.width - contextMenu.width) / 2 })
contextMenu.open() contextMenu.open()
} }
header: RowLayout { header: RowLayout {
id: headerRow id: headerRow

View File

@ -30,13 +30,6 @@ Item {
wobbleAnimation.start(); wobbleAnimation.start();
} }
onPressAndHold: {
var contextMenuComponent = Qt.createComponent("../components/ThingContextMenu.qml");
var contextMenu = contextMenuComponent.createObject(root, { thing: root.thing })
contextMenu.x = Qt.binding(function() { return (root.width - contextMenu.width) / 2 })
contextMenu.open()
}
transform: Translate { id: wobbleTransform } transform: Translate { id: wobbleTransform }
SequentialAnimation { SequentialAnimation {

View File

@ -0,0 +1,117 @@
import QtQuick 2.9
import QtQuick.Controls 2.9
import QtQuick.Layouts 1.2
import "../components"
import Nymea 1.0
Page {
id: root
property alias text: textLabel.text
property alias content: contentContainer.children
property alias showNextButton: nextButton.visible
property alias nextButtonText: nextLabel.text
property alias showBackButton: backButton.visible
property alias backButtonText: backLabel.text
property alias showExtraButton: extraButton.visible
property alias extraButtonText: extraButtonLabel.text
signal next();
signal back();
signal extraButtonPressed();
ColumnLayout {
anchors.fill: parent
spacing: Style.margins
Label {
id: titleLabel
Layout.fillWidth: true
Layout.margins: Style.margins
text: root.title
font: Style.largeFont
horizontalAlignment: Text.AlignHCenter
}
Label {
id: textLabel
Layout.fillWidth: true
Layout.margins: Style.margins
wrapMode: Text.WordWrap
text: qsTr("This wizard will guide you through the process of setting up a new nymea system.")
horizontalAlignment: Text.AlignHCenter
}
Item {
id: contentContainer
Layout.fillWidth: true
Layout.fillHeight: true
}
RowLayout {
Layout.fillWidth: true
Layout.leftMargin: Style.margins
Layout.rightMargin: Style.margins
MouseArea {
id: backButton
Layout.preferredHeight: Style.delegateHeight
Layout.preferredWidth: childrenRect.width
Layout.alignment: Qt.AlignLeft
RowLayout {
anchors.centerIn: parent
ColorIcon {
Layout.alignment: Qt.AlignRight
size: Style.iconSize
name: "back"
}
Label {
id: backLabel
Layout.fillWidth: true
text: qsTr("Back")
}
}
onClicked: root.back()
}
Item {
Layout.fillWidth: true
Layout.preferredHeight: Style.delegateHeight
MouseArea {
id: extraButton
anchors { left: parent.left; verticalCenter: parent.verticalCenter }
height: Style.delegateHeight
width: childrenRect.width
visible: false
Label {
id: extraButtonLabel
anchors.centerIn: parent
}
onClicked: root.extraButtonPressed()
}
}
MouseArea {
id: nextButton
Layout.preferredHeight: Style.delegateHeight
Layout.preferredWidth: childrenRect.width
Layout.alignment: Qt.AlignRight
RowLayout {
anchors.centerIn: parent
Label {
id: nextLabel
Layout.fillWidth: true
text: qsTr("Next")
}
ColorIcon {
Layout.alignment: Qt.AlignRight
size: Style.iconSize
name: "next"
}
}
onClicked: root.next()
}
}
}
}

View File

@ -0,0 +1,715 @@
import QtQuick 2.9
import QtQuick.Controls 2.9
import QtQuick.Layouts 1.2
import "../components"
import Nymea 1.0
WizardPageBase {
id: root
title: qsTr("Welcome")
text: qsTr("This wizard will guide you through the process of setting up a new nymea system.")
showBackButton: false
showExtraButton: true
extraButtonText: qsTr("Demo mode")
onNext: pageStack.push(connectionSelectionComponent)
onExtraButtonPressed: {
var host = nymeaDiscovery.nymeaHosts.createWanHost("Demo server", "nymea://nymea.nymea.io:2222")
engine.jsonRpcClient.connectToHost(host)
}
content: ColumnLayout {
anchors.fill: parent
anchors.margins: Style.margins
ColumnLayout {
Layout.fillHeight: false
ColorIcon {
size: Style.hugeIconSize * 3
name: "nymea-logo"
Layout.alignment: Qt.AlignHCenter
}
Label {
Layout.fillWidth: true
horizontalAlignment: Text.AlignHCenter
text: "nymea"
font: Style.hugeFont
}
}
Label {
Layout.fillWidth: true
wrapMode: Text.WordWrap
font: Style.smallFont
text: qsTr("In order to use nymea, you will need to install nymea:core on a computer in your network. This can be a Raspberry Pi or any generic Linux computer.")
horizontalAlignment: Text.AlignHCenter
}
Label {
Layout.fillWidth: true
wrapMode: Text.WordWrap
font: Style.smallFont
text: qsTr("Please follow the installation instructions on %1 to install a nymea system.").arg('<a href="https://nymea.io/documentation/users/installation/core">nymea.io</a>')
horizontalAlignment: Text.AlignHCenter
onLinkActivated: Qt.openUrlExternally(link)
}
}
Component {
id: connectionSelectionComponent
WizardPageBase {
title: qsTr("Connectivity")
text: qsTr("How would you like to connect nymea to your network?")
nextButtonText: qsTr("Skip")
onNext: pageStack.push(selectInstanceComponent)
onBack: pageStack.pop()
content: ColumnLayout {
anchors.fill: parent
anchors.margins: Style.margins
BigTile {
Layout.fillWidth: true
onClicked: pageStack.push(wiredInstructionsComponent)
contentItem: RowLayout {
spacing: Style.margins
ColorIcon {
size: Style.hugeIconSize
name: "connections/network-wired"
color: Style.accentColor
}
ColumnLayout {
Label {
Layout.fillWidth: true
text: qsTr("Wired network")
}
Label {
Layout.fillWidth: true
text: qsTr("Connect nymea to your network using a network cable. This is recommended for best performance.")
font: Style.smallFont
wrapMode: Text.WordWrap
}
}
}
}
BigTile {
Layout.fillWidth: true
onClicked: pageStack.push(wirelessInstructionsComponent)
contentItem: RowLayout {
spacing: Style.margins
ColorIcon {
size: Style.hugeIconSize
name: "connections/network-wifi"
color: Style.accentColor
}
ColumnLayout {
Label {
Layout.fillWidth: true
text: qsTr("Wireless network")
}
Label {
Layout.fillWidth: true
text: qsTr("Connect nymea to your WiFi network.")
font: Style.smallFont
wrapMode: Text.WordWrap
}
}
}
}
Label {
Layout.fillWidth: true
wrapMode: Text.WordWrap
text: qsTr("If your nymea system is already connected to the network you can skip this step.")
horizontalAlignment: Qt.AlignHCenter
font: Style.smallFont
}
}
}
}
Component {
id: selectInstanceComponent
WizardPageBase {
title: qsTr("Connection")
text: qsTr("Connecting to the nymea system.")
showNextButton: false
onBack: pageStack.pop()
content: ColumnLayout {
anchors.fill: parent
ListView {
Layout.fillWidth: true
Layout.fillHeight: true
clip: true
model: NymeaHostsFilterModel {
id: hostsProxy
discovery: nymeaDiscovery
showUnreachableBearers: false
jsonRpcClient: engine.jsonRpcClient
showUnreachableHosts: false
}
ColumnLayout {
anchors.centerIn: parent
width: parent.width
visible: hostsProxy.count == 0
spacing: Style.margins
BusyIndicator {
Layout.alignment: Qt.AlignHCenter
}
Label {
Layout.fillWidth: true
Layout.margins: Style.margins
text: qsTr("Please wait while your nymea system is being discovered.")
wrapMode: Text.WordWrap
horizontalAlignment: Text.AlignHCenter
}
}
delegate: NymeaSwipeDelegate {
id: nymeaHostDelegate
width: parent.width
property var nymeaHost: hostsProxy.get(index)
property string defaultConnectionIndex: {
var bestIndex = -1
var bestPriority = 0;
for (var i = 0; i < nymeaHost.connections.count; i++) {
var connection = nymeaHost.connections.get(i);
if (bestIndex === -1 || connection.priority > bestPriority) {
bestIndex = i;
bestPriority = connection.priority;
}
}
return bestIndex;
}
iconName: {
switch (nymeaHost.connections.get(defaultConnectionIndex).bearerType) {
case Connection.BearerTypeLan:
case Connection.BearerTypeWan:
if (engine.jsonRpcClient.availableBearerTypes & NymeaConnection.BearerTypeEthernet != NymeaConnection.BearerTypeNone) {
return "/ui/images/connections/network-wired.svg"
}
return "/ui/images/connections/network-wifi.svg";
case Connection.BearerTypeBluetooth:
return "/ui/images/connections/bluetooth.svg";
case Connection.BearerTypeCloud:
return "/ui/images/connections/cloud.svg"
case Connection.BearerTypeLoopback:
return "qrc:/styles/%1/logo.svg".arg(styleController.currentStyle)
}
return ""
}
text: model.name
subText: nymeaHost.connections.get(defaultConnectionIndex).url
wrapTexts: false
prominentSubText: false
progressive: false
property bool isSecure: nymeaHost.connections.get(defaultConnectionIndex).secure
property bool isOnline: nymeaHost.connections.get(defaultConnectionIndex).bearerType !== Connection.BearerTypeWan ? nymeaHost.connections.get(defaultConnectionIndex).online : true
tertiaryIconName: isSecure ? "/ui/images/connections/network-secure.svg" : ""
secondaryIconName: !isOnline ? "/ui/images/connections/cloud-error.svg" : ""
secondaryIconColor: "red"
onClicked: {
engine.jsonRpcClient.connectToHost(nymeaHostDelegate.nymeaHost)
}
contextOptions: [
{
text: qsTr("Info"),
icon: Qt.resolvedUrl("/ui/images/info.svg"),
callback: function() {
var nymeaHost = hostsProxy.get(index);
var popup = connectionInfoDialog.createObject(app,{nymeaHost: nymeaHost})
popup.open()
}
}
]
}
}
}
}
}
Component {
id: wiredInstructionsComponent
WizardPageBase {
title: qsTr("Wired connection")
text: qsTr("Connect the nymea system to your network using an ethernet cable and turn it on.")
onNext: pageStack.push(selectInstanceComponent)
onBack: pageStack.pop()
content: ColumnLayout {
anchors.fill: parent
anchors.margins: Style.margins
Image {
Layout.fillWidth: true
Layout.leftMargin: Style.bigMargins
Layout.rightMargin: Style.bigMargins
Layout.preferredHeight: width * sourceSize.height / sourceSize.width
source: "/ui/images/setupwizard/wired-connection.svg"
}
}
}
}
Component {
id: wirelessInstructionsComponent
WizardPageBase {
title: qsTr("Wireless connection")
text: qsTr("Turn the nymea system on by connecting the power cable and wait for it to start up.")
onNext: pageStack.push(wirelessBluetoothDiscoveryComponent)
onBack: pageStack.pop()
content: ColumnLayout {
anchors.fill: parent
anchors.margins: Style.margins
Image {
Layout.fillWidth: true
Layout.leftMargin: Style.bigMargins
Layout.rightMargin: Style.bigMargins
Layout.preferredHeight: width * sourceSize.height / sourceSize.width
source: "/ui/images/setupwizard/wireless-connection.svg"
}
}
}
}
Component {
id: wirelessBluetoothDiscoveryComponent
WizardPageBase {
id: wirelessBluetoothDiscoveryPage
title: qsTr("Wireless setup")
text: qsTr("Searching for the nymea system...")
showNextButton: false
onBack: pageStack.pop()
BtWiFiSetup {
id: wifiSetup
onBluetoothStatusChanged: {
print("status changed", status)
switch (status) {
case BtWiFiSetup.BluetoothStatusDisconnected:
pageStack.pop(wirelessBluetoothDiscoveryPage)
break;
case BtWiFiSetup.BluetoothStatusConnectingToBluetooth:
break;
case BtWiFiSetup.BluetoothStatusConnectedToBluetooth:
break;
case BtWiFiSetup.BluetoothStatusLoaded:
if (!wifiSetup.networkingEnabled) {
wifiSetup.networkingEnabled = true;
}
if (!wifiSetup.wirelessEnabled) {
wifiSetup.wirelessEnabled = true;
}
pageStack.pop(wirelessBluetoothDiscoveryPage, StackView.Immediate)
pageStack.push(wirelessSelectWifiComponent, {wifiSetup: wifiSetup})
break;
}
}
onBluetoothConnectionError: {
pageStack.pop(wirelessBluetoothDiscoveryPage, StackView.Immediate)
pageStack.push(wirelessBtErrorComponent)
}
onCurrentConnectionChanged: {
if (wifiSetup.currentConnection) {
print("**** connected!")
pageStack.push(wirelessConnectionCompletedComponent, {wifiSetup: wifiSetup})
}
}
onWirelessStatusChanged: {
print("Wireless status changed:", wifiSetup.networkStatus)
if (wifiSetup.wirelessStatus === BtWiFiSetup.WirelessStatusFailed) {
pageStack.pop()
}
}
}
BluetoothDiscovery {
id: bluetoothDiscovery
discoveryEnabled: pageStack.currentItem === wirelessBluetoothDiscoveryPage
}
content: ListView {
anchors.fill: parent
model: bluetoothDiscovery.deviceInfos
BusyIndicator {
anchors.centerIn: parent
visible: bluetoothDiscovery.discovering && bluetoothDiscovery.deviceInfos.count == 0
}
delegate: NymeaSwipeDelegate {
width: parent.width
iconName: Qt.resolvedUrl("/ui/images/connections/bluetooth.svg")
text: model.name
subText: model.address
onClicked: {
wifiSetup.connectToDevice(bluetoothDiscovery.deviceInfos.get(index))
pageStack.push(wirelessBluetoothConnectingComponent)
}
}
}
}
}
Component {
id: wirelessBluetoothConnectingComponent
WizardPageBase {
title: qsTr("Wireless setup")
text: qsTr("Connecting to the nymea system...")
showNextButton: false
content: BusyIndicator {
anchors.centerIn: parent
}
}
}
Component {
id: wirelessSelectWifiComponent
WizardPageBase {
title: qsTr("Wireless setup")
text: qsTr("Select the WiFi you want to use.")
showNextButton: false
property var wifiSetup: null
content: ListView {
anchors.fill: parent
model: wifiSetup.accessPoints
clip: true
delegate: NymeaItemDelegate {
width: parent.width
text: model.ssid !== "" ? model.ssid : qsTr("Hidden Network")
subText: model.hostAddress
iconColor: model.selectedNetwork ? Style.accentColor : "#808080"
iconName: {
if (model.protected) {
if (model.signalStrength <= 25)
return Qt.resolvedUrl("/ui/images/connections/nm-signal-25-secure.svg")
if (model.signalStrength <= 50)
return Qt.resolvedUrl("/ui/images/connections/nm-signal-50-secure.svg")
if (model.signalStrength <= 75)
return Qt.resolvedUrl("/ui/images/connections/nm-signal-75-secure.svg")
if (model.signalStrength <= 100)
return Qt.resolvedUrl("/ui/images/connections/nm-signal-100-secure.svg")
} else {
if (model.signalStrength <= 25)
return Qt.resolvedUrl("/ui/images/connections/nm-signal-25.svg")
if (model.signalStrength <= 50)
return Qt.resolvedUrl("/ui/images/connections/nm-signal-50.svg")
if (model.signalStrength <= 75)
return Qt.resolvedUrl("/ui/images/connections/nm-signal-75.svg")
if (model.signalStrength <= 100)
return Qt.resolvedUrl("/ui/images/connections/nm-signal-100.svg")
}
}
onClicked: {
print("Connect to ", model.ssid, " --> ", model.macAddress)
if (model.selectedNetwork) {
pageStack.push(networkInformationPage, { ssid: model.ssid})
} else {
pageStack.push(wirelessAuthenticationComponent, { wifiSetup: wifiSetup, ssid: model.ssid })
}
}
}
}
}
}
Component {
id: wirelessAuthenticationComponent
WizardPageBase {
title: qsTr("Wireless setup")
text: qsTr("Enter the password for the WiFi network.")
showNextButton: passwordTextField.isValidPassword
onNext: {
print("connecting to", ssid, passwordTextField.password)
wifiSetup.connectDeviceToWiFi(ssid, passwordTextField.password)
pageStack.push(wirelessConnectingWiFiComponent)
}
property BtWiFiSetup wifiSetup: null
property string ssid: ""
content: ColumnLayout {
anchors.centerIn: parent
width: parent.width - Style.margins * 2
Label {
Layout.fillWidth: true
text: ssid
}
PasswordTextField {
id: passwordTextField
Layout.fillWidth: true
signup: false
requireLowerCaseLetter: false
requireUpperCaseLetter: false
requireNumber: false
requireSpecialChar: false
minPasswordLength: 8
}
}
}
}
Component {
id: wirelessBtErrorComponent
WizardPageBase {
title: qsTr("Wireless setup")
text: qsTr("An error happened in the Bluetooth connection. Please try again.")
showNextButton: false
onBack: pageStack.pop()
}
}
Component {
id: wirelessConnectingWiFiComponent
WizardPageBase {
title: qsTr("Wireless setup")
text: qsTr("Please wait while the nymea system is being connected to the WiFi.")
showNextButton: false
onBack: pageStack.pop()
content: BusyIndicator {
anchors.centerIn: parent
}
}
}
Component {
id: wirelessConnectionCompletedComponent
WizardPageBase {
id: wirelessConnectionCompletedPage
title: qsTr("Wireless setup")
text: qsTr("The nymea system has been connected successfully.")
showNextButton: host != null
showBackButton: false
onNext: engine.jsonRpcClient.connectToHost(host)
property BtWiFiSetup wifiSetup: null
property NymeaHost host: null
Component.onCompleted: updateNextButton()
Connections {
target: nymeaDiscovery.nymeaHosts
onCountChanged: updateNextButton();
}
function updateNextButton() {
if (!wifiSetup.currentConnection) {
wirelessConnectionCompletedPage.host = null;
return;
}
// FIXME: We should rather look for the UUID here, but nymea-networkmanager doesn't support getting us the nymea uuid (yet)
for (var i = 0; i < nymeaDiscovery.nymeaHosts.count; i++) {
for (var j = 0; j < nymeaDiscovery.nymeaHosts.get(i).connections.count; j++) {
if (nymeaDiscovery.nymeaHosts.get(i).connections.get(j).url.toString().indexOf(wifiSetup.currentConnection.hostAddress) >= 0) {
wirelessConnectionCompletedPage.host = nymeaDiscovery.nymeaHosts.get(i)
return;
}
}
nymeaDiscovery.nymeaHosts.get(i).connections.countChanged.connect(function() {
updateNextButton();
})
}
wirelessConnectionCompletedPage.host = null;
}
content: ColumnLayout {
width: parent.width - Style.margins * 2
anchors.centerIn: parent
spacing: Style.margins
Label {
Layout.fillWidth: true
wrapMode: Text.WordWrap
text: qsTr("You can now go ahead and configure your nymea system.")
visible: wirelessConnectionCompletedPage.host != null
}
BusyIndicator {
Layout.alignment: Qt.AlignHCenter
visible: wirelessConnectionCompletedPage.host == null
}
Label {
Layout.fillWidth: true
wrapMode: Text.WordWrap
visible: wirelessConnectionCompletedPage.host == null
text: qsTr("Waiting for your nymea setup to appear in the network.")
horizontalAlignment: Text.AlignHCenter
}
}
}
}
Component {
id: connectionInfoDialog
Dialog {
id: dialog
width: Math.min(parent.width, contentGrid.implicitWidth)
x: (parent.width - width) / 2
y: (parent.height - height) / 2
modal: true
title: qsTr("Box information")
standardButtons: Dialog.Ok
property var nymeaHost: null
header: Item {
implicitHeight: headerRow.height + app.margins * 2
implicitWidth: parent.width
RowLayout {
id: headerRow
anchors { left: parent.left; right: parent.right; top: parent.top; margins: app.margins }
spacing: app.margins
ColorIcon {
Layout.preferredHeight: Style.iconSize * 2
Layout.preferredWidth: height
name: "../images/info.svg"
color: Style.accentColor
}
Label {
id: titleLabel
Layout.fillWidth: true
wrapMode: Text.WrapAtWordBoundaryOrAnywhere
text: dialog.title
color: Style.accentColor
font.pixelSize: app.largeFont
}
}
}
GridLayout {
id: contentGrid
anchors.fill: parent
rowSpacing: app.margins
columns: 2
Label {
text: "Name:"
}
Label {
text: dialog.nymeaHost.name
Layout.fillWidth: true
elide: Text.ElideRight
}
Label {
text: "UUID:"
}
Label {
text: dialog.nymeaHost.uuid
Layout.fillWidth: true
elide: Text.ElideRight
}
Label {
text: "Version:"
}
Label {
text: dialog.nymeaHost.version
Layout.fillWidth: true
elide: Text.ElideRight
}
ThinDivider { Layout.columnSpan: 2 }
Label {
Layout.columnSpan: 2
text: qsTr("Available connections")
}
Flickable {
Layout.columnSpan: 2
Layout.fillWidth: true
Layout.preferredHeight: 200
contentHeight: contentColumn.implicitHeight
clip: true
ColumnLayout {
id: contentColumn
width: parent.width
Repeater {
model: dialog.nymeaHost.connections
delegate: NymeaSwipeDelegate {
Layout.fillWidth: true
wrapTexts: false
progressive: false
text: model.name
subText: model.url
prominentSubText: false
iconName: {
switch (model.bearerType) {
case Connection.BearerTypeLan:
case Connection.BearerTypeWan:
if (engine.jsonRpcClient.availableBearerTypes & NymeaConnection.BearerTypeEthernet != NymeaConnection.BearerTypeNone) {
return "../images/connections/network-wired.svg"
}
return "../images/connections/network-wifi.svg";
case Connection.BearerTypeBluetooth:
return "../images/connections/bluetooth.svg";
case Connection.BearerTypeCloud:
return "../images/connections/cloud.svg"
case Connection.BearerTypeLoopback:
return "../images/connections/network-wired.svg"
}
return ""
}
tertiaryIconName: model.secure ? "../images/connections/network-secure.svg" : ""
secondaryIconName: !model.online ? "../images/connections/cloud-error.svg" : ""
secondaryIconColor: "red"
onClicked: {
dialog.close()
engine.jsonRpcClient.connectToHost(dialog.nymeaHost, dialog.nymeaHost.connections.get(index))
}
}
}
}
}
}
}
}
}

View File

@ -159,6 +159,13 @@ ThingPageBase {
readonly property string title: model.value.trim().replace(/, ?.*/, "") readonly property string title: model.value.trim().replace(/, ?.*/, "")
readonly property string text: model.value.trim().replace(/.*, ?/, "") readonly property string text: model.value.trim().replace(/.*, ?/, "")
onPressAndHold: {
var contextMenuComponent = Qt.createComponent("../components/ThingContextMenu.qml");
var contextMenu = contextMenuComponent.createObject(root, { thing: root.thing })
contextMenu.x = Qt.binding(function() { return (root.width - contextMenu.width) / 2 })
contextMenu.open()
}
contentItem: RowLayout { contentItem: RowLayout {
ColumnLayout { ColumnLayout {
Label { Label {

View File

@ -62,6 +62,13 @@ ThingPageBase {
text: qsTr("Total energy consumption") text: qsTr("Total energy consumption")
} }
onPressAndHold: {
var contextMenuComponent = Qt.createComponent("../components/ThingContextMenu.qml");
var contextMenu = contextMenuComponent.createObject(root, { thing: root.thing })
contextMenu.x = Qt.binding(function() { return (root.width - contextMenu.width) / 2 })
contextMenu.open()
}
contentItem: RowLayout { contentItem: RowLayout {
ColorIcon { ColorIcon {
Layout.preferredHeight: Style.iconSize Layout.preferredHeight: Style.iconSize

View File

@ -0,0 +1,237 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="120.26458mm"
height="169.68445mm"
viewBox="0 0 120.26458 169.68445"
version="1.1"
id="svg8"
inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
sodipodi:docname="wired-connection.svg">
<defs
id="defs2">
<filter
inkscape:collect="always"
style="color-interpolation-filters:sRGB"
id="filter921"
x="-2.6964153e-10"
width="1"
y="-1.073897e-10"
height="1">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="3.2817517e-10"
id="feGaussianBlur923" />
</filter>
<filter
inkscape:collect="always"
style="color-interpolation-filters:sRGB"
id="filter931"
x="-1.5684859e-10"
width="1"
y="-1.5049062e-10"
height="1">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="9.9001055e-10"
id="feGaussianBlur933" />
</filter>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.82281274"
inkscape:cx="137.59511"
inkscape:cy="413.46091"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="true"
inkscape:window-width="1464"
inkscape:window-height="933"
inkscape:window-x="72"
inkscape:window-y="27"
inkscape:window-maximized="1"
fit-margin-top="10"
fit-margin-left="10"
fit-margin-right="10"
fit-margin-bottom="10"
lock-margins="true">
<inkscape:grid
type="xygrid"
id="grid974" />
</sodipodi:namedview>
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-42.968191,-38.432539)">
<rect
style="fill:none;fill-opacity:1;stroke:#808080;stroke-width:1.32291667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833"
width="100"
height="100"
x="53.100483"
y="43.273163"
rx="5"
ry="5" />
<g
id="g957"
style="stroke:#808080;stroke-opacity:1;fill:none"
transform="translate(3.2822988,-8.0832025)">
<path
d="m 78.97426,122.15112 c 0.264583,-0.0662 0.619125,-0.13759 1.058333,-0.21167 a 9.1995624,9.1995624 0 0 1 1.516062,-0.11113 3.2570208,3.2570208 0 0 1 1.280584,0.21696 2.0187708,2.0187708 0 0 1 0.814916,0.60854 2.3415625,2.3415625 0 0 1 0.428625,0.93927 5.3498749,5.3498749 0 0 1 0.124354,1.2065 v 3.63273 h -1.156229 v -3.37079 a 5.6038749,5.6038749 0 0 0 -0.07937,-1.01864 1.7515416,1.7515416 0 0 0 -0.264583,-0.68527 1.0583333,1.0583333 0 0 0 -0.497417,-0.37836 2.1854583,2.1854583 0 0 0 -0.772583,-0.11906 c -0.124354,0 -0.251354,0 -0.383646,0.0132 -0.132292,0.0132 -0.264583,0.0185 -0.381,0.0318 -0.116416,0.0132 -0.227541,0.0265 -0.322791,0.0423 l -0.20373,0.037 v 5.461 H 78.97691 Z"
id="path903"
style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-opacity:1" />
<path
d="m 87.147239,129.63618 a 2.0372916,2.0372916 0 0 0 0.354541,0.11906 1.7012708,1.7012708 0 0 0 0.425979,0.0688 1.6801041,1.6801041 0 0 0 1.058334,-0.30427 3.07975,3.07975 0 0 0 0.732896,-1.07421 33.977791,33.977791 0 0 1 -1.497542,-3.07975 27.008666,27.008666 0 0 1 -1.124479,-3.38666 h 1.243541 c 0.08996,0.37306 0.201084,0.77523 0.328084,1.20385 0.127,0.42863 0.264583,0.87577 0.428625,1.32292 0.164041,0.44714 0.328083,0.91281 0.510646,1.36789 0.182562,0.45509 0.373062,0.89694 0.5715,1.32292 q 0.473604,-1.30704 0.820208,-2.58763 0.346604,-1.28058 0.658812,-2.64583 h 1.195917 q -0.447146,1.82563 -0.994833,3.51102 -0.547688,1.6854 -1.182688,3.15384 a 6.8421249,6.8421249 0 0 1 -0.515937,0.96308 2.8495625,2.8495625 0 0 1 -0.590021,0.6641 2.143125,2.143125 0 0 1 -0.727604,0.38629 3.1406041,3.1406041 0 0 1 -0.915459,0.12436 2.1828125,2.1828125 0 0 1 -0.28575,-0.0185 c -0.0979,-0.0132 -0.195791,-0.0291 -0.291041,-0.0503 -0.09525,-0.0212 -0.182563,-0.0423 -0.264584,-0.0661 a 1.4419791,1.4419791 0 0 1 -0.166687,-0.0635 z"
id="path905"
style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-opacity:1" />
<path
d="m 95.56628,122.15112 c 0.264583,-0.0662 0.613833,-0.13759 1.058333,-0.21167 a 9.0857916,9.0857916 0 0 1 1.510771,-0.11113 2.8654375,2.8654375 0 0 1 1.045104,0.16669 1.8997083,1.8997083 0 0 1 0.709084,0.49213 c 0.05556,-0.0423 0.148168,-0.10055 0.264588,-0.17463 a 3.159125,3.159125 0 0 1 0.46037,-0.21696 5.0270833,5.0270833 0 0 1 0.60854,-0.18785 3.1485416,3.1485416 0 0 1 0.72231,-0.0794 2.9104166,2.9104166 0 0 1 1.21709,0.21696 1.7568333,1.7568333 0 0 1 0.74083,0.61648 2.38125,2.38125 0 0 1 0.35983,0.94456 6.9691249,6.9691249 0 0 1 0.0952,1.19327 v 3.63273 h -1.15887 v -3.37079 a 7.4321457,7.4321457 0 0 0 -0.0556,-0.9816 1.8520833,1.8520833 0 0 0 -0.21167,-0.68527 0.97895832,0.97895832 0 0 0 -0.42069,-0.40217 1.5875,1.5875 0 0 0 -0.69056,-0.12171 2.238375,2.238375 0 0 0 -0.93398,0.23548 3.1167916,3.1167916 0 0 0 -0.52917,0.2884 3.3363958,3.3363958 0 0 1 0.11907,0.61118 6.5722499,6.5722499 0 0 1 0.0503,0.80698 v 3.63273 h -1.143002 v -3.38402 a 6.5166874,6.5166874 0 0 0 -0.0635,-0.9816 2.0081875,2.0081875 0 0 0 -0.216959,-0.68527 0.98424999,0.98424999 0 0 0 -0.423333,-0.40217 1.5372291,1.5372291 0 0 0 -0.677333,-0.13229 c -0.116417,0 -0.240771,0 -0.373063,0.0132 -0.132292,0.0132 -0.264583,0.0185 -0.378354,0.0318 -0.113771,0.0132 -0.230188,0.0265 -0.330729,0.0423 -0.100542,0.0159 -0.166688,0.0291 -0.198438,0.037 v 5.461 H 95.56628 Z"
id="path907"
style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-opacity:1" />
<path
d="m 118.17493,121.80187 a 3.3205208,3.3205208 0 0 1 1.17475,0.18256 1.8679583,1.8679583 0 0 1 0.76993,0.508 1.9473333,1.9473333 0 0 1 0.41804,0.79375 3.8391041,3.8391041 0 0 1 0.12436,1.00277 v 4.01637 c -0.10054,0.0238 -0.26458,0.0635 -0.43392,0.0926 -0.16933,0.0291 -0.36248,0.0556 -0.58737,0.082 -0.2249,0.0265 -0.46567,0.0476 -0.72761,0.0688 -0.26193,0.0212 -0.52916,0.0291 -0.77523,0.0291 a 4.2941874,4.2941874 0 0 1 -1.00806,-0.11112 2.2568958,2.2568958 0 0 1 -0.79375,-0.35454 1.6377708,1.6377708 0 0 1 -0.52917,-0.64029 2.2410208,2.2410208 0 0 1 -0.18785,-0.9578 1.8520833,1.8520833 0 0 1 0.2196,-0.92075 1.7250833,1.7250833 0 0 1 0.59003,-0.62177 2.7384375,2.7384375 0 0 1 0.87047,-0.3466 4.6196249,4.6196249 0 0 1 1.05834,-0.11377 c 0.11377,0 0.23548,0 0.35983,0.0185 0.12436,0.0185 0.24342,0.0291 0.35454,0.0503 l 0.29104,0.0556 0.17463,0.037 v -0.32279 a 2.7278541,2.7278541 0 0 0 -0.0609,-0.56621 1.3229166,1.3229166 0 0 0 -0.2249,-0.49741 1.1509375,1.1509375 0 0 0 -0.44185,-0.34661 1.7197916,1.7197916 0 0 0 -0.72761,-0.13229 5.2916666,5.2916666 0 0 0 -0.98689,0.0952 3.0903333,3.0903333 0 0 0 -0.6403,0.21696 l -0.1852,-0.95779 a 3.2940625,3.2940625 0 0 1 0.79375,-0.26458 6.3208958,6.3208958 0 0 1 1.11125,-0.0953 z m 0.0979,5.79702 c 0.26458,0 0.51594,0 0.72761,-0.0185 a 3.4157708,3.4157708 0 0 0 0.52916,-0.0688 v -1.92087 a 1.5345833,1.5345833 0 0 0 -0.40481,-0.10583 4.4979166,4.4979166 0 0 0 -0.67733,-0.0423 4.5825833,4.5825833 0 0 0 -0.55298,0.037 1.651,1.651 0 0 0 -0.52917,0.15611 1.1244792,1.1244792 0 0 0 -0.40481,0.32279 0.84666666,0.84666666 0 0 0 -0.1614,0.52917 0.92604165,0.92604165 0 0 0 0.39952,0.86518 2.06375,2.06375 0 0 0 1.07421,0.24607 z"
id="path909"
style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-opacity:1" />
<path
d="m 107.37199,125.2097 a 4.1010416,4.1010416 0 0 1 0.24871,-1.49754 3.175,3.175 0 0 1 0.65881,-1.05834 2.7040416,2.7040416 0 0 1 0.94456,-0.635 2.9739166,2.9739166 0 0 1 1.09538,-0.21166 q 1.30704,0 2.00289,0.81491 0.69586,0.81492 0.69586,2.4818 v 0.19314 a 1.8018125,1.8018125 0 0 1 -0.0132,0.21696 h -4.42648 a 2.3574375,2.3574375 0 0 0 0.58473,1.52929 c 0.33866,0.34925 0.87048,0.52917 1.5875,0.52917 a 4.3259374,4.3259374 0 0 0 1.02658,-0.10584 4.1962916,4.1962916 0 0 0 0.70115,-0.26458 l 0.16404,0.96838 a 3.7888333,3.7888333 0 0 1 -0.81492,0.29898 5.3498749,5.3498749 0 0 1 -1.20121,0.11112 3.8232291,3.8232291 0 0 1 -1.4605,-0.24077 2.7410833,2.7410833 0 0 1 -1.01335,-0.70379 2.8627916,2.8627916 0 0 1 -0.59002,-1.05834 4.4582291,4.4582291 0 0 1 -0.1905,-1.36789 z m 4.43971,-0.63236 a 1.9420416,1.9420416 0 0 0 -0.39159,-1.28852 1.349375,1.349375 0 0 0 -1.11389,-0.5027 1.5213541,1.5213541 0 0 0 -0.70115,0.15345 1.74625,1.74625 0 0 0 -0.52917,0.40482 1.889125,1.889125 0 0 0 -0.32808,0.57414 2.8442708,2.8442708 0 0 0 -0.1561,0.65881 z"
id="path911"
style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-opacity:1" />
<path
d="m 112.31176,84.159595 a 0.89164582,0.89164582 0 0 0 -0.10583,-0.214312 c -0.40482,-1.016 -1.48696,-1.72773 -2.36803,-2.185459 a 6.1542083,6.1542083 0 0 0 -4.15131,-0.460375 c -1.03981,0.264584 -1.64835,0.769938 -2.44739,1.4605 a 9.1863332,9.1863332 0 0 1 0.64823,0.955146 c 1.52135,2.614083 2.27806,5.191125 2.26483,7.694083 a 4.6407916,4.6407916 0 0 1 2.20927,-0.955146 v 0 h 0.0212 v 0 l 0.10054,-0.02381 0.082,-0.0291 0.0503,-0.01588 v 0 l 0.10848,-0.03969 v 0 a 5.4874583,5.4874583 0 0 0 1.26735,-0.740833 c 1.28323,-0.963083 1.83621,-2.069042 2.23838,-3.309937 a 3.4395833,3.4395833 0 0 0 0.082,-2.135188 z m -0.36248,2.047875 c -0.34925,1.074208 -0.85196,2.201333 -2.13519,3.175 a 6.6913124,6.6913124 0 0 1 -0.77258,0.502708 v 0 c 0.13758,-0.179916 0.28575,-0.391583 0.43656,-0.632354 l 0.0238,-0.03704 c 0.0714,-0.116417 0.14288,-0.240771 0.21432,-0.370417 l 0.0212,-0.03969 c 0.0635,-0.119062 0.12436,-0.243416 0.18521,-0.370416 a 0.3889375,0.3889375 0 0 1 0.0265,-0.05821 c 0.0609,-0.134937 0.11906,-0.277812 0.17198,-0.420687 0,-0.0291 0.0212,-0.05821 0.0291,-0.08731 0.0476,-0.134937 0.0926,-0.264583 0.13229,-0.418041 a 0.47624999,0.47624999 0 0 1 0.0132,-0.05027 c 0.0397,-0.153458 0.0741,-0.312208 0.10055,-0.470958 l 0.0159,-0.111125 c 0.0238,-0.166688 0.0423,-0.333375 0.0503,-0.505355 a 0.79374999,0.79374999 0 0 0 -1.30969,-0.79375 0.79374999,0.79374999 0 0 0 -0.10848,0.240771 0.79374999,0.79374999 0 0 0 1.08744,0.9525 5.1170416,5.1170416 0 0 1 -0.0979,0.502709 c 0,0.03175 -0.0132,0.06085 -0.0238,0.0926 -0.0397,0.156104 -0.0847,0.306916 -0.13758,0.455083 0,0.0291 -0.0212,0.05821 -0.0344,0.08996 -0.0529,0.145521 -0.11112,0.28575 -0.17197,0.423334 0,0 0,0 0,0.01588 -0.0662,0.140229 -0.13494,0.264583 -0.20638,0.402166 -0.0132,0.02646 -0.0265,0.05292 -0.0423,0.07937 q -0.10319,0.182563 -0.20638,0.34925 l -0.0423,0.0635 c -0.0714,0.10848 -0.14023,0.211667 -0.20902,0.306917 -0.0741,0.100542 -0.14288,0.193146 -0.20902,0.264583 l -0.0291,0.03704 -0.17991,0.219604 v 0 c -0.52917,-1.571625 -0.75671,-3.145896 -0.6059,-4.177771 0.09,-0.619125 0.32808,-2.25425 1.524,-2.645833 a 1.666875,1.666875 0 0 1 0.52917,-0.07937 c 0.98425,0 1.94204,0.743479 2.06375,1.129771 a 3.1167916,3.1167916 0 0 1 -0.10319,1.965854 z"
id="path913"
style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-opacity:1" />
<path
d="m 103.40324,100.98445 a 14.094354,14.094354 0 0 0 -7.61471,-6.474355 13.163021,13.163021 0 0 0 0.161396,2.394479 c 0,0.0979 0.02117,0.198438 0.0344,0.298979 l 0.01587,0.0979 c 0,0.06879 0.01852,0.137583 0.0291,0.206375 0.01058,0.06879 0.01323,0.08202 0.01852,0.124354 0.0053,0.04233 0.02117,0.124354 0.03175,0.1905 l 0.02381,0.132292 c 0,0.0635 0.02117,0.127 0.0344,0.1905 0.01323,0.0635 0.01852,0.0926 0.02646,0.137583 l 0.03969,0.195792 c 0,0.04762 0.01852,0.0926 0.0291,0.137583 l 0.07144,0.314854 0.03969,0.164042 c 0.01587,0.05821 0.0291,0.119063 0.04498,0.177271 0.01588,0.05821 0.03175,0.124354 0.05027,0.185208 0.01852,0.06085 0.0291,0.105834 0.04233,0.15875 0.01323,0.05292 0.03704,0.129646 0.05821,0.195792 0.02117,0.06615 0.0291,0.100542 0.04233,0.150812 0.01323,0.05027 0.04233,0.137579 0.06615,0.206369 0.02381,0.0688 0.02646,0.0926 0.04233,0.13759 0.01587,0.045 0.04762,0.14816 0.07408,0.22489 0,0.0318 0.02117,0.0635 0.0344,0.0953 0.0979,0.28575 0.206375,0.57679 0.325438,0.87048 l 0.03175,0.0794 c 0.0344,0.09 0.07408,0.17727 0.111125,0.26458 0.01588,0.0318 0.0291,0.0661 0.04233,0.0979 l 0.119063,0.26459 0.04498,0.0926 c 0.04233,0.0953 0.08731,0.18786 0.132292,0.28046 0,0.0212 0.02117,0.0423 0.0291,0.0661 0.216958,0.4392 0.455083,0.88635 0.722312,1.32291 l 0.0291,0.0503 0.185209,0.30427 c 0.01588,0.0238 0.03175,0.0476 0.04498,0.0714 0.0635,0.10054 0.129646,0.20109 0.195792,0.30163 l 0.04233,0.0661 c 0.07144,0.10584 0.140229,0.21167 0.214312,0.31486 v 0.0132 c 0.320146,0.46037 0.672042,0.92339 1.058341,1.38112 l 0.0582,0.0688 0.26458,0.29369 0.0741,0.0847 0.26459,0.29104 0.0688,0.0741 0.28839,0.30427 v 0 a 22.404916,22.404916 0 0 0 2.17223,1.97115 c 0,0 2.65113,-4.07458 0.0847,-8.5725 z"
id="path915"
style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-opacity:1" />
<path
d="M 101.40563,97.404637 A 7.0987707,7.0987707 0 0 0 97.209343,93.50997 q -0.738188,-0.264583 -1.415521,-0.560917 c 0,0.306917 0,0.624417 0,0.955146 l 0.185208,0.06615 a 14.321896,14.321896 0 0 1 5.4266,3.434292 z"
id="path917"
style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-opacity:1" />
<path
d="m 105.07541,94.756157 c 1.32291,-4.27302 -0.11378,-8.08302 -1.67217,-10.757958 -1.5584,-2.674937 -5.027085,-4.725458 -7.26546,-5.55625 -2.238375,-0.830791 -4.7625,-2.669645 -4.7625,-2.669645 -0.06615,-0.04233 -0.127,-0.08731 -0.1905,-0.129646 l -0.08202,-0.05821 -0.103187,-0.07408 -0.08467,-0.06085 -0.08996,-0.06615 c -0.0291,-0.02117 -0.05292,-0.04233 -0.08202,-0.06085 l -0.08731,-0.06879 -0.07408,-0.05821 -0.08996,-0.06879 -0.06615,-0.05556 -0.08996,-0.07408 -0.05821,-0.04762 -0.100541,-0.08731 -0.04233,-0.0344 -0.129645,-0.116417 c -0.971021,-0.878416 -1.489605,-1.690687 -2.264834,-2.645833 a 11.707812,11.707812 0 0 0 -0.79375,2.547938 c 0.296334,0.529166 1.156229,1.825624 3.063875,3.249083 0.03969,0.02646 0.07673,0.05556 0.113771,0.08467 l 0.137583,0.0979 0.127,0.08996 0.137584,0.09525 0.166687,0.11377 0.182563,0.119063 0.193146,0.127 0.129645,0.08202 0.185209,0.113771 0.124354,0.07673 0.264583,0.156104 0.09525,0.05556 0.28575,0.15875 0.121709,0.06615 0.246062,0.132292 0.119063,0.06085 c 0.119062,0.0635 0.238125,0.124354 0.362479,0.185208 h 0.01852 l 0.375708,0.182563 0.121708,0.05556 0.298979,0.134938 0.121709,0.05556 0.423333,0.182563 c 0.455083,0.1905 1.836208,0.751417 1.852083,0.756708 l 1.711854,0.695854 -1.775354,-0.508 c -0.06085,-0.01852 -1.465791,-0.420687 -1.93675,-0.595312 l -0.386291,-0.142875 -0.113771,-0.04498 -0.264583,-0.105834 -0.124355,-0.05027 -0.264583,-0.111125 -0.09525,-0.03969 -0.338667,-0.150812 -0.08731,-0.04233 -0.243417,-0.113771 -0.121708,-0.05821 -0.206375,-0.100542 -0.116417,-0.06085 -0.227541,-0.116416 -0.08731,-0.04762 -0.264583,-0.145521 -0.119063,-0.06615 -0.161396,-0.09525 -0.127,-0.07144 -0.150812,-0.0926 -0.116417,-0.07144 -0.203729,-0.127 -0.145521,-0.0926 -0.132291,-0.08996 -0.119063,-0.07937 a 11.162771,11.162771 0 0 1 -3.190875,-3.14325 19.539479,19.539479 0 0 0 -0.174625,4.355042 19.558,19.558 0 0 0 5.122333,3.286125 l 0.02911,0.01323 0.325437,0.142875 0.05027,0.02117 c 0.238125,0.100541 0.481542,0.198437 0.732896,0.296333 l 0.0926,0.0344 0.28575,0.105833 0.105833,0.03969 0.381,0.132291 c 0.238125,0.07937 0.955146,0.336021 0.963083,0.338667 l 0.886355,0.314854 -0.93398,-0.124354 c -0.03175,0 -0.793749,-0.105833 -1.058333,-0.169333 -0.177271,-0.04233 -0.34925,-0.08731 -0.529166,-0.134938 l -0.116417,-0.03175 q -0.232833,-0.0635 -0.460375,-0.134937 l -0.15875,-0.05027 -0.309563,-0.103188 -0.298979,-0.103187 -0.219604,-0.08202 -0.248708,-0.09525 -0.0979,-0.03969 -0.211667,-0.08731 v 0 a 15.409333,15.409333 0 0 1 -4.2545,-2.645833 18.142479,18.142479 0 0 0 0.738188,3.439583 c 0.08731,0.264583 0.185208,0.529167 0.288396,0.79375 a 20.748625,20.748625 0 0 0 4.087812,1.386417 c 0.251354,0.05821 0.949854,0.235479 1.105958,0.264583 v 0 h 0.03175 l 1.016,0.264583 -1.045104,-0.0635 c -0.03704,0 -0.891646,-0.05556 -1.182687,-0.09525 a 16.486187,16.486187 0 0 1 -3.664479,-0.965729 c 1.735666,3.6195 4.97152,5.659438 9.318624,7.281333 a 7.7417082,7.7417082 0 0 1 5.124984,6.614584 2.047875,2.047875 0 0 0 0.18256,-0.166688 c 0.0661,-0.06085 0.14023,-0.137583 0.21696,-0.22225 0.44714,-0.529166 1.25412,-1.7145 2.02671,-4.085166 l 0.0159,-0.05556 q 0.0556,-0.124354 0.10584,-0.291042 z"
id="path919"
style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-opacity:1" />
</g>
<path
id="path959"
style="fill:#808080;fill-opacity:1;stroke-width:0.999999"
d="M 262.05859 518.22266 L 262.05859 564.02344 L 274.99805 584.02344 L 274.99805 623.22266 L 299.54492 623.22266 L 299.54492 584.02344 L 312.48438 564.02344 L 312.48438 518.22266 L 262.05859 518.22266 z M 265 521.10156 L 310 521.10156 L 310 541.10156 L 265 541.10156 L 265 521.10156 z M 285.52539 549.71289 L 295.12695 572.4043 L 289.01758 572.4043 L 289.01758 588.11328 L 279.41797 565.42188 L 285.52539 565.42188 L 285.52539 549.71289 z "
transform="matrix(0.26458333,0,0,0.26458333,42.968191,38.432539)" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="m 93.896206,175.54568 v 12.11826 h -3.42353 v 15.66299 H 83.97831 l -4e-5,-15.66299 h -3.42352 v -12.11826 z m -9.372817,6.61458 h 5.291667 v -5.29167 h -5.291667 z"
fill="#737373"
id="path861"
style="fill:#808080;fill-opacity:1;stroke-width:0.264583"
sodipodi:nodetypes="cccccccccccccc" />
<g
transform="matrix(0,-0.26447869,-0.26458333,0,191.30256,260.14012)"
id="g4780"
style="display:inline">
<rect
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:4;marker:none;enable-background:accumulate"
id="rect4782"
width="96.037987"
height="96"
x="-438.00244"
y="345.36221"
transform="scale(-1,1)" />
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="M 23.976562,8.0019531 C 18.943803,8.0601401 15.26124,7.8815461 12.25,9.5429688 10.74438,10.37368 9.5531413,11.778707 8.8945312,13.533203 8.2359313,15.287699 7.9980469,17.369641 7.9980469,20 v 56 c 0,2.630359 0.2378844,4.714254 0.8964843,6.46875 C 9.5531413,84.223246 10.74438,85.62632 12.25,86.457031 15.26124,88.118454 18.943803,87.941823 23.976562,88 h 0.01172 48.021485 0.01172 c 5.03276,-0.05818 8.715323,0.118454 11.726563,-1.542969 1.50562,-0.830711 2.696869,-2.233785 3.355469,-3.988281 C 87.762116,80.714254 88,78.630359 88,76 V 20 C 88,17.369641 87.762116,15.287699 87.103516,13.533203 86.444916,11.778707 85.253667,10.37368 83.748047,9.5429688 80.736807,7.8815461 77.054244,8.0601301 72.021484,8.0019531 H 72.009766 23.988281 Z M 24.021484,12 h 47.976563 c 5.03826,0.05877 8.352116,0.237002 9.816406,1.044922 0.73352,0.40471 1.152659,0.852789 1.542969,1.892578 0.39032,1.039779 0.640625,2.692858 0.640625,5.0625 v 56 c 0,2.369642 -0.250305,4.022711 -0.640625,5.0625 -0.39031,1.039779 -0.809449,1.487868 -1.542969,1.892578 C 80.350163,83.762988 77.036307,83.941223 71.998047,84 H 71.974609 24.021484 24 C 18.96042,83.941263 15.648104,83.763108 14.183594,82.955078 13.450074,82.550368 13.030935,82.102279 12.640625,81.0625 12.250305,80.022711 12,78.369642 12,76 V 20 c 0,-2.369642 0.250305,-4.022721 0.640625,-5.0625 0.39031,-1.039789 0.809449,-1.487868 1.542969,-1.892578 1.46703,-0.80943 4.78371,-0.986445 9.83789,-1.044922 z M 36,25 v 5 H 24 V 70 H 72 V 30 H 60 v -5 z"
transform="matrix(0,-1,-1.0003957,0,438.00245,441.36222)"
id="path4297" />
</g>
<g
id="g913"
transform="matrix(0.26458333,0,0,0.26458333,106.27548,144.12993)">
<rect
id="rect4782-7"
style="color:#000000;fill:none"
transform="rotate(90)"
height="96"
width="96"
y="-96"
x="-2.7465821e-06" />
<rect
id="rect4174"
style="color:#000000;fill:#808080"
height="4"
width="32"
y="46.005001"
x="32" />
<rect
style="fill:none;stroke:#808080;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
id="rect837"
width="63.615005"
height="20"
x="16.192497"
y="38"
rx="10"
ry="10" />
</g>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583;filter:url(#filter921)"
x="57.793251"
y="190.90323"
id="text919"><tspan
sodipodi:role="line"
id="tspan917"
x="57.793251"
y="190.90323"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;fill:#808080;fill-opacity:1;stroke-width:0.264583">1</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#808080;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="142.53079"
y="191.16351"
id="text927"><tspan
sodipodi:role="line"
id="tspan925"
x="142.53079"
y="191.16351"
style="fill:#808080;fill-opacity:1;stroke-width:0.264583">2</tspan></text>
<ellipse
style="opacity:1;fill:none;fill-opacity:1;stroke:#808080;stroke-width:0.529167;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter931)"
id="path929"
cx="60.767162"
cy="187.23611"
rx="7.574264"
ry="7.8942637" />
<ellipse
style="fill:none;fill-opacity:1;stroke:#808080;stroke-width:0.529167;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter931)"
id="ellipse935"
cx="145.43382"
cy="187.23611"
rx="7.574264"
ry="7.8942637" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -0,0 +1,142 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="120.26458mm"
height="169.68445mm"
viewBox="0 0 120.26458 169.68445"
version="1.1"
id="svg8"
inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
sodipodi:docname="wireless-connection.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.3237061"
inkscape:cx="207.97303"
inkscape:cy="494.1004"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="true"
inkscape:window-width="1464"
inkscape:window-height="933"
inkscape:window-x="72"
inkscape:window-y="27"
inkscape:window-maximized="1"
fit-margin-top="10"
fit-margin-left="10"
fit-margin-right="10"
fit-margin-bottom="10"
lock-margins="true">
<inkscape:grid
type="xygrid"
id="grid974" />
</sodipodi:namedview>
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-42.968191,-38.432539)">
<rect
style="fill:none;fill-opacity:1;stroke:#808080;stroke-width:1.32291667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect833"
width="100"
height="100"
x="53.100483"
y="43.273163"
rx="5"
ry="5" />
<path
d="m 82.256559,114.06792 c 0.264583,-0.0662 0.619125,-0.13759 1.058333,-0.21167 a 9.1995624,9.1995624 0 0 1 1.516062,-0.11113 3.2570208,3.2570208 0 0 1 1.280584,0.21696 2.0187708,2.0187708 0 0 1 0.814916,0.60854 2.3415625,2.3415625 0 0 1 0.428625,0.93927 5.3498749,5.3498749 0 0 1 0.124354,1.2065 v 3.63273 h -1.156229 v -3.37079 a 5.6038749,5.6038749 0 0 0 -0.07937,-1.01864 1.7515416,1.7515416 0 0 0 -0.264583,-0.68527 1.0583333,1.0583333 0 0 0 -0.497417,-0.37836 2.1854583,2.1854583 0 0 0 -0.772583,-0.11906 c -0.124354,0 -0.251354,0 -0.383646,0.0132 -0.132292,0.0132 -0.264583,0.0185 -0.381,0.0318 -0.116416,0.0132 -0.227541,0.0265 -0.322791,0.0423 l -0.20373,0.037 v 5.461 h -1.158875 z"
id="path903"
style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-opacity:1" />
<path
d="m 90.429538,121.55298 a 2.0372916,2.0372916 0 0 0 0.354541,0.11906 1.7012708,1.7012708 0 0 0 0.425979,0.0688 1.6801041,1.6801041 0 0 0 1.058334,-0.30427 3.07975,3.07975 0 0 0 0.732896,-1.07421 33.977791,33.977791 0 0 1 -1.497542,-3.07975 27.008666,27.008666 0 0 1 -1.124479,-3.38666 h 1.243541 c 0.08996,0.37306 0.201084,0.77523 0.328084,1.20385 0.127,0.42863 0.264583,0.87577 0.428625,1.32292 0.164041,0.44714 0.328083,0.91281 0.510646,1.36789 0.182562,0.45509 0.373062,0.89694 0.5715,1.32292 q 0.473604,-1.30704 0.820208,-2.58763 0.346604,-1.28058 0.658812,-2.64583 H 96.1366 q -0.447146,1.82563 -0.994833,3.51102 -0.547688,1.6854 -1.182688,3.15384 a 6.8421249,6.8421249 0 0 1 -0.515937,0.96308 2.8495625,2.8495625 0 0 1 -0.590021,0.6641 2.143125,2.143125 0 0 1 -0.727604,0.38629 3.1406041,3.1406041 0 0 1 -0.915459,0.12436 2.1828125,2.1828125 0 0 1 -0.28575,-0.0185 c -0.0979,-0.0132 -0.195791,-0.0291 -0.291041,-0.0503 -0.09525,-0.0212 -0.182563,-0.0423 -0.264584,-0.0661 a 1.4419791,1.4419791 0 0 1 -0.166687,-0.0635 z"
id="path905"
style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-opacity:1" />
<path
d="m 98.848579,114.06792 c 0.264583,-0.0662 0.613833,-0.13759 1.058333,-0.21167 a 9.0857916,9.0857916 0 0 1 1.510768,-0.11113 2.8654375,2.8654375 0 0 1 1.04511,0.16669 1.8997083,1.8997083 0 0 1 0.70908,0.49213 c 0.0556,-0.0423 0.14817,-0.10055 0.26459,-0.17463 a 3.159125,3.159125 0 0 1 0.46037,-0.21696 5.0270833,5.0270833 0 0 1 0.60854,-0.18785 3.1485416,3.1485416 0 0 1 0.72231,-0.0794 2.9104166,2.9104166 0 0 1 1.21709,0.21696 1.7568333,1.7568333 0 0 1 0.74083,0.61648 2.38125,2.38125 0 0 1 0.35983,0.94456 6.9691249,6.9691249 0 0 1 0.0952,1.19327 v 3.63273 h -1.15887 v -3.37079 a 7.4321457,7.4321457 0 0 0 -0.0556,-0.9816 1.8520833,1.8520833 0 0 0 -0.21167,-0.68527 0.97895832,0.97895832 0 0 0 -0.42069,-0.40217 1.5875,1.5875 0 0 0 -0.69056,-0.12171 2.238375,2.238375 0 0 0 -0.93398,0.23548 3.1167916,3.1167916 0 0 0 -0.52917,0.2884 3.3363958,3.3363958 0 0 1 0.11907,0.61118 6.5722499,6.5722499 0 0 1 0.0503,0.80698 v 3.63273 h -1.143 v -3.38402 a 6.5166874,6.5166874 0 0 0 -0.0635,-0.9816 2.0081875,2.0081875 0 0 0 -0.21696,-0.68527 0.98424999,0.98424999 0 0 0 -0.42334,-0.40217 1.5372291,1.5372291 0 0 0 -0.67733,-0.13229 c -0.11642,0 -0.24077,0 -0.37306,0.0132 -0.13229,0.0132 -0.26458,0.0185 -0.37836,0.0318 -0.11377,0.0132 -0.23018,0.0265 -0.33072,0.0423 -0.10055,0.0159 -0.16669,0.0291 -0.19844,0.037 v 5.461 h -1.156171 z"
id="path907"
style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-opacity:1" />
<path
d="m 121.45723,113.71867 a 3.3205208,3.3205208 0 0 1 1.17475,0.18256 1.8679583,1.8679583 0 0 1 0.76993,0.508 1.9473333,1.9473333 0 0 1 0.41804,0.79375 3.8391041,3.8391041 0 0 1 0.12436,1.00277 v 4.01637 c -0.10054,0.0238 -0.26458,0.0635 -0.43392,0.0926 -0.16933,0.0291 -0.36248,0.0556 -0.58737,0.082 -0.2249,0.0265 -0.46567,0.0476 -0.72761,0.0688 -0.26193,0.0212 -0.52916,0.0291 -0.77523,0.0291 a 4.2941874,4.2941874 0 0 1 -1.00806,-0.11112 2.2568958,2.2568958 0 0 1 -0.79375,-0.35454 1.6377708,1.6377708 0 0 1 -0.52917,-0.64029 2.2410208,2.2410208 0 0 1 -0.18785,-0.9578 1.8520833,1.8520833 0 0 1 0.2196,-0.92075 1.7250833,1.7250833 0 0 1 0.59003,-0.62177 2.7384375,2.7384375 0 0 1 0.87047,-0.3466 4.6196249,4.6196249 0 0 1 1.05834,-0.11377 c 0.11377,0 0.23548,0 0.35983,0.0185 0.12436,0.0185 0.24342,0.0291 0.35454,0.0503 l 0.29104,0.0556 0.17463,0.037 v -0.32279 a 2.7278541,2.7278541 0 0 0 -0.0609,-0.56621 1.3229166,1.3229166 0 0 0 -0.2249,-0.49741 1.1509375,1.1509375 0 0 0 -0.44185,-0.34661 1.7197916,1.7197916 0 0 0 -0.72761,-0.13229 5.2916666,5.2916666 0 0 0 -0.98689,0.0952 3.0903333,3.0903333 0 0 0 -0.6403,0.21696 l -0.1852,-0.95779 a 3.2940625,3.2940625 0 0 1 0.79375,-0.26458 6.3208958,6.3208958 0 0 1 1.11125,-0.0953 z m 0.0979,5.79702 c 0.26458,0 0.51594,0 0.72761,-0.0185 a 3.4157708,3.4157708 0 0 0 0.52916,-0.0688 v -1.92087 a 1.5345833,1.5345833 0 0 0 -0.40481,-0.10583 4.4979166,4.4979166 0 0 0 -0.67733,-0.0423 4.5825833,4.5825833 0 0 0 -0.55298,0.037 1.651,1.651 0 0 0 -0.52917,0.15611 1.1244792,1.1244792 0 0 0 -0.40481,0.32279 0.84666666,0.84666666 0 0 0 -0.1614,0.52917 0.92604165,0.92604165 0 0 0 0.39952,0.86518 2.06375,2.06375 0 0 0 1.07421,0.24607 z"
id="path909"
style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-opacity:1" />
<path
d="m 110.65429,117.1265 a 4.1010416,4.1010416 0 0 1 0.24871,-1.49754 3.175,3.175 0 0 1 0.65881,-1.05834 2.7040416,2.7040416 0 0 1 0.94456,-0.635 2.9739166,2.9739166 0 0 1 1.09538,-0.21166 q 1.30704,0 2.00289,0.81491 0.69586,0.81492 0.69586,2.4818 v 0.19314 a 1.8018125,1.8018125 0 0 1 -0.0132,0.21696 h -4.42648 a 2.3574375,2.3574375 0 0 0 0.58473,1.52929 c 0.33866,0.34925 0.87048,0.52917 1.5875,0.52917 a 4.3259374,4.3259374 0 0 0 1.02658,-0.10584 4.1962916,4.1962916 0 0 0 0.70115,-0.26458 l 0.16404,0.96838 a 3.7888333,3.7888333 0 0 1 -0.81492,0.29898 5.3498749,5.3498749 0 0 1 -1.20121,0.11112 3.8232291,3.8232291 0 0 1 -1.4605,-0.24077 2.7410833,2.7410833 0 0 1 -1.01335,-0.70379 2.8627916,2.8627916 0 0 1 -0.59002,-1.05834 4.4582291,4.4582291 0 0 1 -0.1905,-1.36789 z m 4.43971,-0.63236 a 1.9420416,1.9420416 0 0 0 -0.39159,-1.28852 1.349375,1.349375 0 0 0 -1.11389,-0.5027 1.5213541,1.5213541 0 0 0 -0.70115,0.15345 1.74625,1.74625 0 0 0 -0.52917,0.40482 1.889125,1.889125 0 0 0 -0.32808,0.57414 2.8442708,2.8442708 0 0 0 -0.1561,0.65881 z"
id="path911"
style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-opacity:1" />
<path
d="m 115.59406,76.076392 a 0.89164582,0.89164582 0 0 0 -0.10583,-0.214312 c -0.40482,-1.016 -1.48696,-1.72773 -2.36803,-2.185459 a 6.1542083,6.1542083 0 0 0 -4.15131,-0.460375 c -1.03981,0.264584 -1.64835,0.769938 -2.44739,1.4605 a 9.1863332,9.1863332 0 0 1 0.64823,0.955146 c 1.52135,2.614083 2.27806,5.191125 2.26483,7.694083 a 4.6407916,4.6407916 0 0 1 2.20927,-0.955146 v 0 h 0.0212 v 0 l 0.10054,-0.02381 0.082,-0.0291 0.0503,-0.01588 v 0 l 0.10848,-0.03969 v 0 a 5.4874583,5.4874583 0 0 0 1.26735,-0.740833 c 1.28323,-0.963083 1.83621,-2.069042 2.23838,-3.309937 a 3.4395833,3.4395833 0 0 0 0.082,-2.135188 z m -0.36248,2.047876 c -0.34925,1.074207 -0.85196,2.201333 -2.13519,3.174999 a 6.6913124,6.6913124 0 0 1 -0.77258,0.502708 v 0 c 0.13758,-0.179916 0.28575,-0.391583 0.43656,-0.632354 l 0.0238,-0.03704 c 0.0714,-0.116417 0.14288,-0.240771 0.21432,-0.370417 l 0.0212,-0.03969 c 0.0635,-0.119062 0.12436,-0.243416 0.18521,-0.370416 a 0.3889375,0.3889375 0 0 1 0.0265,-0.05821 c 0.0609,-0.134937 0.11906,-0.277812 0.17198,-0.420687 0,-0.0291 0.0212,-0.05821 0.0291,-0.08731 0.0476,-0.134937 0.0926,-0.264583 0.13229,-0.418041 a 0.47624999,0.47624999 0 0 1 0.0132,-0.05027 c 0.0397,-0.153458 0.0741,-0.312208 0.10055,-0.470958 l 0.0159,-0.111125 c 0.0238,-0.166688 0.0423,-0.333375 0.0503,-0.505355 a 0.79374999,0.79374999 0 0 0 -1.30969,-0.79375 0.79374999,0.79374999 0 0 0 -0.10848,0.240771 0.79374999,0.79374999 0 0 0 1.08744,0.9525 5.1170416,5.1170416 0 0 1 -0.0979,0.502709 c 0,0.03175 -0.0132,0.06085 -0.0238,0.0926 -0.0397,0.156104 -0.0847,0.306916 -0.13758,0.455083 0,0.0291 -0.0212,0.05821 -0.0344,0.08996 -0.0529,0.145521 -0.11112,0.28575 -0.17197,0.423334 0,0 0,0 0,0.01588 -0.0662,0.140229 -0.13494,0.264583 -0.20638,0.402166 -0.0132,0.02646 -0.0265,0.05292 -0.0423,0.07937 q -0.10319,0.182563 -0.20638,0.34925 l -0.0423,0.0635 c -0.0714,0.10848 -0.14023,0.211667 -0.20902,0.306917 -0.0741,0.100542 -0.14288,0.193146 -0.20902,0.264583 l -0.0291,0.03704 -0.17991,0.219604 v 0 c -0.52917,-1.571625 -0.75671,-3.145896 -0.6059,-4.177771 0.09,-0.619125 0.32808,-2.25425 1.524,-2.645833 a 1.666875,1.666875 0 0 1 0.52917,-0.07937 c 0.98425,0 1.94204,0.743479 2.06375,1.129771 a 3.1167916,3.1167916 0 0 1 -0.10319,1.965854 z"
id="path913"
style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-opacity:1" />
<path
d="m 106.68554,92.901247 a 14.094354,14.094354 0 0 0 -7.614711,-6.474355 13.163021,13.163021 0 0 0 0.161396,2.394479 c 0,0.0979 0.02117,0.198438 0.0344,0.298979 l 0.01587,0.0979 c 0,0.06879 0.01852,0.137584 0.0291,0.206375 0.01058,0.06879 0.01323,0.08202 0.01852,0.124354 0.0053,0.04233 0.02117,0.124354 0.03175,0.1905 l 0.02381,0.132292 c 0,0.0635 0.02117,0.127 0.0344,0.1905 0.01323,0.0635 0.01852,0.0926 0.02646,0.137583 l 0.03969,0.195792 c 0,0.04762 0.01852,0.0926 0.0291,0.137584 l 0.07144,0.314854 0.03969,0.164041 c 0.01587,0.05821 0.0291,0.119063 0.04498,0.177271 0.01588,0.05821 0.03175,0.124354 0.05027,0.185209 0.01852,0.06085 0.0291,0.105834 0.04233,0.15875 0.01323,0.05292 0.03704,0.129645 0.05821,0.195791 0.02117,0.06615 0.0291,0.100543 0.04233,0.150812 0.01323,0.05027 0.04233,0.13758 0.06615,0.206369 0.02381,0.0688 0.02646,0.0926 0.04233,0.13759 0.01587,0.045 0.04761,0.148161 0.07407,0.22489 0,0.0318 0.0212,0.0635 0.0344,0.0953 0.0979,0.28575 0.20638,0.57679 0.32544,0.87048 l 0.0318,0.0794 c 0.0344,0.09 0.0741,0.177269 0.11113,0.264579 0.0159,0.0318 0.0291,0.0661 0.0423,0.0979 l 0.11906,0.26459 0.045,0.0926 c 0.0423,0.0953 0.0873,0.18786 0.13229,0.280461 0,0.0212 0.0212,0.0423 0.0291,0.0661 0.21696,0.4392 0.45509,0.886349 0.72231,1.322909 l 0.0291,0.0503 0.18521,0.30427 c 0.0159,0.0238 0.0318,0.0476 0.045,0.0714 0.0635,0.10054 0.12965,0.20109 0.1958,0.30163 l 0.0423,0.0661 c 0.0714,0.10584 0.14022,0.211669 0.21431,0.314859 v 0.0132 c 0.32014,0.46037 0.67204,0.92339 1.05834,1.38112 l 0.0582,0.0688 0.26458,0.29369 0.0741,0.0847 0.26459,0.29104 0.0688,0.0741 0.28839,0.30427 v 0 a 22.404916,22.404916 0 0 0 2.17223,1.971153 c 0,0 2.65113,-4.074583 0.0847,-8.572503 z"
id="path915"
style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-opacity:1" />
<path
d="m 104.68793,89.321434 a 7.0987707,7.0987707 0 0 0 -4.19629,-3.894667 Q 99.753454,85.162184 99.076121,84.86585 c 0,0.306917 0,0.624417 0,0.955146 l 0.185208,0.06615 a 14.321896,14.321896 0 0 1 5.426601,3.434292 z"
id="path917"
style="fill:none;stroke:#808080;stroke-width:0.264583;stroke-opacity:1" />
<path
d="m 108.35771,86.672955 c 1.32291,-4.273021 -0.11378,-8.083021 -1.67217,-10.757959 -1.5584,-2.674937 -5.02709,-4.725458 -7.265461,-5.55625 -2.238375,-0.830791 -4.7625,-2.669645 -4.7625,-2.669645 -0.06615,-0.04233 -0.127,-0.08731 -0.1905,-0.129646 l -0.08202,-0.05821 -0.103187,-0.07408 -0.08467,-0.06085 -0.08996,-0.06615 c -0.0291,-0.02117 -0.05292,-0.04233 -0.08202,-0.06085 l -0.08731,-0.06879 -0.07408,-0.05821 -0.08996,-0.06879 -0.06615,-0.05556 -0.08996,-0.07408 -0.05821,-0.04762 -0.100541,-0.08731 -0.04233,-0.0344 -0.129645,-0.116417 c -0.971021,-0.878416 -1.489605,-1.690687 -2.264834,-2.645833 a 11.707812,11.707812 0 0 0 -0.79375,2.547938 c 0.296334,0.529166 1.156229,1.825625 3.063875,3.249083 0.03969,0.02646 0.07673,0.05556 0.113771,0.08467 l 0.137583,0.0979 0.127,0.08996 0.137584,0.09525 0.166687,0.11377 0.182563,0.119063 0.193146,0.127 0.129645,0.08202 0.185209,0.113771 0.124354,0.07673 0.264583,0.156104 0.09525,0.05556 0.28575,0.15875 0.121709,0.06615 0.246062,0.132292 0.119063,0.06085 c 0.119062,0.0635 0.238125,0.124354 0.362479,0.185208 h 0.01852 l 0.375708,0.182563 0.121708,0.05556 0.298979,0.134938 0.121709,0.05556 0.423333,0.182563 c 0.455083,0.1905 1.836208,0.751417 1.852083,0.756708 l 1.711855,0.695854 -1.775355,-0.508 c -0.06085,-0.01852 -1.465791,-0.420687 -1.93675,-0.595312 l -0.386291,-0.142875 -0.113771,-0.04498 -0.264583,-0.105834 -0.124355,-0.05027 -0.264583,-0.111125 -0.09525,-0.03969 -0.338667,-0.150812 -0.08731,-0.04233 -0.243417,-0.113771 -0.121708,-0.05821 -0.206375,-0.100542 -0.116417,-0.06085 -0.227541,-0.116416 -0.08731,-0.04762 -0.264583,-0.145521 -0.119063,-0.06615 -0.161396,-0.09525 -0.127,-0.07144 -0.150812,-0.0926 -0.116417,-0.07144 -0.203729,-0.127 -0.145521,-0.0926 -0.132291,-0.08996 -0.119063,-0.07937 a 11.162771,11.162771 0 0 1 -3.190875,-3.143249 19.539479,19.539479 0 0 0 -0.174625,4.355042 19.558,19.558 0 0 0 5.122333,3.286125 l 0.02911,0.01323 0.325437,0.142875 0.05027,0.02117 c 0.238125,0.100542 0.481542,0.198437 0.732896,0.296333 l 0.0926,0.0344 0.28575,0.105833 0.105833,0.03969 0.381,0.13229 c 0.238125,0.07937 0.955146,0.336021 0.963083,0.338667 l 0.886355,0.314854 -0.93398,-0.124354 c -0.03175,0 -0.793749,-0.105833 -1.058333,-0.169332 -0.177271,-0.04233 -0.34925,-0.08731 -0.529166,-0.134939 l -0.116417,-0.03175 q -0.232833,-0.0635 -0.460375,-0.134936 l -0.15875,-0.05027 -0.309563,-0.103188 -0.298979,-0.103188 -0.219604,-0.08202 -0.248708,-0.09525 -0.0979,-0.03969 -0.211667,-0.08731 v 0 a 15.409333,15.409333 0 0 1 -4.2545,-2.645833 18.142479,18.142479 0 0 0 0.738188,3.439583 c 0.08731,0.264583 0.185208,0.529167 0.288396,0.79375 a 20.748625,20.748625 0 0 0 4.087812,1.386417 c 0.251354,0.05821 0.949854,0.235479 1.105958,0.264583 v 0 h 0.03175 l 1.016,0.264583 -1.045104,-0.0635 c -0.03704,0 -0.891646,-0.05556 -1.182687,-0.09525 A 16.486187,16.486187 0 0 1 91.366161,77.59779 c 1.735666,3.6195 4.97152,5.659438 9.318619,7.281333 a 7.7417082,7.7417082 0 0 1 5.12499,6.614584 2.047875,2.047875 0 0 0 0.18256,-0.166688 c 0.0661,-0.06085 0.14023,-0.137583 0.21696,-0.22225 0.44714,-0.529166 1.25412,-1.7145 2.02671,-4.085166 l 0.0159,-0.05556 q 0.0556,-0.124354 0.10584,-0.291042 z"
id="path919"
style="fill:none;stroke:#808080;stroke-width:0.26458333;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
<path
id="path959"
style="fill:#808080;fill-opacity:1;stroke-width:0.264583"
d="m 112.30457,175.54562 v 12.11812 l 3.42356,5.29167 v 10.37146 h 6.4947 v -10.37146 l 3.42356,-5.29167 v -12.11812 z m 0.77825,0.76171 h 11.90625 v 5.29166 h -11.90625 z m 5.43067,7.57008 2.54041,6.00376 h -1.61643 v 4.15634 l -2.5399,-6.00377 h 1.61592 z" />
<g
id="g913"
transform="matrix(0.26458333,0,0,0.26458333,106.27548,143.60076)">
<rect
id="rect4782-7"
style="color:#000000;fill:none"
transform="rotate(90)"
height="96"
width="96"
y="-96"
x="-2.7465821e-06" />
<rect
id="rect4174"
style="color:#000000;fill:#808080"
height="4"
width="32"
y="46.005001"
x="32" />
<rect
style="fill:none;stroke:#808080;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
id="rect837"
width="63.615005"
height="20"
x="16.192497"
y="38"
rx="10"
ry="10" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB