Improve thermostat views
This commit is contained in:
parent
51769fc6d1
commit
0e89d62db8
@ -251,5 +251,7 @@
|
||||
<file>ui/images/discord.svg</file>
|
||||
<file>ui/images/media/equalizer.svg</file>
|
||||
<file>ui/images/media/ambeo.svg</file>
|
||||
<file>ui/images/thermostat/cooling.svg</file>
|
||||
<file>ui/images/thermostat/heating.svg</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
||||
@ -230,5 +230,7 @@
|
||||
<file>ui/components/ColorTemperaturePicker.qml</file>
|
||||
<file>ui/components/ThingContextMenu.qml</file>
|
||||
<file>ui/StyleBase.qml</file>
|
||||
<file>ui/customviews/ThermostatController.qml</file>
|
||||
<file>ui/devicepages/ThermostatDevicePage.qml</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
||||
@ -69,6 +69,7 @@ ApplicationWindow {
|
||||
property int smallFont: 13
|
||||
property int mediumFont: 16
|
||||
property int largeFont: 20
|
||||
property int hugeFont: 40
|
||||
|
||||
property int smallIconSize: 16
|
||||
property int iconSize: 24
|
||||
@ -145,6 +146,7 @@ ApplicationWindow {
|
||||
"blind",
|
||||
"garagedoor",
|
||||
"powersocket",
|
||||
"thermostat",
|
||||
"heating",
|
||||
"smartlock",
|
||||
"doorbell",
|
||||
@ -218,6 +220,8 @@ ApplicationWindow {
|
||||
return qsTr("Smart meters");
|
||||
case "heating":
|
||||
return qsTr("Heating");
|
||||
case "thermostat":
|
||||
return qsTr("Thermostats");
|
||||
case "evcharger":
|
||||
return qsTr("EV-chargers");
|
||||
case "powersocket":
|
||||
@ -341,8 +345,9 @@ ApplicationWindow {
|
||||
case "extendedsmartmeterproducer":
|
||||
return Qt.resolvedUrl("images/smartmeter.svg")
|
||||
case "heating":
|
||||
case "extendedheating":
|
||||
return Qt.resolvedUrl("images/radiator.svg")
|
||||
return Qt.resolvedUrl("images/thermostat/heating.svg")
|
||||
case "cooling":
|
||||
return Qt.resolvedUrl("images/thermostat/cooling.svg")
|
||||
case "thermostat":
|
||||
return Qt.resolvedUrl("images/dial.svg")
|
||||
case "evcharger":
|
||||
|
||||
@ -37,7 +37,8 @@ import QtQuick.Controls.Material 2.2
|
||||
ColumnLayout {
|
||||
id: dial
|
||||
|
||||
property Device device: null
|
||||
property Thing thing: null
|
||||
property alias device: dial.thing
|
||||
property StateType stateType: null
|
||||
|
||||
property bool showValueLabel: true
|
||||
@ -53,14 +54,14 @@ ColumnLayout {
|
||||
return (to - from) * angle / maxAngle + from
|
||||
}
|
||||
|
||||
readonly property State deviceState: device && stateType ? device.states.getState(stateType.id) : null
|
||||
readonly property State deviceState: thing && stateType ? thing.states.getState(stateType.id) : null
|
||||
readonly property double from: dial.stateType ? dial.stateType.minValue : 0
|
||||
readonly property double to: dial.stateType ? dial.stateType.maxValue : 100
|
||||
readonly property double anglePerStep: maxAngle / dial.steps
|
||||
readonly property double startAngle: -(dial.steps * dial.anglePerStep) / 2
|
||||
|
||||
readonly property StateType powerStateType: dial.device.deviceClass.stateTypes.findByName("power")
|
||||
readonly property State powerState: powerStateType ? dial.device.states.getState(powerStateType.id) : null
|
||||
readonly property StateType powerStateType: dial.thing.thingClass.stateTypes.findByName("power")
|
||||
readonly property State powerState: powerStateType ? dial.thing.states.getState(powerStateType.id) : null
|
||||
|
||||
QtObject {
|
||||
id: d
|
||||
@ -93,11 +94,11 @@ ColumnLayout {
|
||||
param["paramName"] = dial.stateType.name
|
||||
param["value"] = value
|
||||
params.push(param)
|
||||
d.pendingActionId = dial.device.executeAction(dial.stateType.name, params)
|
||||
d.pendingActionId = dial.thing.executeAction(dial.stateType.name, params)
|
||||
}
|
||||
}
|
||||
Connections {
|
||||
target: engine.deviceManager
|
||||
target: engine.thingManager
|
||||
onExecuteActionReply: {
|
||||
if (d.pendingActionId == commandId) {
|
||||
d.pendingActionId = -1
|
||||
@ -109,7 +110,7 @@ ColumnLayout {
|
||||
}
|
||||
}
|
||||
Connections {
|
||||
target: dial.device
|
||||
target: dial.thing
|
||||
onActionExecutionFinished: {
|
||||
if (id == d.pendingActionId) {
|
||||
d.pendingActionId = -1;
|
||||
@ -121,12 +122,12 @@ ColumnLayout {
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: rotationButton.rotation = dial.valueToAngle(dial.deviceState.value)
|
||||
Component.onCompleted: rotationButton.rotation = dial.valueToAngle(dial.thingState.value)
|
||||
Connections {
|
||||
target: dial.deviceState
|
||||
target: dial.thingState
|
||||
onValueChanged: {
|
||||
if (!d.busy) {
|
||||
rotationButton.rotation = dial.valueToAngle(dial.deviceState.value)
|
||||
rotationButton.rotation = dial.valueToAngle(dial.thingState.value)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -285,7 +286,7 @@ ColumnLayout {
|
||||
param["paramName"] = "power"
|
||||
param["value"] = !dial.powerState.value
|
||||
params.push(param)
|
||||
dial.device.executeAction("power", params)
|
||||
dial.thing.executeAction("power", params)
|
||||
}
|
||||
dragging = false;
|
||||
}
|
||||
|
||||
237
nymea-app/ui/customviews/ThermostatController.qml
Normal file
237
nymea-app/ui/customviews/ThermostatController.qml
Normal file
@ -0,0 +1,237 @@
|
||||
import QtQuick 2.9
|
||||
import Nymea 1.0
|
||||
import "../utils"
|
||||
import "../components"
|
||||
|
||||
Item {
|
||||
id: root
|
||||
|
||||
property Thing thing: null
|
||||
|
||||
property double precision: 0.5
|
||||
|
||||
readonly property StateType targetTemperatureStateType: thing.thingClass.stateTypes.findByName("targetTemperature")
|
||||
readonly property State targetTemperatureState: thing.stateByName("targetTemperature")
|
||||
readonly property StateType temperatureStateType: thing.thingClass.stateTypes.findByName("temperature")
|
||||
readonly property State temperatureState: thing.stateByName("temperature")
|
||||
readonly property State heatingOnState: thing.stateByName("heatingOn")
|
||||
readonly property State coolingOnState: thing.stateByName("coolingOn")
|
||||
|
||||
Connections {
|
||||
target: targetTemperatureState
|
||||
onValueChanged: canvas.requestPaint()
|
||||
}
|
||||
Connections {
|
||||
target: temperatureState
|
||||
onValueChanged: canvas.requestPaint()
|
||||
}
|
||||
ActionQueue {
|
||||
id: actionQueue
|
||||
thing: root.thing
|
||||
stateType: targetTemperatureStateType
|
||||
onPendingValueChanged: canvas.requestPaint();
|
||||
}
|
||||
|
||||
Canvas {
|
||||
id: canvas
|
||||
width: Math.min(parent.width, parent.height)
|
||||
height: width
|
||||
anchors.centerIn: parent
|
||||
|
||||
property int startAngle: 135
|
||||
property int maxAngle: 270
|
||||
property int steps: roundToPrecision(root.targetTemperatureStateType.maxValue - root.targetTemperatureStateType.minValue) * (1/root.precision)
|
||||
property double stepSize: (root.targetTemperatureStateType.maxValue - root.targetTemperatureStateType.minValue) / steps
|
||||
property double anglePerStep: maxAngle / steps
|
||||
|
||||
|
||||
function angleToValue(angle) {
|
||||
var from = root.targetTemperatureStateType.minValue
|
||||
var to = root.targetTemperatureStateType.maxValue
|
||||
return (to - from) * angle / maxAngle + from
|
||||
}
|
||||
|
||||
onPaint: {
|
||||
var ctx = canvas.getContext('2d');
|
||||
ctx.save();
|
||||
ctx.reset()
|
||||
|
||||
|
||||
var center = { x: canvas.width / 2, y: canvas.height / 2 };
|
||||
var rotation = 135;
|
||||
|
||||
// Background arc
|
||||
ctx.beginPath()
|
||||
// ctx.strokeStyle = Style.tileBackgroundColor;
|
||||
ctx.lineWidth = 0;
|
||||
ctx.fillStyle = Style.tileBackgroundColor
|
||||
var innerRadius = canvas.width * 0.4
|
||||
var outerRadius = canvas.width * 0.5
|
||||
var endAngle = (maxAngle + startAngle) % 360
|
||||
var radStart = startAngle * Math.PI/180;
|
||||
var radEnd = endAngle * Math.PI/180;
|
||||
ctx.arc(center.x, center.y, outerRadius, radStart, radEnd)
|
||||
ctx.arc(center.x, center.y, innerRadius, radEnd, radStart, true)
|
||||
ctx.fill();
|
||||
ctx.closePath();
|
||||
|
||||
// Step lines
|
||||
var currentValue = actionQueue.pendingValue || root.targetTemperatureState.value
|
||||
var targetTempStep = roundToPrecision(currentValue - root.targetTemperatureStateType.minValue) * (1/root.precision)
|
||||
var currentTempStep;
|
||||
if (root.temperatureState) {
|
||||
currentTempStep = roundToPrecision(root.temperatureState.value - root.targetTemperatureStateType.minValue) * (1/root.precision)
|
||||
}
|
||||
|
||||
for(var step = 0; step < steps; step += root.precision) {
|
||||
var angle = step * anglePerStep + startAngle;
|
||||
var innerRadius = canvas.width * 0.4
|
||||
var outerRadius = canvas.width * 0.5
|
||||
|
||||
if (targetTempStep === step) {
|
||||
if (currentTempStep && currentTempStep < targetTempStep) {
|
||||
ctx.strokeStyle = "red";
|
||||
} else if (currentTempStep && currentTempStep > targetTempStep) {
|
||||
ctx.strokeStyle = "dodgerblue";
|
||||
} else {
|
||||
ctx.strokeStyle = Style.accentColor;
|
||||
}
|
||||
innerRadius = canvas.width * 0.38
|
||||
ctx.lineWidth = 4;
|
||||
} else if (currentTempStep && currentTempStep === step) {
|
||||
if (currentTempStep < targetTempStep) {
|
||||
ctx.strokeStyle = "red";
|
||||
} else {
|
||||
ctx.strokeStyle = "dodgerblue";
|
||||
}
|
||||
ctx.lineWidth = 3;
|
||||
} else if (currentTempStep && currentTempStep < step && step < targetTempStep) {
|
||||
ctx.strokeStyle = "red";
|
||||
ctx.lineWidth = 2;
|
||||
} else if (currentTempStep && currentTempStep > step && step > targetTempStep) {
|
||||
ctx.strokeStyle = "dodgerblue";
|
||||
ctx.lineWidth = 2;
|
||||
} else {
|
||||
ctx.strokeStyle = Style.tileOverlayColor;
|
||||
ctx.lineWidth = 1;
|
||||
}
|
||||
|
||||
ctx.beginPath();
|
||||
// rotate
|
||||
//convert to radians
|
||||
var rad = angle * Math.PI/180;
|
||||
var c = Math.cos(rad);
|
||||
var s = Math.sin(rad);
|
||||
var innerPointX = center.x + (innerRadius * c);
|
||||
var innerPointY = center.y + (innerRadius * s);
|
||||
var outerPointX = center.x + (outerRadius * c);
|
||||
var outerPointY = center.x + (outerRadius * s);
|
||||
|
||||
context.moveTo(innerPointX, innerPointY);
|
||||
context.lineTo(outerPointX, outerPointY);
|
||||
ctx.stroke();
|
||||
ctx.closePath();
|
||||
}
|
||||
|
||||
ctx.beginPath();
|
||||
ctx.font = "" + app.hugeFont + "px " + Style.fontFamily;
|
||||
ctx.fillStyle = Style.foregroundColor;
|
||||
var roundedTargetTemp = Types.toUiValue(root.targetTemperatureState.value, root.targetTemperatureStateType.unit)
|
||||
roundedTargetTemp = roundToPrecision(roundedTargetTemp).toFixed(1) + "°"
|
||||
var size = ctx.measureText(roundedTargetTemp)
|
||||
ctx.text(roundedTargetTemp, center.x - size.width / 2, center.y + app.hugeFont / 2);
|
||||
ctx.fill();
|
||||
ctx.closePath();
|
||||
|
||||
if (root.temperatureState) {
|
||||
ctx.beginPath();
|
||||
ctx.font = "" + app.largeFont + "px " + Style.fontFamily;
|
||||
var roundedTemp = Types.toUiValue(root.temperatureState.value, root.temperatureStateType.unit)
|
||||
roundedTemp = roundToPrecision(roundedTemp) + "°"
|
||||
size = ctx.measureText(roundedTemp)
|
||||
ctx.text(roundedTemp, center.x - size.width / 2, center.y + app.hugeFont + app.margins);
|
||||
ctx.fill();
|
||||
ctx.closePath();
|
||||
}
|
||||
|
||||
ctx.restore();
|
||||
}
|
||||
|
||||
function roundToPrecision(value) {
|
||||
var tmp = Math.round(value / root.precision) * root.precision;
|
||||
return tmp;
|
||||
}
|
||||
}
|
||||
|
||||
ColorIcon {
|
||||
width: app.largeIconSize
|
||||
height: width
|
||||
anchors { bottom: canvas.bottom; horizontalCenter: canvas.horizontalCenter }
|
||||
name: root.heatingOnState && root.heatingOnState.value === true
|
||||
? "../images/thermostat/heating.svg"
|
||||
: root.coolingOnState && root.coolingOnState.value === true
|
||||
? "../images/thermostat/cooling.svg"
|
||||
: ""
|
||||
color: root.heatingOnState && root.heatingOnState.value === true
|
||||
? "red"
|
||||
: root.coolingOnState && root.coolingOnState.value === true
|
||||
? "dodgerblue"
|
||||
: Style.iconColor
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: canvas
|
||||
|
||||
property bool dragging: false
|
||||
property double lastAngle
|
||||
property double angleDiff
|
||||
|
||||
onPressed: {
|
||||
lastAngle = calculateAngle(mouseX, mouseY)
|
||||
}
|
||||
|
||||
onPositionChanged: {
|
||||
var angle = calculateAngle(mouseX, mouseY)
|
||||
var tmpDiff = angle - lastAngle
|
||||
if (tmpDiff > 300) {
|
||||
tmpDiff -= 360
|
||||
}
|
||||
if (tmpDiff < -300) {
|
||||
tmpDiff += 360
|
||||
}
|
||||
|
||||
lastAngle = angle;
|
||||
|
||||
angleDiff += tmpDiff
|
||||
|
||||
var valueDiff = angleDiff / canvas.anglePerStep * canvas.stepSize
|
||||
valueDiff = canvas.roundToPrecision(valueDiff)
|
||||
if (Math.abs(valueDiff) > 0) {
|
||||
var currentValue = actionQueue.pendingValue || root.targetTemperatureState.value
|
||||
var newValue = currentValue + valueDiff
|
||||
newValue = Math.min(root.targetTemperatureStateType.maxValue, Math.max(root.targetTemperatureStateType.minValue, newValue))
|
||||
if (currentValue !== newValue) {
|
||||
actionQueue.sendValue(newValue)
|
||||
}
|
||||
var steps = Math.floor(valueDiff / canvas.stepSize)
|
||||
angleDiff -= steps * canvas.anglePerStep
|
||||
}
|
||||
}
|
||||
|
||||
function calculateAngle(mouseX, mouseY) {
|
||||
// transform coords to center of dial
|
||||
mouseX -= canvas.width / 2
|
||||
mouseY -= canvas.height / 2
|
||||
|
||||
var rad = Math.atan(mouseY / mouseX);
|
||||
var angle = rad * 180 / Math.PI
|
||||
|
||||
angle += 90;
|
||||
|
||||
if (mouseX < 0 && mouseY >= 0) angle = 180 + angle;
|
||||
if (mouseX < 0 && mouseY < 0) angle = 180 + angle;
|
||||
|
||||
return angle;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -167,6 +167,7 @@ MainPageTile {
|
||||
case "extendedsmartmeterconsumer":
|
||||
case "extendedsmartmeterproducer":
|
||||
case "heating":
|
||||
case "thermostat":
|
||||
return sensorComponent;
|
||||
// return labelComponent;
|
||||
|
||||
|
||||
@ -30,84 +30,61 @@
|
||||
|
||||
import QtQuick 2.5
|
||||
import QtQuick.Controls 2.1
|
||||
import QtQuick.Controls.Material 2.2
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Controls.Material 2.1
|
||||
import Nymea 1.0
|
||||
import "../components"
|
||||
import "../customviews"
|
||||
|
||||
DevicePageBase {
|
||||
id: root
|
||||
|
||||
readonly property bool landscape: width > height
|
||||
|
||||
readonly property StateType targetTemperatureStateType: device.deviceClass.stateTypes.findByName("targetTemperature")
|
||||
readonly property State targetTemperatureState: targetTemperatureStateType ? device.states.getState(targetTemperatureStateType.id) : null
|
||||
readonly property StateType powerStateType: deviceClass.stateTypes.findByName("power")
|
||||
readonly property State powerState: powerStateType ? device.states.getState(powerStateType.id) : null
|
||||
readonly property StateType temperatureStateType: device.deviceClass.stateTypes.findByName("temperature")
|
||||
readonly property State temperatureState: temperatureStateType ? device.states.getState(temperatureStateType.id) : null
|
||||
readonly property StateType percentageStateType: device.deviceClass.stateTypes.findByName("percentage")
|
||||
readonly property State percentageState: percentageStateType ? device.states.getState(percentageStateType.id) : null
|
||||
// TODO: should this be an interface? e.g. extendedthermostat
|
||||
readonly property StateType boostStateType: device.deviceClass.stateTypes.findByName("boost")
|
||||
readonly property State boostState: boostStateType ? device.states.getState(boostStateType.id) : null
|
||||
|
||||
Component.onCompleted: {
|
||||
print("d:", root.device, root.targetTemperatureStateType, root.percentageStateType)
|
||||
}
|
||||
readonly property var powerStateType: deviceClass.stateTypes.findByName("power")
|
||||
readonly property var powerState: device.states.getState(powerStateType.id)
|
||||
readonly property var powerActionType: deviceClass.actionTypes.findByName("power");
|
||||
|
||||
GridLayout {
|
||||
anchors.fill: parent
|
||||
anchors.margins: app.margins
|
||||
columns: app.landscape ? 2 : 1
|
||||
rowSpacing: app.margins
|
||||
columnSpacing: app.margins
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
|
||||
Dial {
|
||||
id: dial
|
||||
Layout.fillWidth: true
|
||||
Item {
|
||||
Layout.preferredWidth: Math.max(app.iconSize * 6, parent.width / 5)
|
||||
Layout.preferredHeight: width
|
||||
Layout.topMargin: app.margins
|
||||
Layout.bottomMargin: app.landscape ? app.margins : 0
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
Layout.rowSpan: app.landscape ? 4 : 1
|
||||
Layout.fillHeight: true
|
||||
// visible: root.targetTemperatureStateType || root.percentageStateType
|
||||
|
||||
device: root.device
|
||||
stateType: root.targetTemperatureStateType ? root.targetTemperatureStateType : root.percentageStateType
|
||||
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
Layout.preferredWidth: app.landscape ? parent.width / 2 : parent.width
|
||||
Layout.preferredHeight: 50
|
||||
visible: root.boostStateType
|
||||
border.color: boostMouseArea.pressed || root.boostStateType && root.boostState.value === true ? Style.accentColor : Style.foregroundColor
|
||||
border.width: 1
|
||||
radius: height / 2
|
||||
color: root.boostStateType && root.boostState.value === true ? Style.accentColor : "transparent"
|
||||
|
||||
Row {
|
||||
AbstractButton {
|
||||
height: Math.min(parent.height, parent.width)
|
||||
width: height
|
||||
anchors.centerIn: parent
|
||||
spacing: app.margins / 2
|
||||
ColorIcon {
|
||||
height: app.iconSize
|
||||
width: app.iconSize
|
||||
name: "../images/sensors/temperature.svg"
|
||||
color: root.boostStateType && root.boostState.value === true ? "red" : Style.iconColor
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: "transparent"
|
||||
border.color: root.powerState.value === true ? Style.accentColor : Style.iconColor
|
||||
border.width: 4
|
||||
radius: width / 2
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr("Boost")
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
ColorIcon {
|
||||
id: bulbIcon
|
||||
anchors.fill: parent
|
||||
anchors.margins: app.margins * 1.5
|
||||
name: "../images/thermostat/heating.svg"
|
||||
color: root.powerState.value === true ? Style.accentColor : Style.iconColor
|
||||
}
|
||||
}
|
||||
MouseArea {
|
||||
id: boostMouseArea
|
||||
anchors.fill: parent
|
||||
onPressedChanged: PlatformHelper.vibrate(PlatformHelper.HapticsFeedbackImpact)
|
||||
onClicked: {
|
||||
var params = []
|
||||
var param = {}
|
||||
param["paramTypeId"] = root.boostStateType.id
|
||||
param["value"] = !root.boostState.value
|
||||
param["paramTypeId"] = root.powerActionType.paramTypes.get(0).id;
|
||||
param["value"] = !root.powerState.value;
|
||||
params.push(param)
|
||||
engine.deviceManager.executeAction(root.device.id, root.boostStateType.id, params);
|
||||
engine.deviceManager.executeAction(root.device.id, root.powerStateType.id, params);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
106
nymea-app/ui/devicepages/ThermostatDevicePage.qml
Normal file
106
nymea-app/ui/devicepages/ThermostatDevicePage.qml
Normal file
@ -0,0 +1,106 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* Copyright 2013 - 2020, nymea GmbH
|
||||
* Contact: contact@nymea.io
|
||||
*
|
||||
* This file is part of nymea.
|
||||
* This project including source code and documentation is protected by
|
||||
* copyright law, and remains the property of nymea GmbH. All rights, including
|
||||
* reproduction, publication, editing and translation, are reserved. The use of
|
||||
* this project is subject to the terms of a license agreement to be concluded
|
||||
* with nymea GmbH in accordance with the terms of use of nymea GmbH, available
|
||||
* under https://nymea.io/license
|
||||
*
|
||||
* GNU General Public License Usage
|
||||
* Alternatively, this project may be redistributed and/or modified under the
|
||||
* terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, GNU version 3. This project is distributed in the hope that it
|
||||
* will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
* Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this project. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* For any further details and any questions please contact us under
|
||||
* contact@nymea.io or see our FAQ/Licensing Information on
|
||||
* https://nymea.io/license/faq
|
||||
*
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
import QtQuick 2.5
|
||||
import QtQuick.Controls 2.1
|
||||
import QtQuick.Controls.Material 2.2
|
||||
import QtQuick.Layouts 1.1
|
||||
import Nymea 1.0
|
||||
import "../components"
|
||||
import "../customviews"
|
||||
|
||||
DevicePageBase {
|
||||
id: root
|
||||
|
||||
readonly property bool landscape: width > height
|
||||
|
||||
readonly property StateType targetTemperatureStateType: thing.thingClass.stateTypes.findByName("targetTemperature")
|
||||
readonly property State targetTemperatureState: targetTemperatureStateType ? thing.states.getState(targetTemperatureStateType.id) : null
|
||||
readonly property StateType powerStateType: thingClass.stateTypes.findByName("power")
|
||||
readonly property State powerState: powerStateType ? thing.states.getState(powerStateType.id) : null
|
||||
readonly property StateType temperatureStateType: thing.thingClass.stateTypes.findByName("temperature")
|
||||
readonly property State temperatureState: temperatureStateType ? thing.states.getState(temperatureStateType.id) : null
|
||||
readonly property StateType percentageStateType: thing.thingClass.stateTypes.findByName("percentage")
|
||||
readonly property State percentageState: percentageStateType ? thing.states.getState(percentageStateType.id) : null
|
||||
// TODO: should this be an interface? e.g. extendedthermostat
|
||||
readonly property StateType boostStateType: thing.thingClass.stateTypes.findByName("boost")
|
||||
readonly property State boostState: boostStateType ? thing.states.getState(boostStateType.id) : null
|
||||
|
||||
GridLayout {
|
||||
anchors.fill: parent
|
||||
anchors.margins: app.margins
|
||||
columns: app.landscape ? 2 : 1
|
||||
|
||||
ThermostatController {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
thing: root.thing
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
Layout.preferredWidth: app.landscape ? parent.width / 2 : parent.width
|
||||
Layout.preferredHeight: 50
|
||||
visible: root.boostStateType
|
||||
border.color: boostMouseArea.pressed || root.boostStateType && root.boostState.value === true ? Style.accentColor : Style.foregroundColor
|
||||
border.width: 1
|
||||
radius: height / 2
|
||||
color: root.boostStateType && root.boostState.value === true ? Style.accentColor : "transparent"
|
||||
|
||||
Row {
|
||||
anchors.centerIn: parent
|
||||
spacing: app.margins / 2
|
||||
ColorIcon {
|
||||
height: app.iconSize
|
||||
width: app.iconSize
|
||||
name: "../images/sensors/temperature.svg"
|
||||
color: root.boostStateType && root.boostState.value === true ? "red" : Style.iconColor
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr("Boost")
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
}
|
||||
MouseArea {
|
||||
id: boostMouseArea
|
||||
anchors.fill: parent
|
||||
onPressedChanged: PlatformHelper.vibrate(PlatformHelper.HapticsFeedbackImpact)
|
||||
onClicked: {
|
||||
var params = []
|
||||
var param = {}
|
||||
param["paramTypeId"] = root.boostStateType.id
|
||||
param["value"] = !root.boostState.value
|
||||
params.push(param)
|
||||
engine.thingManager.executeAction(root.thing.id, root.boostStateType.id, params);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
231
nymea-app/ui/images/thermostat/cooling.svg
Normal file
231
nymea-app/ui/images/thermostat/cooling.svg
Normal file
@ -0,0 +1,231 @@
|
||||
<?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="weather-chance-of-snow.svg">
|
||||
<defs
|
||||
id="defs4876" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="5.6199993"
|
||||
inkscape:cx="21.788253"
|
||||
inkscape:cy="54.937708"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="g4780"
|
||||
showgrid="false"
|
||||
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="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:none;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;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.00079107;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 415.56641,392.05273 -3.22657,2.36524 11.52735,15.71484 3.22656,-2.36719 -11.52734,-15.71289 z"
|
||||
id="path4236"
|
||||
inkscape:connector-curvature="0" />
|
||||
<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:none;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;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.00079107;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 423.86719,376.54688 -11.52735,15.71484 3.22657,2.36523 11.52734,-15.71289 -3.22656,-2.36718 z"
|
||||
id="path4238"
|
||||
inkscape:connector-curvature="0" />
|
||||
<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:none;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;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.00079107;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 364.39258,392.05273 -11.52735,15.71289 3.22657,2.36719 11.52734,-15.71484 -3.22656,-2.36524 z"
|
||||
id="path4240"
|
||||
inkscape:connector-curvature="0" />
|
||||
<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:none;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;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.00079107;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 356.0918,376.54688 -3.22657,2.36718 11.52735,15.71289 3.22656,-2.36523 -11.52734,-15.71484 z"
|
||||
id="path4242"
|
||||
inkscape:connector-curvature="0" />
|
||||
<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:none;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;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.00079107;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 421.01758,368.4375 -19.37696,2.12305 0.43555,3.97656 19.37695,-2.12305 -0.43554,-3.97656 z"
|
||||
id="path4172"
|
||||
inkscape:connector-curvature="0" />
|
||||
<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:none;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;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.00079107;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 396.01953,354.01172 -3.66015,1.61133 7.8496,17.83593 3.66211,-1.61132 -7.85156,-17.83594 z"
|
||||
id="path4174"
|
||||
inkscape:connector-curvature="0" />
|
||||
<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:none;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;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.00079107;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 379.71484,413.25 -3.66015,1.61133 7.84961,17.83594 3.66211,-1.61133 -7.85157,-17.83594 z"
|
||||
id="path4176"
|
||||
inkscape:connector-curvature="0" />
|
||||
<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:none;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;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.00079107;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 377.84766,412.17188 -19.37696,2.12304 0.43555,3.97656 19.37695,-2.12304 -0.43554,-3.97656 z"
|
||||
id="path4178"
|
||||
inkscape:connector-curvature="0" />
|
||||
<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:none;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;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.00079107;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 383.9082,354.0332 -7.84961,17.83594 3.66016,1.61328 7.85156,-17.83789 -3.66211,-1.61133 z"
|
||||
id="path4184"
|
||||
inkscape:connector-curvature="0" />
|
||||
<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:none;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;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.00079107;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 358.91016,368.45898 -0.43555,3.97852 19.37695,2.12305 0.43555,-3.97852 -19.37695,-2.12305 z"
|
||||
id="path4186"
|
||||
inkscape:connector-curvature="0" />
|
||||
<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:none;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;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.00079107;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 402.08008,412.19336 -0.43555,3.97656 19.37695,2.12305 0.43555,-3.97656 -19.37695,-2.12305 z"
|
||||
id="path4188"
|
||||
inkscape:connector-curvature="0" />
|
||||
<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:none;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;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.00079107;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 400.21289,413.27148 -7.84961,17.8379 3.66016,1.61132 7.85156,-17.83789 -3.66211,-1.61133 z"
|
||||
id="path4190"
|
||||
inkscape:connector-curvature="0" />
|
||||
<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;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;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.00079155;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 345.9668,391.36133 0,4.00195 88.0332,0 0.50007,-4.00195 z"
|
||||
id="path4217"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<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:none;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;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.00079155;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 410.25977,354.25586 -44.01758,76.21094 3.46484,2.00195 44.01758,-76.21094 -3.46484,-2.00195 z"
|
||||
id="path4219"
|
||||
inkscape:connector-curvature="0" />
|
||||
<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:none;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;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.00079155;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 369.70703,354.25586 -3.46484,2.00195 44.01758,76.21094 3.46484,-2.00195 -44.01758,-76.21094 z"
|
||||
id="path4221"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 25 KiB |
193
nymea-app/ui/images/thermostat/heating.svg
Normal file
193
nymea-app/ui/images/thermostat/heating.svg
Normal file
@ -0,0 +1,193 @@
|
||||
<?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="96"
|
||||
height="96"
|
||||
id="svg4874"
|
||||
version="1.1"
|
||||
inkscape:version="1.0.1 (1.0.1+r74)"
|
||||
viewBox="0 0 96 96.000001"
|
||||
sodipodi:docname="heating.svg">
|
||||
<defs
|
||||
id="defs4876" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="2.245269"
|
||||
inkscape:cx="90.885132"
|
||||
inkscape:cy="30.463907"
|
||||
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:locked="false"
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:window-width="1380"
|
||||
inkscape:window-height="873"
|
||||
inkscape:window-x="60"
|
||||
inkscape:window-y="27"
|
||||
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:guide
|
||||
position="115,12"
|
||||
orientation="0,1"
|
||||
id="guide4269"
|
||||
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)" />
|
||||
<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;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;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;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:35.0587;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 353.8481,375.62826 c 4.51127,-4.50011 10.73477,-7.28703 17.61131,-7.30539 18.52405,1.03935 26.52722,17.03935 58.53988,24.91256 -1.1e-4,0.003 -0.005,0.0108 -0.008,0.0135 -0.002,0.003 -0.0108,0.008 -0.0135,0.0163 l -0.0163,0.0162 c -0.002,0.003 -0.008,0.0108 -0.008,0.0135 -31.96686,8.06729 -41.25206,24.68467 -58.3512,25.11489 -9.16872,0.0244 -17.19864,-4.88762 -21.58349,-12.22706 2.7374,2.44304 6.26672,3.92073 10.11771,3.91046 1.72033,-0.005 3.37088,-0.32156 4.91812,-0.87026 0.15735,-0.0558 0.31961,-0.10129 0.47482,-0.16223 1.31752,-0.42764 11.44887,-9.69851 27.79203,-15.6935 l 0.0934,-0.003 0.005,-0.0108 0.0135,-0.0108 0.008,-0.008 0.008,-0.008 c -0.008,-0.005 -0.019,-0.0135 -0.0301,-0.0217 0.0108,-0.005 0.019,-0.008 0.0303,-0.0135 l -0.008,-0.008 -0.008,-0.008 -0.0108,-0.0135 -0.003,-0.0108 -0.0934,-0.005 c -17.34846,-5.88391 -26.56285,-15.12908 -27.88283,-15.54974 -0.15573,-0.0598 -0.31801,-0.10427 -0.47558,-0.15952 -1.55041,-0.54039 -3.20262,-0.83993 -4.92291,-0.83536 -3.85099,0.0108 -7.36894,1.49781 -10.09199,3.95553 1.08552,-1.84068 2.3961,-3.53054 3.89995,-5.03048 z"
|
||||
id="path4339"
|
||||
sodipodi:nodetypes="cccccccccscccccccccccccccccsccc" />
|
||||
<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;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;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;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:22.784;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 376.50844,359.07051 c 2.9318,-2.92454 6.97633,-4.73571 11.44527,-4.74764 12.03844,0.67545 17.23956,11.07356 38.044,16.19022 -7e-5,0.002 -0.003,0.007 -0.005,0.009 -10e-4,0.002 -0.007,0.005 -0.009,0.0106 l -0.0106,0.0105 c -0.001,0.002 -0.005,0.007 -0.005,0.009 -20.77468,5.24278 -26.80896,16.04211 -37.92138,16.3217 -5.95859,0.0159 -11.17708,-3.17637 -14.02672,-7.94614 1.77899,1.58769 4.07263,2.54801 6.57532,2.54134 1.11801,-0.003 2.19067,-0.20898 3.19619,-0.56557 0.10226,-0.0363 0.20771,-0.0658 0.30858,-0.10543 0.85623,-0.27792 7.44041,-6.30288 18.06153,-10.19892 l 0.0607,-0.002 0.003,-0.007 0.009,-0.007 0.005,-0.005 0.005,-0.005 c -0.005,-0.003 -0.0123,-0.009 -0.0196,-0.0141 0.007,-0.003 0.0124,-0.005 0.0197,-0.009 l -0.005,-0.005 -0.005,-0.005 -0.007,-0.009 -0.002,-0.007 -0.0607,-0.003 c -11.27445,-3.82384 -17.26271,-9.83211 -18.12055,-10.10549 -0.1012,-0.0389 -0.20666,-0.0678 -0.30907,-0.10367 -1.00758,-0.35119 -2.08132,-0.54586 -3.19931,-0.54289 -2.50268,0.007 -4.78893,0.9734 -6.55859,2.57063 0.70545,-1.19622 1.55718,-2.29443 2.5345,-3.26922 z"
|
||||
id="path852"
|
||||
sodipodi:nodetypes="cccccccccscccccccccccccccccsccc" />
|
||||
<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;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;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;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:22.784;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 376.50844,403.07051 c 2.9318,-2.92454 6.97633,-4.73571 11.44527,-4.74764 12.03844,0.67545 17.23956,11.07356 38.044,16.19022 -7e-5,0.002 -0.003,0.007 -0.005,0.009 -10e-4,0.002 -0.007,0.005 -0.009,0.0106 l -0.0106,0.0105 c -0.001,0.002 -0.005,0.007 -0.005,0.009 -20.77468,5.24278 -26.80896,16.04211 -37.92138,16.3217 -5.95859,0.0159 -11.17708,-3.17637 -14.02672,-7.94614 1.77899,1.58769 4.07263,2.54801 6.57532,2.54134 1.11801,-0.003 2.19067,-0.20898 3.19619,-0.56557 0.10226,-0.0363 0.20771,-0.0658 0.30858,-0.10543 0.85623,-0.27792 7.44041,-6.30288 18.06153,-10.19892 l 0.0607,-0.002 0.003,-0.007 0.009,-0.007 0.005,-0.005 0.005,-0.005 c -0.005,-0.003 -0.0123,-0.009 -0.0196,-0.0141 0.007,-0.003 0.0124,-0.005 0.0197,-0.009 l -0.005,-0.005 -0.005,-0.005 -0.007,-0.009 -0.002,-0.007 -0.0607,-0.003 c -11.27445,-3.82384 -17.26271,-9.83211 -18.12055,-10.10549 -0.1012,-0.0389 -0.20666,-0.0678 -0.30907,-0.10367 -1.00758,-0.35119 -2.08132,-0.54586 -3.19931,-0.54289 -2.50268,0.007 -4.78893,0.9734 -6.55859,2.57063 0.70545,-1.19622 1.55718,-2.29443 2.5345,-3.26922 z"
|
||||
id="path854"
|
||||
sodipodi:nodetypes="cccccccccscccccccccccccccccsccc" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
@ -27,8 +27,10 @@ Item {
|
||||
page = "ButtonDevicePage.qml";
|
||||
} else if (interfaceList.indexOf("weather") >= 0) {
|
||||
page = "WeatherDevicePage.qml";
|
||||
} else if (interfaceList.indexOf("heating") >= 0 || interfaceList.indexOf("thermostat") >= 0) {
|
||||
} else if (interfaceList.indexOf("heating") >= 0) {
|
||||
page = "HeatingDevicePage.qml";
|
||||
} else if (interfaceList.indexOf("thermostat") >= 0) {
|
||||
page = "ThermostatDevicePage.qml";
|
||||
} else if (interfaceList.indexOf("sensor") >= 0) {
|
||||
page = "SensorDevicePage.qml";
|
||||
} else if (interfaceList.indexOf("inputtrigger") >= 0) {
|
||||
|
||||
Reference in New Issue
Block a user