Improve initial setup

This commit is contained in:
Michael Zanetti 2018-06-22 01:46:26 +02:00
parent 5b26ed591b
commit e44d5c0fd8
21 changed files with 1649 additions and 373 deletions

View File

@ -243,7 +243,7 @@ void JsonRpcClient::sendRequest(const QVariantMap &request)
{ {
QVariantMap newRequest = request; QVariantMap newRequest = request;
newRequest.insert("token", m_token); newRequest.insert("token", m_token);
qDebug() << "Sending request" << qUtf8Printable(QJsonDocument::fromVariant(newRequest).toJson()); // qDebug() << "Sending request" << qUtf8Printable(QJsonDocument::fromVariant(newRequest).toJson());
m_connection->sendData(QJsonDocument::fromVariant(newRequest).toJson()); m_connection->sendData(QJsonDocument::fromVariant(newRequest).toJson());
} }
@ -278,7 +278,7 @@ void JsonRpcClient::dataReceived(const QByteArray &data)
// qWarning() << "Could not parse json data from mea" << data << error.errorString(); // qWarning() << "Could not parse json data from mea" << data << error.errorString();
return; return;
} }
qDebug() << "received response" << m_receiveBuffer.left(splitIndex); // qDebug() << "received response" << m_receiveBuffer.left(splitIndex);
m_receiveBuffer = m_receiveBuffer.right(m_receiveBuffer.length() - splitIndex - 1); m_receiveBuffer = m_receiveBuffer.right(m_receiveBuffer.length() - splitIndex - 1);
if (!m_receiveBuffer.isEmpty()) { if (!m_receiveBuffer.isEmpty()) {
staticMetaObject.invokeMethod(this, "dataReceived", Qt::QueuedConnection, Q_ARG(QByteArray, QByteArray())); staticMetaObject.invokeMethod(this, "dataReceived", Qt::QueuedConnection, Q_ARG(QByteArray, QByteArray()));

View File

@ -45,7 +45,7 @@ BluetoothDeviceInfos *BluetoothDiscovery::deviceInfos()
return m_deviceInfos; return m_deviceInfos;
} }
void BluetoothDiscovery::setDiscovering(const bool &discovering) void BluetoothDiscovery::setDiscovering(bool discovering)
{ {
m_discovering = discovering; m_discovering = discovering;
emit discoveringChanged(); emit discoveringChanged();

View File

@ -47,7 +47,7 @@ private:
bool m_discovering; bool m_discovering;
void setDiscovering(const bool &discovering); void setDiscovering(bool discovering);
signals: signals:
void discoveringChanged(); void discoveringChanged();

View File

@ -45,6 +45,7 @@ void WirelessAccesspoints::setWirelessAccessPoints(QList<WirelessAccessPoint *>
m_wirelessAccessPoints = wirelessAccessPoints; m_wirelessAccessPoints = wirelessAccessPoints;
endResetModel(); endResetModel();
emit countChanged();
} }
int WirelessAccesspoints::rowCount(const QModelIndex &parent) const int WirelessAccesspoints::rowCount(const QModelIndex &parent) const
@ -95,6 +96,7 @@ void WirelessAccesspoints::clearModel()
qDeleteAll(m_wirelessAccessPoints); qDeleteAll(m_wirelessAccessPoints);
m_wirelessAccessPoints.clear(); m_wirelessAccessPoints.clear();
endResetModel(); endResetModel();
emit countChanged();
} }
void WirelessAccesspoints::setSelectedNetwork(const QString &ssid, const QString &macAdderss) void WirelessAccesspoints::setSelectedNetwork(const QString &ssid, const QString &macAdderss)
@ -117,6 +119,7 @@ void WirelessAccesspoints::setSelectedNetwork(const QString &ssid, const QString
m_wirelessAccessPoints = wirelessAccessPoints; m_wirelessAccessPoints = wirelessAccessPoints;
endResetModel(); endResetModel();
emit countChanged();
} }
bool WirelessAccesspoints::signalStrengthLessThan(const WirelessAccessPoint *a, const WirelessAccessPoint *b) bool WirelessAccesspoints::signalStrengthLessThan(const WirelessAccessPoint *a, const WirelessAccessPoint *b)

View File

@ -31,6 +31,7 @@
class WirelessAccesspoints : public QAbstractListModel class WirelessAccesspoints : public QAbstractListModel
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(int count READ rowCount NOTIFY countChanged)
public: public:
enum BluetoothDeviceInfoRole { enum BluetoothDeviceInfoRole {
WirelessAccesspointRoleSsid = Qt::DisplayRole, WirelessAccesspointRoleSsid = Qt::DisplayRole,
@ -57,6 +58,9 @@ public:
static bool signalStrengthLessThan(const WirelessAccessPoint *a, const WirelessAccessPoint *b); static bool signalStrengthLessThan(const WirelessAccessPoint *a, const WirelessAccessPoint *b);
signals:
void countChanged();
protected: protected:
QHash<int, QByteArray> roleNames() const; QHash<int, QByteArray> roleNames() const;

View File

@ -137,7 +137,6 @@ void WirelessSetupManager::loadNetworks()
m_readingResponse = true; m_readingResponse = true;
m_inputDataStream.clear(); m_inputDataStream.clear();
m_accessPoints->clearModel();
setStatusText("WifiSetupManager: Loading wifi network list..."); setStatusText("WifiSetupManager: Loading wifi network list...");
setWorking(true); setWorking(true);
@ -602,12 +601,18 @@ void WirelessSetupManager::onConnectedChanged()
if (!connected()) { if (!connected()) {
// Clean up // Clean up
qDebug() << "WifiSetupManager: Clean up services"; qDebug() << "WifiSetupManager: Clean up services";
m_deviceInformationService->deleteLater(); if (m_deviceInformationService) {
m_netwokService->deleteLater(); m_deviceInformationService->deleteLater();
m_wifiService->deleteLater(); }
if (m_netwokService) {
if (m_systemService) m_netwokService->deleteLater();
}
if (m_wifiService) {
m_wifiService->deleteLater();
}
if (m_systemService) {
m_systemService->deleteLater(); m_systemService->deleteLater();
}
m_deviceInformationService = nullptr; m_deviceInformationService = nullptr;
m_netwokService = nullptr; m_netwokService = nullptr;

View File

@ -205,5 +205,9 @@
<file>ui/system/AboutNymeaPage.qml</file> <file>ui/system/AboutNymeaPage.qml</file>
<file>ui/images/logs.svg</file> <file>ui/images/logs.svg</file>
<file>ui/images/plugin.svg</file> <file>ui/images/plugin.svg</file>
<file>ui/images/nymea-box-setup.svg</file>
<file>ui/images/rpi-setup.svg</file>
<file>ui/images/eye.svg</file>
<file>ui/images/private-browsing.svg</file>
</qresource> </qresource>
</RCC> </RCC>

View File

@ -11,24 +11,53 @@ Page {
text: qsTr("Bluetooth discovery") text: qsTr("Bluetooth discovery")
onBackPressed: pageStack.pop() onBackPressed: pageStack.pop()
HeaderButton { // HeaderButton {
imageSource: Qt.resolvedUrl("images/refresh.svg") // imageSource: Qt.resolvedUrl("images/refresh.svg")
onClicked: Engine.bluetoothDiscovery.start() // onClicked: Engine.bluetoothDiscovery.start()
// }
}
property bool shouldDiscover: true
Component.onCompleted: Engine.bluetoothDiscovery.start()
Connections {
target: Engine.bluetoothDiscovery
onDiscoveringChanged: {
print("BT discovery changed:", Engine.bluetoothDiscovery.discovering, shouldDiscover)
if (!Engine.bluetoothDiscovery.discovering && shouldDiscover) {
Engine.bluetoothDiscovery.start();
}
} }
} }
Component.onCompleted: Engine.bluetoothDiscovery.start() function setupDevice(name, btAddress) {
shouldDiscover = false;
Engine.bluetoothDiscovery.stop()
pageStack.push(Qt.resolvedUrl("BluetoothLoadingPage.qml"), { name: name, address: btAddress } )
}
ColumnLayout { ColumnLayout {
anchors.fill: parent anchors.fill: parent
spacing: app.margins spacing: app.margins
BusyIndicator { RowLayout {
Layout.alignment: Qt.AlignHCenter spacing: app.margins
running: Engine.bluetoothDiscovery.discovering Layout.leftMargin: app.margins
Layout.topMargin: app.margins
Layout.rightMargin: app.rightMargin
Label {
Layout.fillWidth: true
text: qsTr("Searching for %1 boxes via Bluetooth.").arg(app.systemName)
wrapMode: Text.WordWrap
}
BusyIndicator {
running: Engine.bluetoothDiscovery.discovering
}
} }
ThinDivider { } ThinDivider {}
ListView { ListView {
Layout.fillWidth: true Layout.fillWidth: true
@ -37,42 +66,106 @@ Page {
model: Engine.bluetoothDiscovery.deviceInfos model: Engine.bluetoothDiscovery.deviceInfos
clip: true clip: true
delegate: ItemDelegate { delegate: MeaListItemDelegate {
width: parent.width width: parent.width
height: app.delegateHeight iconName: Qt.resolvedUrl("images/bluetooth.svg")
text: model.name
RowLayout { subText: model.address
anchors.verticalCenter: parent.verticalCenter
Item {
Layout.fillHeight: true
Layout.preferredWidth: height
ColorIcon {
id: image
name: Qt.resolvedUrl("images/bluetooth.svg")
anchors.fill: parent
anchors.margins: app.margins / 2
}
}
ColumnLayout {
Layout.fillWidth: true
Layout.fillHeight: true
anchors.margins: app.margins
Label {
text: model.name
}
Label {
text: model.address
font.pixelSize: app.smallFont
}
}
}
onClicked: { onClicked: {
print("Start bluetooth connection to", model.name, " --> ", model.address) root.setupDevice(model.name, model.address)
Engine.bluetoothDiscovery.stop() }
pageStack.push(Qt.resolvedUrl("BluetoothLoadingPage.qml"), { name: model.name, address: model.address } ) }
}
ThinDivider {}
RowLayout {
Layout.fillWidth: true
Layout.leftMargin: app.margins
Layout.rightMargin: app.margins
Layout.bottomMargin: app.margins
spacing: app.margins
Label {
Layout.fillWidth: true
text: qsTr("Troubles finding your box? Try this!")
}
Button {
text: qsTr("Help")
onClicked: pageStack.push(helpPageComponent)
}
}
}
Component {
id: helpPageComponent
Page {
id: helpPage
header: GuhHeader {
text: qsTr("Setup help")
onBackPressed: pageStack.pop()
}
Flickable {
anchors.fill: parent
contentHeight: helpColumn.implicitHeight
ColumnLayout {
id: helpColumn
width: parent.width
spacing: app.margins
Label {
Layout.fillWidth: true
Layout.leftMargin: app.margins
Layout.rightMargin: app.margins
Layout.topMargin: app.margins
wrapMode: Text.WordWrap
font.bold: true
text: "Raspberry Pi™"
}
Label {
Layout.fillWidth: true
Layout.leftMargin: app.margins
Layout.rightMargin: app.margins
wrapMode: Text.WordWrap
text: qsTr("After having installed the nymea community image to your Raspberry Pi, all you need to do is to plug it into a power socket. Note that the Wireless setup will only be available if the Raspberry Pi is not connected to a wired network.")
}
Image {
Layout.preferredWidth: app.iconSize * 8
Layout.preferredHeight: width * 540 / 800
sourceSize.width: 800
sourceSize.height: 540
fillMode: Image.PreserveAspectFit
Layout.alignment: Qt.AlignHCenter
source: "images/rpi-setup.svg"
}
ThinDivider {}
Label {
Layout.fillWidth: true
Layout.leftMargin: app.margins
Layout.rightMargin: app.margins
wrapMode: Text.WordWrap
font.bold: true
text: "%1 box".arg(systemName)
}
Label {
Layout.fillWidth: true
Layout.leftMargin: app.margins
Layout.rightMargin: app.margins
wrapMode: Text.WordWrap
text: qsTr("If you have a %1 box, plug it into a power socket and wait for it to be booted. Once the LED pulses slowly, press the button for 3 seconds until the LED changes.").arg(app.systemName)
}
Image {
Layout.preferredWidth: app.iconSize * 5
Layout.preferredHeight: width
Layout.bottomMargin: app.margins
sourceSize.width: width
sourceSize.height: width
fillMode: Image.PreserveAspectFit
Layout.alignment: Qt.AlignHCenter
source: "images/nymea-box-setup.svg"
}
} }
} }
} }

View File

@ -70,6 +70,15 @@ Page {
onTriggered: pageStack.push(Qt.resolvedUrl("BluetoothDiscoveryPage.qml")) onTriggered: pageStack.push(Qt.resolvedUrl("BluetoothDiscoveryPage.qml"))
} }
IconMenuItem {
iconSource: "../images/private-browsing.svg"
text: qsTr("Demo mode")
onTriggered: {
pageStack.push(connectingPage)
Engine.connection.connect("nymea://83.169.2.242:2222")
}
}
MenuSeparator {} MenuSeparator {}
IconMenuItem { IconMenuItem {
@ -85,7 +94,9 @@ Page {
ColumnLayout { ColumnLayout {
Layout.fillWidth: true Layout.fillWidth: true
Layout.margins: app.margins Layout.leftMargin: app.margins
Layout.rightMargin: app.margins
Layout.topMargin: app.margins
spacing: app.margins spacing: app.margins
Label { Label {
@ -105,11 +116,7 @@ Page {
} }
} }
Rectangle { ThinDivider {}
Layout.fillWidth: true
Layout.preferredHeight: 1
color: Material.accent
}
ListView { ListView {
Layout.fillWidth: true Layout.fillWidth: true
@ -210,15 +217,42 @@ Page {
} }
Rectangle { ThinDivider {}
Label {
Layout.fillWidth: true Layout.fillWidth: true
Layout.preferredHeight: 1 Layout.leftMargin: app.margins
color: Material.accent Layout.rightMargin: app.margins
wrapMode: Text.WordWrap
visible: discovery.discoveryModel.count === 0
text: qsTr("Do you have a %1 box but it's not connected to your network yet? Use the wireless setup to connect it!").arg(app.systemName)
}
Button {
Layout.fillWidth: true
Layout.leftMargin: app.margins
Layout.rightMargin: app.margins
visible: discovery.discoveryModel.count === 0
text: qsTr("Start wireless setup")
onClicked: pageStack.push(Qt.resolvedUrl("BluetoothDiscoveryPage.qml"))
}
Button {
Layout.fillWidth: true
Layout.leftMargin: app.margins
Layout.rightMargin: app.margins
Layout.bottomMargin: app.margins
visible: discovery.discoveryModel.count === 0
text: qsTr("Demo mode (online)")
onClicked: {
pageStack.push(connectingPage)
Engine.connection.connect("nymea://83.169.2.242:2222")
}
} }
RowLayout { RowLayout {
Layout.fillWidth: true Layout.fillWidth: true
Layout.margins: app.margins Layout.leftMargin: app.margins
Layout.rightMargin: app.margins
Layout.bottomMargin: app.margins
visible: root.haveHosts visible: root.haveHosts
Label { Label {
Layout.fillWidth: true Layout.fillWidth: true

View File

@ -10,6 +10,11 @@ Page {
header: GuhHeader { header: GuhHeader {
text: qsTr("Configure Things") text: qsTr("Configure Things")
onBackPressed: pageStack.pop() onBackPressed: pageStack.pop()
HeaderButton {
imageSource: "../images/add.svg"
onClicked: pageStack.push(Qt.resolvedUrl("NewDeviceWizard.qml"))
}
} }
ListView { ListView {
@ -18,9 +23,52 @@ Page {
delegate: ThingDelegate { delegate: ThingDelegate {
interfaces:model.interfaces interfaces:model.interfaces
name: model.name name: model.name
canDelete: true
onClicked: { onClicked: {
pageStack.push(Qt.resolvedUrl("devicepages/ConfigureThingPage.qml"), {device: Engine.deviceManager.devices.get(index)}) pageStack.push(Qt.resolvedUrl("devicepages/ConfigureThingPage.qml"), {device: Engine.deviceManager.devices.get(index)})
} }
onDeleteClicked: {
Engine.deviceManager.removeDevice(Engine.deviceManager.devices.get(index).id)
}
} }
} }
ColumnLayout {
anchors { left: parent.left; right: parent.right; margins: app.margins }
anchors.verticalCenter: parent.verticalCenter
spacing: app.margins * 2
visible: Engine.deviceManager.devices.count === 0 && !Engine.deviceManager.fetchingData
Label {
text: qsTr("There are no things set up yet.")
font.pixelSize: app.largeFont
Layout.fillWidth: true
wrapMode: Text.WordWrap
horizontalAlignment: Text.AlignHCenter
color: app.guhAccent
}
Label {
text: qsTr("In order for your %1 box to be useful, go ahead and add some things.").arg(app.systemName)
Layout.fillWidth: true
Layout.maximumWidth: 400
Layout.alignment: Qt.AlignHCenter
wrapMode: Text.WordWrap
horizontalAlignment: Text.AlignHCenter
}
Image {
source: "../guh-logo.svg"
Layout.preferredWidth: app.iconSize * 5
Layout.preferredHeight: width
Layout.alignment: Qt.AlignHCenter
sourceSize.width: app.iconSize * 5
sourceSize.height: app.iconSize * 5
}
Button {
Layout.fillWidth: true
Layout.maximumWidth: 400
Layout.alignment: Qt.AlignHCenter
text: qsTr("Add a thing")
onClicked: pageStack.push(Qt.resolvedUrl("NewDeviceWizard.qml"))
}
}
} }

View File

@ -13,22 +13,26 @@ Page {
HeaderButton { HeaderButton {
imageSource: Qt.resolvedUrl("images/add.svg") imageSource: Qt.resolvedUrl("images/add.svg")
onClicked: { onClicked: {
d.editRulePage = pageStack.push(Qt.resolvedUrl("magic/EditRulePage.qml"), {rule: Engine.ruleManager.createNewRule() }); addRule()
d.editRulePage.StackView.onRemoved.connect(function() {
d.editRulePage.rule.destroy()
d.editRulePage = null;
})
d.editRulePage.onAccept.connect(function() {
d.editRulePage.busy = true;
Engine.ruleManager.addRule(d.editRulePage.rule);
})
d.editRulePage.onCancel.connect(function() {
pageStack.pop();
})
} }
} }
} }
function addRule() {
d.editRulePage = pageStack.push(Qt.resolvedUrl("magic/EditRulePage.qml"), {rule: Engine.ruleManager.createNewRule() });
d.editRulePage.StackView.onRemoved.connect(function() {
d.editRulePage.rule.destroy()
d.editRulePage = null;
})
d.editRulePage.onAccept.connect(function() {
d.editRulePage.busy = true;
Engine.ruleManager.addRule(d.editRulePage.rule);
})
d.editRulePage.onCancel.connect(function() {
pageStack.pop();
})
}
QtObject { QtObject {
id: d id: d
property var editRulePage: null property var editRulePage: null
@ -88,6 +92,39 @@ Page {
} }
} }
ColumnLayout {
anchors { left: parent.left; right: parent.right; margins: app.margins }
anchors.verticalCenter: parent.verticalCenter
spacing: app.margins * 2
visible: Engine.ruleManager.rules.count === 0
Label {
Layout.fillWidth: true
horizontalAlignment: Text.AlignHCenter
text: qsTr("There is no magic set up yet.")
wrapMode: Text.WordWrap
color: app.guhAccent
font.pixelSize: app.largeFont
}
Label {
text: qsTr("Add some using the wizard stick!")
Layout.fillWidth: true
wrapMode: Text.WordWrap
horizontalAlignment: Text.AlignHCenter
}
AbstractButton {
Layout.preferredHeight: app.iconSize * 4
Layout.preferredWidth: height
Layout.alignment: Qt.AlignHCenter
ColorIcon {
anchors.fill: parent
name: "../images/magic.svg"
}
onClicked: addRule()
}
}
Component { Component {
id: errorDialog id: errorDialog
ErrorDialog {} ErrorDialog {}

View File

@ -44,12 +44,7 @@ Page {
text: qsTr("Configure things") text: qsTr("Configure things")
onTriggered: pageStack.push(Qt.resolvedUrl("EditDevicesPage.qml")) onTriggered: pageStack.push(Qt.resolvedUrl("EditDevicesPage.qml"))
} }
IconMenuItem { // MenuSeparator {}
iconSource: "../images/add.svg"
text: qsTr("Add a new thing")
onTriggered: pageStack.push(Qt.resolvedUrl("NewDeviceWizard.qml"))
}
MenuSeparator {}
IconMenuItem { IconMenuItem {
iconSource: "../images/magic.svg" iconSource: "../images/magic.svg"
text: qsTr("Magic") text: qsTr("Magic")
@ -128,8 +123,9 @@ Page {
} }
ColumnLayout { ColumnLayout {
anchors { left: parent.left; right: parent.right; top: parent.top; margins: app.margins } anchors { left: parent.left; right: parent.right; margins: app.margins }
spacing: app.margins anchors.verticalCenter: parent.verticalCenter
spacing: app.margins * 2
visible: Engine.deviceManager.devices.count === 0 && !Engine.deviceManager.fetchingData visible: Engine.deviceManager.devices.count === 0 && !Engine.deviceManager.fetchingData
Label { Label {
text: qsTr("Welcome to %1!").arg(app.systemName) text: qsTr("Welcome to %1!").arg(app.systemName)
@ -140,11 +136,28 @@ Page {
color: app.guhAccent color: app.guhAccent
} }
Label { Label {
text: qsTr("There are no things set up yet. You can start with adding your things by using the menu on the upper left and selecting \"Add a new thing\".") text: qsTr("There are no things set up yet. In order for your %1 box to be useful, go ahead and add some things.").arg(app.systemName)
Layout.fillWidth: true Layout.fillWidth: true
Layout.maximumWidth: 400
Layout.alignment: Qt.AlignHCenter
wrapMode: Text.WordWrap wrapMode: Text.WordWrap
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
} }
Image {
source: "../guh-logo.svg"
Layout.preferredWidth: app.iconSize * 5
Layout.preferredHeight: width
Layout.alignment: Qt.AlignHCenter
sourceSize.width: app.iconSize * 5
sourceSize.height: app.iconSize * 5
}
Button {
Layout.fillWidth: true
Layout.maximumWidth: 400
Layout.alignment: Qt.AlignHCenter
text: qsTr("Add a thing")
onClicked: pageStack.push(Qt.resolvedUrl("NewDeviceWizard.qml"))
}
} }
} }
} }

View File

@ -10,7 +10,7 @@ ApplicationWindow {
visible: true visible: true
width: 360 width: 360
height: 580 height: 580
visibility: settings.viewMode visibility: ApplicationWindow.Maximized
font: Qt.application.font font: Qt.application.font
title: appName title: appName
@ -26,7 +26,7 @@ ApplicationWindow {
property var settings: Settings { property var settings: Settings {
property string lastConnectedHost: "" property string lastConnectedHost: ""
property int viewMode: ApplicationWindow.Maximized property alias viewMode: app.visibility
property bool returnToHome: false property bool returnToHome: false
property bool darkTheme: false property bool darkTheme: false
property string graphStyle: "bars" property string graphStyle: "bars"

View File

@ -72,20 +72,9 @@ Page {
model: VendorsProxy { model: VendorsProxy {
vendors: Engine.deviceManager.vendors vendors: Engine.deviceManager.vendors
} }
delegate: ItemDelegate { delegate: MeaListItemDelegate {
width: parent.width width: parent.width
height: app.delegateHeight text: model.displayName
contentItem: RowLayout {
Label {
Layout.fillWidth: true
text: model.displayName
}
Image {
source: "images/next.svg"
Layout.preferredHeight: parent.height
Layout.preferredWidth: height
}
}
onClicked: { onClicked: {
d.vendorId = model.id d.vendorId = model.id

View File

@ -2,9 +2,8 @@ import QtQuick 2.4
import QtQuick.Controls 2.1 import QtQuick.Controls 2.1
import QtQuick.Layouts 1.2 import QtQuick.Layouts 1.2
import QtQuick.Controls.Material 2.1 import QtQuick.Controls.Material 2.1
import "components"
import Mea 1.0 import Mea 1.0
import "components"
Page { Page {
id: root id: root
@ -14,30 +13,17 @@ Page {
property QtObject networkManger property QtObject networkManger
header: GuhHeader { header: GuhHeader {
text: qsTr("Wireless network") text: qsTr("%1 box network setup").arg(app.systemName)
onBackPressed: { onBackPressed: {
pageStack.pop() pageStack.pop()
pageStack.pop() pageStack.pop()
} }
HeaderButton {
imageSource: Qt.resolvedUrl("images/refresh.svg")
onClicked: networkManger.manager.loadNetworks()
}
HeaderButton {
imageSource: Qt.resolvedUrl("images/settings.svg")
onClicked: pageStack.push(settingsPage)
}
} }
Component.onCompleted: networkManger.manager.loadNetworks()
Connections { Connections {
target: networkManger.manager target: networkManger.manager
onErrorOccured: { onErrorOccured: {
print("Error occured", errorMessage) print("Error occurred", errorMessage)
var errorDialog = Qt.createComponent(Qt.resolvedUrl("components/ErrorDialog.qml")); var errorDialog = Qt.createComponent(Qt.resolvedUrl("components/ErrorDialog.qml"));
var popup = errorDialog.createObject(app, {text: errorMessage}) var popup = errorDialog.createObject(app, {text: errorMessage})
popup.open() popup.open()
@ -51,14 +37,49 @@ Page {
} }
} }
Timer {
id: loadNetworksTimer
interval: networkManger.manager.accessPoints.count === 0 ? 1000 : 5000
running: networkManger.manager.networkingEnabled && networkManger.manager.wirelessEnabled
repeat: true
onTriggered: {
networkManger.manager.loadNetworks()
}
}
ColumnLayout { ColumnLayout {
anchors.fill: parent anchors.fill: parent
visible: networkManger.manager.initialized visible: networkManger.manager.initialized
Label { MeaListItemDelegate {
wrapMode: Text.WordWrap Layout.fillWidth: true
Layout.alignment: Qt.AlignHCenter iconName: "../images/info.svg"
text:{ text: qsTr("About this %1 box").arg(app.systemName)
onClicked: pageStack.push(infoPage)
}
SwitchDelegate {
Layout.fillWidth: true
text: qsTr("Wired network")
checked: networkManger.manager.networkingEnabled
onClicked: networkManger.manager.enableNetworking(checked)
}
SwitchDelegate {
Layout.fillWidth: true
enabled: networkManger.manager.networkingEnabled
text: qsTr("Wireless network")
checked: networkManger.manager.wirelessEnabled
onClicked: {
networkManger.manager.enableWireless(checked)
}
}
MeaListItemDelegate {
Layout.fillWidth: true
progressive: false
text: qsTr("Networking status")
subText: {
switch (networkManger.manager.networkStatus) { switch (networkManger.manager.networkStatus) {
case WirelessSetupManager.NetworkStatusUnknown: case WirelessSetupManager.NetworkStatusUnknown:
return qsTr("Unknown status."); return qsTr("Unknown status.");
@ -77,137 +98,93 @@ Page {
case WirelessSetupManager.NetworkStatusGlobal: case WirelessSetupManager.NetworkStatusGlobal:
return qsTr("Online."); return qsTr("Online.");
} }
return "???"
} }
} }
BusyIndicator { ThinDivider {
Layout.alignment: Qt.AlignHCenter visible: networkManger.manager.wirelessEnabled
running: networkManger.manager.working
} }
ThinDivider { }
ListView { ListView {
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true Layout.fillHeight: true
visible: networkManger.manager.wirelessEnabled
model: networkManger.manager.accessPoints model: networkManger.manager.accessPoints
clip: true clip: true
delegate: ItemDelegate { BusyIndicator {
width: parent.width anchors.centerIn: parent
height: model.selectedNetwork ? app.delegateHeight * 1.5 : app.delegateHeight running: networkManger.manager.working
}
Rectangle { delegate: MeaListItemDelegate {
anchors.fill: parent width: parent.width
color: guhAccent text: model.ssid
visible: model.selectedNetwork subText: {
if (!model.selectedNetwork) {
return "";
}
switch (networkManger.manager.wirelessStatus) {
case WirelessSetupManager.WirelessStatusUnknown:
return qsTr("Unknown status.");
case WirelessSetupManager.WirelessStatusUnmanaged:
return qsTr("Network unmanaged.");
case WirelessSetupManager.WirelessStatusUnavailable:
return qsTr("Network unavailable.");
case WirelessSetupManager.WirelessStatusDisconnected:
return qsTr("Disconnected.");
case WirelessSetupManager.WirelessStatusPrepare:
return qsTr("Prepare connection...");
case WirelessSetupManager.WirelessStatusConfig:
return qsTr("Configure network...");
case WirelessSetupManager.WirelessStatusNeedAuth:
return qsTr("Authentication needed");
case WirelessSetupManager.WirelessStatusIpConfig:
return qsTr("Configuration IP...");
case WirelessSetupManager.WirelessStatusIpCheck:
return qsTr("Check IP...");
case WirelessSetupManager.WirelessStatusSecondaries:
return qsTr("Secondaries...");
case WirelessSetupManager.WirelessStatusActivated:
return qsTr("Network connected.");
case WirelessSetupManager.WirelessStatusDeactivating:
return qsTr("Network disconnecting...");
case WirelessSetupManager.WirelessStatusFailed:
return qsTr("Network connection failed.");
}
} }
RowLayout { iconColor: model.selectedNetwork ? app.guhAccent : "#808080"
anchors.verticalCenter: parent.verticalCenter iconName: {
anchors.left: parent.left if (model.protected) {
anchors.right: parent.right if (model.signalStrength <= 25)
return Qt.resolvedUrl("images/nm-signal-25-secure.svg")
Item { if (model.signalStrength <= 50)
Layout.preferredHeight: app.delegateHeight return Qt.resolvedUrl("images/nm-signal-50-secure.svg")
Layout.preferredWidth: height
ColorIcon { if (model.signalStrength <= 75)
id: image return Qt.resolvedUrl("images/nm-signal-75-secure.svg")
anchors.fill: parent
anchors.margins: app.margins / 2
name: {
if (model.protected) {
if (model.signalStrength <= 25)
return Qt.resolvedUrl("images/nm-signal-25-secure.svg")
if (model.signalStrength <= 50) if (model.signalStrength <= 100)
return Qt.resolvedUrl("images/nm-signal-50-secure.svg") return Qt.resolvedUrl("images/nm-signal-100-secure.svg")
if (model.signalStrength <= 75) } else {
return Qt.resolvedUrl("images/nm-signal-75-secure.svg")
if (model.signalStrength <= 100) if (model.signalStrength <= 25)
return Qt.resolvedUrl("images/nm-signal-100-secure.svg") return Qt.resolvedUrl("images/nm-signal-25.svg")
} else { if (model.signalStrength <= 50)
return Qt.resolvedUrl("images/nm-signal-50.svg")
if (model.signalStrength <= 25) if (model.signalStrength <= 75)
return Qt.resolvedUrl("images/nm-signal-25.svg") return Qt.resolvedUrl("images/nm-signal-75.svg")
if (model.signalStrength <= 50) if (model.signalStrength <= 100)
return Qt.resolvedUrl("images/nm-signal-50.svg") return Qt.resolvedUrl("images/nm-signal-100.svg")
if (model.signalStrength <= 75)
return Qt.resolvedUrl("images/nm-signal-75.svg")
if (model.signalStrength <= 100)
return Qt.resolvedUrl("images/nm-signal-100.svg")
}
}
}
}
Label {
Layout.alignment: Qt.AlignVCenter
text: model.signalStrength + "%"
}
ColumnLayout {
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
Label {
text: model.ssid
}
Label {
text: model.macAddress
font.pixelSize: app.smallFont
}
Label {
text: {
switch (networkManger.manager.wirelessStatus) {
case WirelessSetupManager.WirelessStatusUnknown:
return qsTr("Unknown status.");
case WirelessSetupManager.WirelessStatusUnmanaged:
return qsTr("Network unmanaged.");
case WirelessSetupManager.WirelessStatusUnavailable:
return qsTr("Network unavailable.");
case WirelessSetupManager.WirelessStatusDisconnected:
return qsTr("Disconnected.");
case WirelessSetupManager.WirelessStatusPrepare:
return qsTr("Prepare connection...");
case WirelessSetupManager.WirelessStatusConfig:
return qsTr("Configure network...");
case WirelessSetupManager.WirelessStatusNeedAuth:
return qsTr("Authentication needed");
case WirelessSetupManager.WirelessStatusIpConfig:
return qsTr("Configuration IP...");
case WirelessSetupManager.WirelessStatusIpCheck:
return qsTr("Check IP...");
case WirelessSetupManager.WirelessStatusSecondaries:
return qsTr("Secondaries...");
case WirelessSetupManager.WirelessStatusActivated:
return qsTr("Network connected.");
case WirelessSetupManager.WirelessStatusDeactivating:
return qsTr("Network disconnecting...");
case WirelessSetupManager.WirelessStatusFailed:
return qsTr("Network connection failed.");
}
}
font.pixelSize: app.smallFont
visible: model.selectedNetwork
}
}
Button {
text: qsTr("Disconnect")
visible: model.selectedNetwork && networkManger.manager.wirelessStatus === WirelessSetupManager.WirelessStatusActivated
onClicked: networkManger.manager.disconnectWirelessNetwork()
} }
} }
@ -234,40 +211,49 @@ Page {
} }
ColumnLayout { ColumnLayout {
anchors.fill: parent anchors { left: parent.left; top: parent.top; right: parent.right }
anchors.margins: app.margins
Label { Label {
wrapMode: Text.WordWrap wrapMode: Text.WordWrap
font.pixelSize: app.largeFont
Layout.fillWidth: true Layout.fillWidth: true
text: ssid + " (" + macAddress + ")" Layout.leftMargin: app.margins
Layout.rightMargin: app.margins
Layout.topMargin: app.margins
text: qsTr("Please enter the password for the Wifi network.")
} }
Label { MeaListItemDelegate {
wrapMode: Text.WordWrap
Layout.fillWidth: true Layout.fillWidth: true
text: qsTr("Please enter the password for the Wifi network.") text: ssid
subText: macAddress
progressive: false
} }
RowLayout { RowLayout {
Layout.fillWidth: true Layout.fillWidth: true
Layout.leftMargin: app.margins
Layout.rightMargin: app.margins
spacing: app.margins
TextField { TextField {
id: passwordTextField id: passwordTextField
Layout.fillWidth: true Layout.fillWidth: true
echoMode: TextInput.Password echoMode: TextInput.Password
} }
ColorIcon {
Button { Layout.preferredHeight: app.iconSize
text: qsTr("Show password") Layout.preferredWidth: app.iconSize
onClicked: { name: "../images/eye.svg"
if (passwordTextField.echoMode === TextInput.Normal) { color: passwordTextField.echoMode === TextInput.Normal ? app.guhAccent : keyColor
text = qsTr("Show password") MouseArea {
passwordTextField.echoMode = TextInput.Password anchors.fill: parent
} else { anchors.margins: -app.margins / 2
text = qsTr("Hide password") onClicked: {
passwordTextField.echoMode = TextInput.Normal if (passwordTextField.echoMode === TextInput.Normal) {
passwordTextField.echoMode = TextInput.Password
} else {
passwordTextField.echoMode = TextInput.Normal
}
} }
} }
} }
@ -275,6 +261,8 @@ Page {
Button { Button {
Layout.fillWidth: true Layout.fillWidth: true
Layout.leftMargin: app.margins
Layout.rightMargin: app.margins
text: qsTr("Connect") text: qsTr("Connect")
onPressed: { onPressed: {
networkManger.manager.connectWirelessNetwork(ssid, passwordTextField.text) networkManger.manager.connectWirelessNetwork(ssid, passwordTextField.text)
@ -282,130 +270,52 @@ Page {
pageStack.pop() pageStack.pop()
} }
} }
} }
} }
} }
Component { Component {
id: settingsPage id: infoPage
Page { Page {
id: root id: root
header: GuhHeader { header: GuhHeader {
text: qsTr("Network settings") text: qsTr("Box information")
onBackPressed: pageStack.pop() onBackPressed: pageStack.pop()
} }
ColumnLayout { ColumnLayout {
anchors.fill: parent anchors { left: parent.left; top: parent.top; right: parent.right }
anchors.margins: app.margins
RowLayout { MeaListItemDelegate {
anchors.margins: app.margins
Layout.fillWidth: true Layout.fillWidth: true
progressive: false
Label { text: qsTr("System UUID")
Layout.fillWidth: true subText: networkManger.manager.modelNumber
text: qsTr("Networking")
}
Switch {
id: networkingSwitch
checked: networkManger.manager.networkingEnabled
onCheckedChanged: networkManger.manager.enableNetworking(checked)
}
} }
MeaListItemDelegate {
RowLayout {
anchors.margins: app.margins
Layout.fillWidth: true Layout.fillWidth: true
progressive: false
Label { text: qsTr("Manufacturer")
Layout.fillWidth: true subText: networkManger.manager.manufacturer
text: qsTr("Wireless networking")
}
Switch {
id: wirelessNetworkingSwitch
checked: networkManger.manager.wirelessEnabled
onCheckedChanged: networkManger.manager.enableWireless(checked)
}
} }
MeaListItemDelegate {
ThinDivider { }
Label {
Layout.fillWidth: true Layout.fillWidth: true
text: qsTr("Bluetooth device information") progressive: false
text: qsTr("Software revision")
subText: networkManger.manager.softwareRevision
} }
MeaListItemDelegate {
ThinDivider { }
RowLayout {
anchors.margins: app.margins
Layout.fillWidth: true Layout.fillWidth: true
progressive: false
Label { text: qsTr("Firmware revision")
Layout.fillWidth: true subText: networkManger.manager.firmwareRevision
text: qsTr("System UUID")
}
Label {
text: networkManger.manager.modelNumber
}
} }
MeaListItemDelegate {
RowLayout {
Layout.fillWidth: true Layout.fillWidth: true
progressive: false
Label { text: qsTr("Hardware revision")
Layout.fillWidth: true subText: networkManger.manager.hardwareRevision
text: qsTr("Manufacturer")
}
Label {
text: networkManger.manager.manufacturer
}
}
RowLayout {
anchors.margins: app.margins
Layout.fillWidth: true
Label {
Layout.fillWidth: true
text: qsTr("Software revision")
}
Label {
text: networkManger.manager.softwareRevision
}
}
RowLayout {
anchors.margins: app.margins
Layout.fillWidth: true
Label {
Layout.fillWidth: true
text: qsTr("Firmware revision")
}
Label {
text: networkManger.manager.firmwareRevision
}
}
RowLayout {
anchors.margins: app.margins
Layout.fillWidth: true
Label {
Layout.fillWidth: true
text: qsTr("Hardware revision")
}
Label {
text: networkManger.manager.hardwareRevision
}
} }
} }
} }

View File

@ -48,7 +48,7 @@ SwipeDelegate {
} }
ColorIcon { ColorIcon {
Layout.preferredHeight: app.iconSize Layout.preferredHeight: app.iconSize * .6
Layout.preferredWidth: height Layout.preferredWidth: height
name: "../images/next.svg" name: "../images/next.svg"
visible: root.progressive visible: root.progressive

191
mea/ui/images/eye.svg Normal file
View File

@ -0,0 +1,191 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<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="96"
height="96"
id="svg4874"
version="1.1"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
viewBox="0 0 96 96.000001"
sodipodi:docname="eye.svg">
<defs
id="defs4876" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="8.7812488"
inkscape:cx="-10.68755"
inkscape:cy="46.064049"
inkscape:document-units="px"
inkscape:current-layer="g4780"
showgrid="true"
showborder="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-bbox-midpoints="true"
inkscape:object-paths="true"
inkscape:snap-intersection-paths="true"
inkscape:object-nodes="true"
inkscape:snap-smooth-nodes="true"
inkscape:snap-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
showguides="true"
inkscape:guide-bbox="true"
inkscape:snap-global="true"
inkscape:window-width="2880"
inkscape:window-height="1698"
inkscape:window-x="0"
inkscape:window-y="44"
inkscape:window-maximized="1">
<inkscape:grid
type="xygrid"
id="grid5451"
empspacing="8" />
<sodipodi:guide
orientation="1,0"
position="8,-8.0000001"
id="guide4063"
inkscape:locked="false" />
<sodipodi:guide
orientation="1,0"
position="4,-8.0000001"
id="guide4065"
inkscape:locked="false" />
<sodipodi:guide
orientation="0,1"
position="-8,88.000001"
id="guide4067"
inkscape:locked="false" />
<sodipodi:guide
orientation="0,1"
position="-8,92.000001"
id="guide4069"
inkscape:locked="false" />
<sodipodi:guide
orientation="0,1"
position="104,4"
id="guide4071"
inkscape:locked="false" />
<sodipodi:guide
orientation="0,1"
position="-5,8.0000001"
id="guide4073"
inkscape:locked="false" />
<sodipodi:guide
orientation="1,0"
position="88,-8.0000001"
id="guide4077"
inkscape:locked="false" />
<sodipodi:guide
orientation="0,1"
position="-8,84.000001"
id="guide4074"
inkscape:locked="false" />
<sodipodi:guide
orientation="1,0"
position="12,-8.0000001"
id="guide4076"
inkscape:locked="false" />
<sodipodi:guide
orientation="1,0"
position="84,-8.0000001"
id="guide4080"
inkscape:locked="false" />
<sodipodi:guide
position="48,-8.0000001"
orientation="1,0"
id="guide4170"
inkscape:locked="false" />
<sodipodi:guide
position="-8,48"
orientation="0,1"
id="guide4172"
inkscape:locked="false" />
<sodipodi:guide
position="92,-8.0000001"
orientation="1,0"
id="guide4760"
inkscape:locked="false" />
</sodipodi:namedview>
<metadata
id="metadata4879">
<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(67.857146,-78.50504)">
<g
transform="matrix(0,-1,-1,0,373.50506,516.50504)"
id="g4845"
style="display:inline">
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="next01.png"
transform="matrix(-0.9996045,0,0,1,575.94296,-611.00001)"
id="g4778"
inkscape:label="Layer 1">
<g
transform="matrix(-1,0,0,1,575.99999,611)"
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)" />
<g
id="g862"
transform="matrix(1.8130651,0,0,1.8130651,-260.30984,-370.59492)">
<path
sodipodi:nodetypes="zczcz"
inkscape:connector-curvature="0"
id="path5662"
d="m 369.35571,421.36222 c 0,11.82549 -10.68499,17.73822 -10.68499,17.73822 0,0 -10.68506,-5.91273 -10.68506,-17.73822 0,-11.82547 10.68506,-17.73822 10.68506,-17.73822 0,0 10.68499,5.91275 10.68499,17.73822 z"
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:4.00079107;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<ellipse
ry="6.5025721"
rx="6.5"
transform="matrix(0,-1,-1,0,0,0)"
cy="-358.67068"
cx="-421.36221"
id="path4242"
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.00079155;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

@ -0,0 +1,222 @@
<?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"
id="connect-box"
viewBox="0 0 112.6 111.4"
version="1.1"
sodipodi:docname="nymea-box-setup.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata77">
<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>Asset 31</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs75" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2880"
inkscape:window-height="1698"
id="namedview73"
showgrid="false"
inkscape:zoom="47.935999"
inkscape:cx="85.797004"
inkscape:cy="58.750007"
inkscape:window-x="0"
inkscape:window-y="44"
inkscape:window-maximized="1"
inkscape:current-layer="connect-box" />
<title
id="title2">Asset 31</title>
<path
d="m 89.5,104.7 0.9,-0.5 0.5,-0.4 a 17.7,17.7 0 0 0 2.6,-3.5"
style="fill:none;stroke:#ffffff;stroke-linecap:round;stroke-linejoin:round"
id="path4"
inkscape:connector-curvature="0" />
<path
d="M 8.4,70.3 C 2.8,60.4 -1.1,48.4 0.3,36.7 1,31.2 4.6,21.5 7.8,16.9 l 0.6,9.2 -4.2,18.3 11.9,25.9 20.6,22.6 23.1,10.5 22.9,1.9 21.2,-9.3 -7.5,7.2 c -9.2,8.1 -21.7,9.3 -32.9,7.4 C 52.3,108.7 41,103.1 31.7,96.3 A 87.8,87.8 0 0 1 8.4,70.3 Z"
style="fill:#e6e6e6;fill-opacity:1"
id="path6"
inkscape:connector-curvature="0" />
<path
d="m 28,80.1 4.6,-11.9 58.1,18.5 3.2,18 c 0,0 -4.5,7.7 -28.1,3.7 -23.6,-4 -40.2,-23.1 -39.9,-22.8 z"
style="fill:#fafafa;fill-opacity:1"
id="path8"
inkscape:connector-curvature="0" />
<path
d="M 3,30.7 A 30.9,30.9 0 0 1 8.4,16.1 33.9,33.9 0 0 1 20.9,5.1 l 2.1,-1 c 12.8,-5.8 27.1,-5 39.8,-0.4 l 5.3,2.1 a 81,81 0 0 1 35.6,31.7 l 3,5.6 c 6.3,11 7.6,28.5 3.4,41.7 l -0.7,2.1 a 42.3,42.3 0 0 1 -17.5,19.6 50.2,50.2 0 0 0 5,-6.2 c 2.4,-4.3 3.2,-8.6 4.2,-13.4 a 30.9,30.9 0 0 0 0.2,-9.1 23,23 0 0 0 7,-19.5 C 107.7,51.1 104.7,43.9 101,37.8 A 73.1,73.1 0 0 0 68.4,9.4 C 61.8,6.6 54.3,4.7 47,5.3 39.7,5.9 32.6,8.8 28.5,15.4 24.4,22 24.3,29.7 25.9,36.7 c 1.6,7 5.2,13.3 9.6,19.4 A 66.1,66.1 0 0 1 34,65 C 32.6,70 28.9,81.4 25.9,85.6 13,72.9 0.8,50.5 3,30.7"
style="fill:#f0f0f0;fill-opacity:1"
id="path10"
inkscape:connector-curvature="0" />
<path
d="M 28.4,15.4 C 32.6,8.8 39.6,5.8 46.9,5.3 54.2,4.8 61.8,6.6 68.4,9.4 a 73.3,73.3 0 0 1 32.7,28.4 c 3.7,6.1 6.6,13.3 7.2,20.5 0.6,7.2 -1.4,14.2 -7.1,19.5 h -0.7 l -64,-21.4 -1,-0.3 C 31.1,50 27.6,44 25.9,36.6 24.2,29.2 24.4,21.9 28.4,15.4 Z"
style="fill:#fafafa;fill-opacity:1"
id="path12"
inkscape:connector-curvature="0" />
<path
d="M 91.1,87.3 101.2,77.8 35.5,56.2 c 0,0 -0.1,0.5 -0.2,1.6 a 45.3,45.3 0 0 1 -1.6,7.9 l -0.9,3.1 z"
style="fill:#dcdcdc;fill-opacity:1"
id="path14"
inkscape:connector-curvature="0" />
<path
d="m 101.3,87.4 a 41.9,41.9 0 0 1 -4.7,13.4 20.2,20.2 0 0 1 -2.7,3.8 l -2,1.9 -1.4,-19.4 10.7,-9.2 0.2,1.3 a 20.6,20.6 0 0 1 -0.1,8.2 z"
style="fill:#e6e6e6;fill-opacity:1"
id="path16"
inkscape:connector-curvature="0" />
<path
d="m 57.1,30.1 c 3.3,-2.1 7.7,-1.4 11,-0.2 6.5,2.5 13,8.7 14.7,15.6 C 85.2,55 77.8,59 69.3,56.1 62.6,53.7 55.8,47.3 54,40.2 53.1,36.6 53.5,32.3 57.1,30.1 Z"
style="fill:#dcdcdc;fill-opacity:1"
id="path18"
inkscape:connector-curvature="0" />
<ellipse
cx="13.59177"
cy="79.449982"
rx="9.8000002"
ry="15.7"
transform="rotate(-47.3)"
style="fill:#ebebeb;fill-opacity:1"
id="ellipse20" />
<path
d="m 36.8,49.1 c -0.1,2.4 2.1,4.6 4,5.5 a 4.3,4.3 0 0 0 3.5,0.4 2.7,2.7 0 0 0 2,-2.6 c 0,-2.4 -2.1,-4.6 -4,-5.5 a 4.7,4.7 0 0 0 -3.5,-0.4 2.8,2.8 0 0 0 -2,2.6 z"
style="fill:#c8c8c8;fill-opacity:1"
id="path22"
inkscape:connector-curvature="0" />
<path
d="m 47.7,52.8 a 2.6,2.6 0 0 0 1.5,2.1 c 0.9,0.4 2,0.3 2,-0.8 A 2.4,2.4 0 0 0 49.7,52 c -0.9,-0.4 -2,-0.3 -2,0.8 z"
style="fill:#b4b4b4;fill-opacity:1"
id="path24"
inkscape:connector-curvature="0" />
<path
d="m 38.6,50.6 a 3.6,3.6 0 0 0 2.2,3 c 1.3,0.6 3,0.4 3,-1.2 a 3.8,3.8 0 0 0 -2.2,-3 c -1.3,-0.6 -3,-0.4 -3,1.2 z"
style="fill:#1d1d1b"
id="path26"
inkscape:connector-curvature="0" />
<path
d="m 47.3,70 a 1,1 0 0 1 0.5,-0.4 l 0.6,-0.2 a 2.2,2.2 0 0 1 1.4,0.1 l 0.6,0.3 0.3,0.4 a 0.9,0.9 0 0 1 0.1,0.5 0.8,0.8 0 0 1 -0.2,0.4 l -0.5,0.4 -0.6,0.2 A 2.2,2.2 0 0 1 48.1,71.6 C 47.9,71.5 47.7,71.5 47.5,71.3 47.3,71.1 47.2,71.1 47.2,70.9 A 0.7,0.7 0 0 1 47.1,70.4 0.8,0.8 0 0 1 47.3,70 Z"
style="fill:#333233"
id="path28"
inkscape:connector-curvature="0" />
<path
d="m 47.4,69.9 a 0.5,0.5 0 0 1 0.4,-0.3 l 0.6,-0.2 a 2,2 0 0 1 1.3,0.1 l 0.4,0.2 0.4,0.4 v 0.3 a 0.5,0.5 0 0 1 -0.2,0.4 l -0.4,0.3 -0.6,0.2 A 2.5,2.5 0 0 1 48.1,71.2 L 47.6,71 47.3,70.6 a 0.4,0.4 0 0 1 -0.1,-0.3 0.5,0.5 0 0 1 0.2,-0.4 z"
style="fill:#c5114a"
id="path30"
inkscape:connector-curvature="0" />
<path
d="m 70,76.7 a 0.8,0.8 0 0 0 0.9,-0.1 l 3.2,-3.2 c 0.2,-0.2 0,-0.4 -0.3,-0.5 L 59.9,68.3 A 0.8,0.8 0 0 0 59,68.5 l -3.1,3.3 c -0.3,0.2 0,0.4 0.2,0.5 z"
style="fill:#c8c8c8;fill-opacity:1"
id="path32"
inkscape:connector-curvature="0" />
<path
d="m 69.6,75.4 a 0.6,0.6 0 0 0 0.7,-0.1 l 2.5,-2.4 c 0.1,-0.2 0,-0.3 -0.2,-0.4 L 59.8,68.2 a 0.6,0.6 0 0 0 -0.7,0.1 l -2.3,2.5 c -0.2,0.2 0,0.4 0.2,0.4 z"
style="fill:#050505;fill-opacity:1"
id="path34"
inkscape:connector-curvature="0" />
<path
d="m 89.1,83 a 2.1,2.1 0 0 1 -2.3,0.4 L 79.7,81.2 C 79,80.9 78.5,80.4 79.2,79.8 L 80,79.1 a 2.4,2.4 0 0 1 2.3,-0.4 l 6.5,2.1 0.7,0.2 c 0.7,0.2 1.1,0.7 0.5,1.3 z"
style="fill:#c8c8c8;fill-opacity:1"
id="path36"
inkscape:connector-curvature="0" />
<path
d="m 88.6,82.5 a 2.2,2.2 0 0 1 -1.8,0.3 L 79.9,80.5 C 79.4,80.4 79,80 79.5,79.5 L 80.1,79 A 2,2 0 0 1 82,78.6 l 6,1.9 0.9,0.3 c 0.6,0.2 1.2,0.4 0.3,1.1 z"
style="fill:#040506"
id="path38"
inkscape:connector-curvature="0" />
<path
d="M 45.1,40.8 A 19.9,19.9 0 0 1 44.5,29.7 l 1.2,-5.2 a 20.7,20.7 0 0 0 -0.5,11.3 l 1.2,0.8 2.3,0.7 -1.2,2.1 -1,1.2 z"
style="fill:#b4b4b4;fill-opacity:1"
id="path40"
inkscape:connector-curvature="0" />
<path
d="m 45.2,35.8 a 20.7,20.7 0 0 1 0.5,-11.3 l 0.2,-0.3 0.8,-0.4 v 0 a 1.3,1.3 0 0 1 1.2,-0.1 v 0 l 3.1,1.4 v 0 a 1.2,1.2 0 0 1 0.8,1.2 0.4,0.4 0 0 1 -0.1,0.3 v 0 a 14.6,14.6 0 0 0 0,9 C 51.6,35.3 51.1,35.2 51.1,35.2 L 48,34.4 a 2.2,2.2 0 0 0 -1.6,0.3 7.4,7.4 0 0 0 -1.2,1.1 z"
style="fill:#c8c8c8;fill-opacity:1"
id="path42"
inkscape:connector-curvature="0" />
<path
d="m 45.2,35.8 a 1.8,1.8 0 0 0 1.3,1.1 l 1.5,0.4 c 0.3,0.1 0.5,0.3 0.2,0.6 l -1.4,1.9 -0.5,0.4 -1.2,0.6 3,0.9 h 0.7 l 0.6,-0.2 0.3,-0.5 v -0.4 c 0,-0.1 -0.1,-0.2 -0.1,-0.3 0,-0.1 1.2,-2.2 1.9,-3.4 h 0.1 a 1.9,1.9 0 0 0 0.2,-0.7 0.6,0.6 0 0 0 -0.1,-0.4 c -0.1,-0.3 -0.6,-0.4 -0.6,-0.4 l -3.1,-1 a 2.2,2.2 0 0 0 -1.6,0.3 c -0.2,0.2 -1.1,0.8 -1.2,1.1 z"
style="fill:#c8c8c8;fill-opacity:1"
id="path44"
inkscape:connector-curvature="0" />
<path
d="m 91.5,57.3 a 10,10 0 0 0 0.4,-2.4 l -1.2,-0.2 -0.6,1.2 z"
style="fill:#b4b4b4;fill-opacity:1"
id="path46"
inkscape:connector-curvature="0" />
<path
d="m 90.8,40.8 -3.1,2.6 h -0.6 l -0.5,0.2 a 0.8,0.8 0 0 0 -0.2,0.5 v 0.3 a 0.4,0.4 0 0 0 0.1,0.3 16.5,16.5 0 0 1 0.8,9.1 0.6,0.6 0 0 0 0,0.6 1.1,1.1 0 0 0 0.3,0.7 l 0.5,0.6 0.4,0.3 h 0.3 l 2.7,1.2 A 1.8,1.8 0 0 1 91,56 0.5,0.5 0 0 1 91.2,55.6 l 1.3,-1.4 a 1.1,1.1 0 0 1 1,-0.1 l 1.2,0.6 c 0.4,0.1 0.6,0.2 0.9,-0.1 v 0 L 96,54.2 h 0.1 c 0.1,0 0.1,-0.1 0.2,-0.2 0.1,-0.1 0.3,-0.6 0.1,-0.9 C 96.2,52.8 93.5,52 93.5,52 L 92,51 92.7,45.7 Z"
style="fill:#c8c8c8;fill-opacity:1"
id="path48"
inkscape:connector-curvature="0" />
<path
d="M 96.7,52.7 A 20.9,20.9 0 0 0 95.6,42.2 h -0.1 a 0.9,0.9 0 0 0 -0.6,-0.6 h -0.2 l -2.7,-1 v 0 a 0.9,0.9 0 0 0 -1.1,0.2 c -0.3,0.2 -0.2,0.5 -0.2,0.8 a 15.7,15.7 0 0 1 0.9,9.1 c -0.1,0.6 0.6,1.4 1.1,1.6 l 2.8,1.3 c 0.4,0 1,0 1.1,-0.5 z"
style="fill:#d2d2d2;fill-opacity:1"
id="path50"
inkscape:connector-curvature="0" />
<path
d="m 38.5,50.6 a 3.8,3.8 0 0 0 2.3,3 c 1.3,0.6 3.1,0.4 3.1,-1.3 A 4,4 0 0 0 41.6,49.4 C 40.2,48.8 38.5,49 38.5,50.6 Z"
style="fill:none;stroke:#d2d2d2;stroke-miterlimit:10;stroke-opacity:1"
id="path52"
inkscape:connector-curvature="0" />
<path
d="m 43,53.1 a 2.6,2.6 0 0 1 -3.1,-0.2 c -1.2,-0.8 -1.6,-2 -1,-3 a 1.5,1.5 0 0 1 1.4,-0.8 l 3.4,3.1 c 0,0 0,0.4 -0.7,0.9 z"
style="fill:#57baae;fill-opacity:1"
id="path54"
inkscape:connector-curvature="0" />
<ellipse
cx="-18.521399"
cy="63.1968"
rx="1.5978385"
ry="2.5964875"
transform="rotate(-55.195988)"
style="fill:#57baae;stroke-width:0.99864906;fill-opacity:1"
id="ellipse56" />
<path
d="m 43.8,47.9 c 0.2,0.2 0.4,0.3 0.5,0.5 l 2.2,-2.4 -0.8,-0.6 -2.1,2.3 z"
style="fill:#57baae;fill-opacity:1"
id="path58"
inkscape:connector-curvature="0" />
<path
d="m 38.6,54.4 -0.6,-0.5 -3.5,3.9 0.8,0.6 3.5,-3.9 z"
style="fill:#57baae;fill-opacity:1"
id="path60"
inkscape:connector-curvature="0" />
<path
d="m 46,51.3 3,-0.2 v -1 l -3.2,0.2 z"
style="fill:#57baae;fill-opacity:1"
id="path62"
inkscape:connector-curvature="0" />
<path
d="M 36.4,50.7 31.7,51 v 1 l 4.9,-0.3 a 1.7,1.7 0 0 1 -0.2,-1 z"
style="fill:#57baae;fill-opacity:1"
id="path64"
inkscape:connector-curvature="0" />
<path
d="m 37.8,47.2 -2.8,-2.6 -0.7,0.8 2.8,2.4 z"
style="fill:#57baae;fill-opacity:1"
id="path66"
inkscape:connector-curvature="0" />
<path
d="m 45.6,54.2 -0.2,0.3 -0.5,0.4 3.2,2.9 0.7,-0.8 z"
style="fill:#57baae;fill-opacity:1"
id="path68"
inkscape:connector-curvature="0" />
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -0,0 +1,168 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<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="96"
height="96"
id="svg4874"
version="1.1"
inkscape:version="0.91+devel r"
viewBox="0 0 96 96.000001"
sodipodi:docname="private-browsing.svg">
<defs
id="defs4876" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.0249991"
inkscape:cx="44.270464"
inkscape:cy="35.701054"
inkscape:document-units="px"
inkscape:current-layer="g4780"
showgrid="true"
showborder="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-bbox-midpoints="true"
inkscape:object-paths="true"
inkscape:snap-intersection-paths="true"
inkscape:object-nodes="true"
inkscape:snap-smooth-nodes="true"
inkscape:snap-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
showguides="true"
inkscape:guide-bbox="true"
inkscape:snap-global="true">
<inkscape:grid
type="xygrid"
id="grid5451"
empspacing="8" />
<sodipodi:guide
orientation="1,0"
position="8,-8.0000001"
id="guide4063" />
<sodipodi:guide
orientation="1,0"
position="4,-8.0000001"
id="guide4065" />
<sodipodi:guide
orientation="0,1"
position="-8,88.000001"
id="guide4067" />
<sodipodi:guide
orientation="0,1"
position="-8,92.000001"
id="guide4069" />
<sodipodi:guide
orientation="0,1"
position="104,4"
id="guide4071" />
<sodipodi:guide
orientation="0,1"
position="-5,8.0000001"
id="guide4073" />
<sodipodi:guide
orientation="1,0"
position="88,-8.0000001"
id="guide4077" />
<sodipodi:guide
orientation="0,1"
position="-8,84.000001"
id="guide4074" />
<sodipodi:guide
orientation="1,0"
position="12,-8.0000001"
id="guide4076" />
<sodipodi:guide
orientation="1,0"
position="84,-8.0000001"
id="guide4080" />
<sodipodi:guide
position="48,-8.0000001"
orientation="1,0"
id="guide4170" />
<sodipodi:guide
position="-8,48"
orientation="0,1"
id="guide4172" />
<sodipodi:guide
position="92,-8.0000001"
orientation="1,0"
id="guide4760" />
</sodipodi:namedview>
<metadata
id="metadata4879">
<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(67.857146,-78.50504)">
<g
transform="matrix(0,-1,-1,0,373.50506,516.50504)"
id="g4845"
style="display:inline">
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="next01.png"
transform="matrix(-0.9996045,0,0,1,575.94296,-611.00001)"
id="g4778"
inkscape:label="Layer 1">
<g
transform="matrix(-1,0,0,1,575.99999,611)"
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="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.46281052px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#808080;fill-opacity:1;stroke:none;stroke-width:0.99999994"
d="M 48 20.300781 C 38.61157 20.300781 29.819444 21.544274 21.621094 24.03125 C 13.488864 26.571345 6.28099 29.969999 0 34.097656 L 0 35.232422 L 0 39.271484 L 0 62.966797 L 0 66.166016 C 2.93113 68.718876 6.2948038 70.82159 10.089844 72.392578 C 13.915734 73.93071 18.019131 74.699219 22.400391 74.699219 C 26.781661 74.699219 30.869023 73.93071 34.664062 72.392578 C 38.489962 70.82159 41.869661 68.718876 44.800781 66.166016 C 45.219521 65.817963 45.700038 65.536561 46.242188 65.322266 C 46.788738 65.112449 47.37411 65.007812 48 65.007812 C 48.6259 65.007812 49.209803 65.112279 49.751953 65.322266 C 50.298513 65.536561 50.780489 65.817963 51.199219 66.166016 C 54.130359 68.718876 57.494023 70.82159 61.289062 72.392578 C 65.114953 73.93071 69.218349 74.699219 73.599609 74.699219 C 77.980879 74.699219 82.070194 73.93071 85.865234 72.392578 C 89.691134 70.82159 93.06887 68.718876 96 66.166016 L 96 62.966797 L 96 39.271484 L 96 35.232422 L 96 34.097656 C 89.71902 29.969999 82.4796 26.571345 74.28125 24.03125 C 66.14901 21.544274 57.38843 20.300781 48 20.300781 z M 48 24.298828 C 57.02961 24.298828 65.378823 25.493166 73.095703 27.851562 C 80.229583 30.061848 86.449297 33.012269 91.998047 36.439453 L 91.998047 39.269531 L 91.998047 62.964844 L 91.998047 64.160156 C 89.713992 65.94464 87.218872 67.510852 84.349609 68.689453 L 84.345703 68.691406 C 81.051703 70.023849 77.507023 70.701172 73.601562 70.701172 C 69.696742 70.701172 66.133404 70.021738 62.802734 68.685547 C 59.409344 67.278264 56.432808 65.417224 53.830078 63.150391 L 53.794922 63.121094 L 53.759766 63.089844 C 52.994136 62.453446 52.124454 61.956258 51.214844 61.599609 L 51.207031 61.597656 L 51.199219 61.59375 C 50.171819 61.195817 49.073763 61.009766 48.001953 61.009766 C 46.929423 61.009766 45.832334 61.196839 44.808594 61.589844 L 44.789062 61.597656 L 44.771484 61.603516 C 43.867754 61.960734 43.003398 62.457134 42.242188 63.089844 L 42.207031 63.121094 L 42.169922 63.150391 C 39.568072 65.416474 36.578528 67.280481 33.148438 68.689453 L 33.142578 68.691406 C 29.848578 70.023839 26.303898 70.701172 22.398438 70.701172 C 18.492068 70.701172 14.929466 70.020845 11.597656 68.683594 C 8.7613262 67.507089 6.27868 65.947007 4 64.164062 L 4 62.964844 L 4 39.269531 L 4 36.435547 C 9.542 33.009802 15.729632 30.063875 22.794922 27.855469 C 30.583732 25.494273 38.97036 24.298828 48 24.298828 z "
transform="matrix(0,-1,-1.0003957,0,438.00245,441.36222)"
id="path4186" />
<path
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.46281052px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#808080;fill-opacity:1;stroke:none;stroke-width:1.00019777"
d="m 395.18763,415.76224 c 0,-3.12948 -0.5255,-6.04968 -1.57978,-8.76043 -1.07648,-2.73278 -2.48958,-5.14591 -4.23918,-7.23957 -1.74949,2.09366 -3.16259,4.50679 -4.23918,7.23957 -1.05418,2.71075 -1.58188,5.63095 -1.58188,8.76043 0,3.12947 0.5277,6.06096 1.58188,8.79375 1.07659,2.71074 2.48969,5.11259 4.23918,7.20625 1.7496,-2.09366 3.1627,-4.49551 4.23918,-7.20625 1.05428,-2.73279 1.57978,-5.66428 1.57978,-8.79375 z"
id="path4184" />
<path
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.46281052px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#808080;fill-opacity:1;stroke:none;stroke-width:1.00019777"
d="m 395.18763,370.96223 c 0,-3.12948 -0.5255,-6.04967 -1.57978,-8.76042 -1.07648,-2.73278 -2.48958,-5.14591 -4.23918,-7.23958 -1.74949,2.09367 -3.16259,4.5068 -4.23918,7.23958 -1.05418,2.71075 -1.58188,5.63094 -1.58188,8.76042 0,3.12948 0.5277,6.06097 1.58188,8.79376 1.07659,2.71074 2.48969,5.11258 4.23918,7.20625 1.7496,-2.09367 3.1627,-4.49551 4.23918,-7.20625 1.05428,-2.73279 1.57978,-5.66428 1.57978,-8.79376 z"
id="path4120" />
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.8 KiB

576
mea/ui/images/rpi-setup.svg Normal file
View File

@ -0,0 +1,576 @@
<?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"
id="svg4367"
viewBox="0 0 899.99998 540.00001"
version="1.1"
sodipodi:docname="rpi-setup.svg"
width="900"
height="540"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<defs
id="defs95" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2880"
inkscape:window-height="1698"
id="namedview93"
showgrid="true"
inkscape:zoom="1.8591095"
inkscape:cx="432.56289"
inkscape:cy="277.15708"
inkscape:window-x="0"
inkscape:window-y="44"
inkscape:window-maximized="1"
inkscape:current-layer="svg4367">
<inkscape:grid
type="xygrid"
id="grid1120" />
</sodipodi:namedview>
<g
id="layer1"
transform="translate(127.906,-194.67999)">
<g
id="g5001"
style="stroke:#000000;stroke-linejoin:round">
<path
id="path4034"
d="m 20.163,437.68 v -8 l 490,268 v 8 z"
inkscape:connector-curvature="0"
style="fill:#ffffff;stroke-width:2" />
<path
id="path4036"
d="m 510.16,705.68 220,-243 v -8 l -220,243 z"
inkscape:connector-curvature="0"
style="fill:#ffffff;stroke-width:2" />
<path
id="path4032"
d="m 20.163,429.68 239,-199 471,224 -220,243 z"
inkscape:connector-curvature="0"
style="fill:#009300;stroke-width:1.5" />
</g>
</g>
<g
id="g3876"
transform="translate(884.066,-4.99999)"
style="stroke:#000000;stroke-linejoin:round">
<path
id="path3828"
d="m -541.57,327.17 84.109,46.846 50.75,-48.975 -81.876,-43.817 z"
inkscape:connector-curvature="0"
style="fill:#ffffff;stroke-width:1.5" />
<path
id="path3830"
d="m -457.46,374.01 v 18.335 h -14.627 l -55.629,-30.425 -14.133,-15.73 0.27901,-19.025 z"
inkscape:connector-curvature="0"
style="fill:#ffffff;stroke-width:2" />
<path
id="path3832"
d="m -457.46,392.35 50.671,-45.717 0.0781,-21.593 -50.75,48.975 z"
inkscape:connector-curvature="0"
style="fill:#ffffff;stroke-width:2" />
<path
id="path3834"
d="m -534.52,337.09 69.763,39.148 -0.31695,11.94 -5.4548,0.35589 -53.452,-29.361 -10.791,-12.045 z"
inkscape:connector-curvature="0"
style="stroke-width:1px" />
</g>
<g
id="g3882"
transform="translate(884.066,-4.99999)"
style="fill:#ffffff;stroke:#000000;stroke-linejoin:bevel">
<path
id="path3862"
d="m -454.46,246.5 67.003,35.383 v 9.536 l -67.254,-36.638 z"
inkscape:connector-curvature="0"
style="stroke-width:1.5" />
<path
id="path3864"
d="m -454.46,246.5 50.189,-46.425 65.246,34.129 -48.433,47.68 z"
inkscape:connector-curvature="0" />
<path
id="path3866"
d="m -387.46,291.42 48.362,-47.478 0.0705,-9.7378 -48.433,47.68 z"
inkscape:connector-curvature="0"
style="stroke-width:1.5" />
</g>
<g
id="g4024"
transform="translate(884.066,-4.99999)"
style="fill:#ffffff;stroke:#000000">
<path
id="path3905"
d="m -617.87,213.78 v 37.733 c -2.0806,10.749 -12.014,13.139 -22.003,13.308 -8.7698,0.14851 -21.733,-2.5784 -21.904,-14.581 0,0 -0.0993,-32.786 -0.0993,-36.461 0,-7.35 9.8512,-13.308 22.003,-13.308 12.1518,0 22.003,5.9584 22.003,13.308 z"
inkscape:connector-curvature="0"
style="stroke-width:2" />
<path
id="path3905-7"
transform="translate(-0.70978,-3.1062)"
d="m -617.16,216.62 c 0,7.35 -9.8512,13.308 -22.003,13.308 -12.1518,0 -22.003,-5.9584 -22.003,-13.308 0,-7.35 9.8512,-13.308 22.003,-13.308 12.1518,0 22.003,5.9584 22.003,13.308 z"
inkscape:connector-curvature="0"
style="stroke-width:1.5" />
</g>
<g
id="g3958"
transform="translate(884.066,-4.99999)"
style="fill:#ffffff;stroke:#000000">
<path
id="path3932"
d="m -618.33,265.07 23.883,-20.884 33.082,16.116 -23.338,21.33 z"
inkscape:connector-curvature="0"
style="stroke-width:1.5;stroke-linejoin:round" />
<path
id="path3934"
d="m -584.71,281.63 0.19831,8.4449 23.068,-20.406 0.0717,-9.369 z"
inkscape:connector-curvature="0"
style="stroke-width:2;stroke-linejoin:round" />
<path
id="path3936"
d="m -584.71,281.63 0.19831,8.4449 -33.892,-15.97 0.067,-9.0372 z"
inkscape:connector-curvature="0"
style="stroke-width:2;stroke-linejoin:round" />
<path
id="path3938"
d="m -614.07,271.47 -0.54646,1.2119 -0.20199,3.1152 -4.2705,3.4522 2.133,1.0038 3.6387,-2.9486 0.75517,-0.44408 0.24862,-4.3866 z"
inkscape:connector-curvature="0"
style="stroke-width:1px" />
<path
id="path3938-4"
d="m -592.31,282.22 -0.54646,1.2119 -0.20199,3.1152 -4.2705,3.4522 2.133,1.0038 3.6387,-2.9486 0.75517,-0.44408 0.24862,-4.3866 z"
inkscape:connector-curvature="0"
style="stroke-width:1px" />
</g>
<g
id="g4267"
transform="translate(884.066,-4.99999)"
style="fill:#ffffff;stroke:#000000">
<path
id="path3965"
d="m -325.91,122.37 v 60.897 l 59.909,27.102 v -59.508 z"
inkscape:connector-curvature="0"
style="stroke-width:2;stroke-linejoin:round" />
<path
id="path3967"
d="m -231.12,112.75 -34.882,38.11 v 59.508 l 34.882,-33.125 z"
inkscape:connector-curvature="0"
style="stroke-width:2;stroke-linejoin:round" />
<path
id="path3969"
d="m -231.12,112.75 -58.22,-27.855 -36.57,37.474 59.909,28.492 z"
inkscape:connector-curvature="0"
style="stroke-width:1.5;stroke-linejoin:round" />
<path
id="path3971"
d="m -265.21,96.44 15.693,-14.825 c 11.538,-10.9 28.855,4.0906 28.482,15.064 0,0 0.12471,1.9525 -1.0127,5.071 -2.0733,5.6845 -5.923,7.6928 -9.0782,10.997 l -8.6194,-4.124 z"
inkscape:connector-curvature="0"
style="stroke-width:1.5" />
</g>
<g
id="g4019"
transform="translate(884.066,-4.99999)"
style="fill:none;stroke:#000000;stroke-linejoin:round">
<path
id="path3981"
transform="matrix(0.97538,-0.22729,0.19766,0.87076,-54.998,-79.909)"
d="m -438.25,189.82 c 0,13.252 -14.638,23.995 -32.694,23.995 -18.056,0 -32.694,-10.743 -32.694,-23.995 0,-13.252 14.638,-23.995 32.694,-23.995 18.056,0 32.694,10.743 32.694,23.995 z"
inkscape:connector-curvature="0"
style="stroke-width:1.5862" />
<path
id="path3981-0"
transform="matrix(-0.31948,-0.29595,0.24041,-0.23168,-656.53,66.794)"
d="m -438.25,189.82 c 0,13.252 -14.638,23.995 -32.694,23.995 -18.056,0 -32.694,-10.743 -32.694,-23.995 0,-13.252 14.638,-23.995 32.694,-23.995 18.056,0 32.694,10.743 32.694,23.995 z"
inkscape:connector-curvature="0"
style="stroke-width:2.62459993" />
<path
id="path3981-0-9"
transform="matrix(-0.45332,0.01564,0.0058521,-0.28195,-650.87,234.53)"
d="m -438.25,189.82 c 0,13.252 -14.638,23.995 -32.694,23.995 -18.056,0 -32.694,-10.743 -32.694,-23.995 0,-13.252 14.638,-23.995 32.694,-23.995 18.056,0 32.694,10.743 32.694,23.995 z"
inkscape:connector-curvature="0"
style="stroke-width:2.79809999" />
</g>
<path
style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-linejoin:round"
inkscape:connector-curvature="0"
d="m 160.09,206.83001 v 18.454 l 26.972,15.26 v -18.454 z"
id="path4028" />
<path
style="fill:#ffffff;stroke:#000000;stroke-width:1.5;stroke-linejoin:round"
inkscape:connector-curvature="0"
d="m 160.09,206.83001 31.408,-25.907 25.907,15.26 -30.343,25.907 z"
id="path4030" />
<path
style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-linejoin:round"
inkscape:connector-curvature="0"
d="m 187.061,240.54001 30.698,-24.842 -0.35488,-19.519 -30.343,25.907 z"
id="path4033" />
<g
id="g4182"
transform="translate(884.066,-4.99999)"
style="stroke:#000000">
<path
id="path4035"
d="m -598.76,175.23 v 32.121 l 9.0341,5.3954 0.13718,-30.529 z"
inkscape:connector-curvature="0"
style="fill:#ffffff;stroke-width:2;stroke-linejoin:round" />
<path
id="path4039"
d="m -589.72,212.75 88.584,-74.657 0.75284,-28.859 -89.2,72.987 z"
inkscape:connector-curvature="0"
style="fill:#ffffff;stroke-width:2;stroke-linejoin:round" />
<path
id="path4041"
d="m -599.26,177.23 v 7.1365 l 9.1419,6.3882 89.034,-72.043 0.19514,-7.4802 -9.536,-7.0265 z"
inkscape:connector-curvature="0"
style="stroke-width:1px" />
<path
id="path4037"
d="m -598.76,175.23 88.835,-73.025 9.536,7.0265 -89.2,72.987 z"
inkscape:connector-curvature="0"
style="fill:#ffffff;stroke-width:1.5;stroke-linejoin:round" />
</g>
<g
id="g4188"
transform="translate(884.066,-4.99999)"
style="fill:#ffffff;stroke:#000000;stroke-linejoin:round">
<path
id="path4043"
d="m -512.36,65.679 165.99,79.073 0.35489,-23.778 -166.09,-77.366 z"
inkscape:connector-curvature="0"
style="stroke-width:2" />
<path
id="path4045"
d="m -512.11,43.607 15.737,-11.915 166.13,77.041 -15.774,12.241 z"
inkscape:connector-curvature="0"
style="stroke-width:1.5" />
<path
id="path4047"
d="m -330.25,108.73 v 23.338 l -16.129,12.681 0.35489,-23.778 z"
inkscape:connector-curvature="0"
style="stroke-width:2" />
<path
id="path4051"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,-99.472,126.95)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-4"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,-104.68,131.09)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-8"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,-87.026,132.8)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-4-8"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,-92.234,136.94)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-2"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,-75.026,138.8)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-4-4"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,-80.234,142.94)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-5"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,-61.026,144.8)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-4-5"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,-66.234,148.94)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-1"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,-47.026,150.8)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-4-7"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,-52.234,154.94)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-11"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,-34.498,156.33)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-4-52"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,-39.705,160.47)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-7"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,-22.498,162.33)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-4-6"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,-27.705,166.47)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-14"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,-10.498,168.33)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-4-2"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,-15.705,172.47)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-3"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,1.5019,174.33)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-4-22"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,-3.7052,178.47)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-16"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,13.502,180.33)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-4-85"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,8.2948,184.47)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-76"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,27.502,186.33)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-4-1"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,22.295,190.47)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-89"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,41.502,192.33)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
<path
id="path4051-4-27"
transform="matrix(0.77333,0.23576,-0.27228,0.66959,36.295,196.47)"
d="m -488.07,43.487 c 0,1.1088 -1.4721,2.0076 -3.288,2.0076 -1.8159,0 -3.288,-0.89882 -3.288,-2.0076 0,-1.10878 1.4721,-2.0076 3.288,-2.0076 1.8159,0 3.288,0.89882 3.288,2.0076 z"
inkscape:connector-curvature="0" />
</g>
<g
id="g4251"
transform="translate(884.066,-4.99999)">
<g
id="g4257"
style="fill:#ffffff;stroke:#000000">
<path
id="path4217"
d="m -224.85,185.27 70.767,34.129 0.37642,39.148 -71.018,-33.878 z"
inkscape:connector-curvature="0"
style="stroke-width:2;stroke-linejoin:round" />
<path
id="path4219"
d="m -224.85,185.27 40.151,-37.391 69.763,34.631 -39.148,36.889 z"
inkscape:connector-curvature="0"
style="stroke-width:1.5;stroke-linejoin:round" />
<path
id="path4221"
d="m -153.7,258.55 38.775,-35.841 -0.004,-40.195 -39.148,36.889 z"
inkscape:connector-curvature="0"
style="stroke-width:2;stroke-linejoin:round" />
<path
id="path3971-9"
d="m -161.99,159.15 11.376,-10.37 c 11.73,-10.693 28.855,4.0906 28.482,15.064 0,0 0.12471,1.9525 -1.0127,5.071 -2.0733,5.6846 -1.923,3.6928 -5.0782,6.9972 l -8.6194,-4.124 z"
inkscape:connector-curvature="0"
style="stroke-width:1.5" />
</g>
</g>
<g
id="g3898"
transform="translate(884.066,-4.99999)"
style="stroke:#000000;stroke-linejoin:round">
<path
id="path3785"
d="m -102.39,408.61 v -75.284 l -103.39,-49.687 v 72.774 z"
inkscape:connector-curvature="0"
style="fill:#ffffff;stroke-width:2" />
<path
id="path3787"
d="m -205.78,283.64 53.201,-53.201 101.28,47.342 -51.094,55.546 z"
inkscape:connector-curvature="0"
style="fill:#ffffff;stroke-width:1.5" />
<path
id="path3789"
d="m -102.39,408.61 51.282,-57.848 -0.18798,-72.982 -51.094,55.546 z"
inkscape:connector-curvature="0"
style="fill:#ffffff;stroke-width:2" />
<path
id="path3791"
d="m -96.885,357.51 0.34451,-14.594 40.191,-44.392 v 14.447 z"
inkscape:connector-curvature="0"
style="stroke-width:1px" />
<path
id="path3791-1"
d="m -96.873,388.64 0.34451,-14.594 40.191,-44.392 v 14.447 z"
inkscape:connector-curvature="0"
style="stroke-width:1px" />
</g>
<g
id="g3887"
transform="translate(884.066,-4.99999)"
style="stroke:#000000;stroke-linejoin:round">
<path
id="path3003"
d="m -366.7,354.66 69.559,-67.429 128.47,63.171 -67.429,73.818 z"
inkscape:connector-curvature="0"
style="fill:#ffffff;stroke-width:1.5" />
<path
id="path3005"
d="m -366.62,423.7 -0.0819,-69.046 130.6,69.559 v 71.76 z"
inkscape:connector-curvature="0"
style="fill:#ffffff;stroke-width:2" />
<path
id="path3007"
d="m -236.1,495.97 67.729,-74.782 -0.2999,-70.795 -67.429,73.818 z"
inkscape:connector-curvature="0"
style="fill:#ffffff;stroke-width:2" />
<path
id="path3009"
d="m -228.35,430.48 v 35.383 l 13.049,-14.555 v 10.364 l 5.1819,-5.1819 v 10.796 l 20.568,-22.71 -0.26187,-11.058 3.1438,-3.4724 v -9.1032 l 9.2687,-9.5435 -0.25095,-34.631 z"
inkscape:connector-curvature="0"
style="stroke-width:1px" />
</g>
<metadata
id="metadata90">
<rdf:RDF>
<cc:Work>
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
<dc:publisher>
<cc:Agent
rdf:about="http://openclipart.org/">
<dc:title>Openclipart</dc:title>
</cc:Agent>
</dc:publisher>
<dc:title>looks like raspberry pi printed circuit board</dc:title>
<dc:date>2013-10-11T20:32:48</dc:date>
<dc:description>Any similarity to Raspberry pi is not intended ;-)</dc:description>
<dc:source>https://openclipart.org/detail/184791/looks-like-raspberry-pi-printed-circuit-board-by-mawoki-184791</dc:source>
<dc:creator>
<cc:Agent>
<dc:title>mawoki</dc:title>
</cc:Agent>
</dc:creator>
<dc:subject>
<rdf:Bag>
<rdf:li>electronic components</rdf:li>
<rdf:li>pcb</rdf:li>
<rdf:li>pi</rdf:li>
<rdf:li>printed circuit board</rdf:li>
<rdf:li>raspberry</rdf:li>
<rdf:li>raspberry pi</rdf:li>
</rdf:Bag>
</dc:subject>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<path
style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
inkscape:connector-curvature="0"
d="m 71.362293,154.55744 v 20.11235 l 29.395817,16.63133 v -20.11235 z"
id="path1073" />
<path
style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
inkscape:connector-curvature="0"
d="m 71.362293,154.55744 34.230447,-28.2351 28.23511,16.63132 -33.06975,28.23511 z"
id="path1075" />
<path
style="fill:#ffffff;stroke:#000000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
inkscape:connector-curvature="0"
d="m 100.75701,191.29676 33.45665,-27.0744 -0.38677,-21.27306 -33.06974,28.23511 z"
id="path1077" />
<g
transform="matrix(0.82337087,0,0,0.82337087,78.497797,-159.13812)"
style="fill:#ffffff;stroke:#000000;stroke-width:2.429039;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
id="g1071">
<path
style="stroke-width:2.429039;stroke-miterlimit:4;stroke-dasharray:none"
inkscape:connector-curvature="0"
d="m 32.184,401.51 v 18.454 l 26.972,15.26 V 416.77 Z"
id="path1065" />
<path
style="stroke-width:2.429039;stroke-miterlimit:4;stroke-dasharray:none"
inkscape:connector-curvature="0"
d="m 32.184,401.51 31.408,-25.907 25.907,15.26 -30.343,25.907 z"
id="path1067" />
<path
style="stroke-width:2.429039;stroke-miterlimit:4;stroke-dasharray:none"
inkscape:connector-curvature="0"
d="m 59.155,435.22 30.698,-24.842 -0.35488,-19.519 -30.343,25.907 z"
id="path1069" />
</g>
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 78.10823,148.654 C -19.25021,106.42948 45.83471,52.1024 45.83471,52.1024 v 0"
id="path1083"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 89.672906,138.97194 C 4.14809,104.00897 56.8615,60.97761 56.8615,60.97761"
id="path1085"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<g
id="g1132"
transform="rotate(29.176396,-414.96256,605.35757)">
<rect
y="12.769989"
x="-195"
height="10"
width="55"
id="rect1125"
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.39999998;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="rect1127"
d="m -140,3.769989 25,14.5 -25,14.5 z"
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.39999998;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -33,7 +33,7 @@ Page {
}) })
d.editRulePage.onAccept.connect(function() { d.editRulePage.onAccept.connect(function() {
d.editRulePage.busy = true; d.editRulePage.busy = true;
Engine.ruleManager.addRule(page.rule); Engine.ruleManager.addRule(d.editRulePage.rule);
}) })
d.editRulePage.onCancel.connect(function() { d.editRulePage.onCancel.connect(function() {
pageStack.pop(); pageStack.pop();
@ -87,23 +87,14 @@ Page {
filterDeviceId: root.device.id filterDeviceId: root.device.id
} }
delegate: SwipeDelegate { delegate: MeaListItemDelegate {
width: parent.width width: parent.width
contentItem: RowLayout { iconName: "../images/magic.svg"
spacing: app.margins iconColor: !model.enabled ? "red" : (model.active ? app.guhAccent : "grey")
ColorIcon { text: model.name
height: app.iconSize canDelete: true
width: height
name: "../images/magic.svg"
color: !model.enabled ? "red" : (model.active ? app.guhAccent : "grey")
}
Label {
Layout.fillWidth: true
text: model.name
}
}
onDeleteClicked: Engine.ruleManager.removeRule(model.id)
onClicked: { onClicked: {
d.editRulePage = pageStack.push(Qt.resolvedUrl("EditRulePage.qml"), {rule: rulesFilterModel.get(index).clone() }) d.editRulePage = pageStack.push(Qt.resolvedUrl("EditRulePage.qml"), {rule: rulesFilterModel.get(index).clone() })
d.editRulePage.StackView.onRemoved.connect(function() { d.editRulePage.StackView.onRemoved.connect(function() {
@ -118,19 +109,6 @@ Page {
}) })
} }
swipe.right: Item {
height: ruleDelegate.height
width: height
anchors.right: parent.right
ColorIcon {
anchors.fill: parent
anchors.margins: app.margins
name: "../images/delete.svg"
color: "red"
}
SwipeDelegate.onClicked: Engine.ruleManager.removeRule(model.id)
}
} }
} }
@ -146,6 +124,7 @@ Page {
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
text: qsTr("There's no magic involving %1.").arg(root.device.name) text: qsTr("There's no magic involving %1.").arg(root.device.name)
font.pixelSize: app.largeFont font.pixelSize: app.largeFont
color: app.guhAccent
} }
Label { Label {
width: parent.width width: parent.width