This repository has been archived on 2026-05-31. You can view files and clone it, but cannot push or open issues or pull requests.
2023-03-02 23:30:24 +01:00

301 lines
11 KiB
QML

import QtQuick 2.3
import QtQuick.Layouts 1.2
import QtQuick.Controls 2.2
import Nymea 1.0
import Nymea.AirConditioning 1.0
import "qrc:/ui/components"
import "qrc:/ui/delegates"
SettingsPageBase {
id: zoneThingsPage
title: qsTr("Things in zone %1").arg(zone.name)
property AirConditioningManager acManager: null
property ZoneInfo zone: null
ZoneInfoWrapper {
id: zoneWrapper
zone: zoneThingsPage.zone
}
busy: d.pendingCommandId != -1
QtObject {
id: d
property int pendingCommandId: -1
}
Connections {
target: acManager
onSetZoneNameReply: {
if (commandId == d.pendingCommandId) {
d.pendingCommandId = -1
}
}
}
SettingsPageSectionHeader {
text: qsTr("Thermostats")
}
Repeater {
model: zoneWrapper.thermostats
delegate: ThingDelegate {
Layout.fillWidth: true
thing: zoneWrapper.thermostats.get(index)
progressive: false
canDelete: true
onDeleteClicked: {
acManager.removeZoneThermostat(zone.id, thing.id)
}
}
}
Button {
Layout.fillWidth: true
Layout.margins: Style.margins
text: qsTr("Add thermostat")
onClicked: {
var page = pageStack.push(selectThingComponent, {
acManager: acManager,
zone: zone,
interfaces: ["thermostat"],
hiddenThingIds: zone.thermostats,
title: qsTr("Add thermostats"),
placeHolderTitle: qsTr("No thermostats installed"),
placeHolderText: qsTr("Before a thermostat can be assigned to this zone, it needs to be connected to nymea."),
placeHolderButtonText: qsTr("Setup thermostats"),
placeHolderFilterInterface: "thermostat"
})
page.selected.connect(function(thingId) {
acManager.addZoneThermostat(zone.id, thingId)
})
}
}
SettingsPageSectionHeader {
text: qsTr("Window sensors")
}
Repeater {
model: zoneWrapper.windowSensors
delegate: ThingDelegate {
Layout.fillWidth: true
thing: zoneWrapper.windowSensors.get(index)
progressive: false
canDelete: true
onDeleteClicked: {
acManager.removeZoneWindowSensor(zone.id, thing.id)
}
}
}
Button {
Layout.fillWidth: true
Layout.margins: Style.margins
text: qsTr("Add window sensor")
onClicked: {
var page = pageStack.push(selectThingComponent, {
acManager: acManager,
zone: zone,
interfaces: ["closablesensor"],
hiddenThingIds: zone.windowSensors,
title: qsTr("Add window sensors"),
placeHolderTitle: qsTr("No window sensors installed"),
placeHolderText: qsTr("Before a window sensor can be assigned to this zone, it needs to be connected to nymea."),
placeHolderButtonText: qsTr("Setup window sensor"),
placeHolderFilterInterface: "closablesensor"
})
page.selected.connect(function(thingId) {
acManager.addZoneWindowSensor(zone.id, thingId)
})
}
}
SettingsPageSectionHeader {
text: qsTr("Indoor sensors")
}
Repeater {
model: zoneWrapper.indoorSensors
delegate: ThingDelegate {
Layout.fillWidth: true
thing: zoneWrapper.indoorSensors.get(index)
progressive: false
canDelete: true
onDeleteClicked: {
acManager.removeZoneIndoorSensor(zone.id, thing.id)
}
}
}
Button {
Layout.fillWidth: true
Layout.margins: Style.margins
text: qsTr("Add indoor sensor")
onClicked: {
var page = pageStack.push(selectThingComponent, {
acManager: acManager,
zone: zone,
interfaces: ["temperaturesensor", "humiditysensor", "vocsensor", "pm25sensor"],
hiddenThingIds: zone.indoorSensors,
title: qsTr("Add indoor sensors"),
placeHolderTitle: qsTr("No sensors installed"),
placeHolderText: qsTr("Before a sensor be assigned to this zone, it needs to be connected to nymea."),
placeHolderButtonText: qsTr("Setup sensors"),
placeHolderFilterInterface: "sensor"
})
page.selected.connect(function(thingId) {
acManager.addZoneIndoorSensor(zone.id, thingId)
})
}
}
// SettingsPageSectionHeader {
// text: qsTr("Outdoor sensors")
// }
// Repeater {
// model: zoneWrapper.outdoorSensors
// delegate: ThingDelegate {
// Layout.fillWidth: true
// thing: zoneWrapper.outdoorSensors.get(index)
// progressive: false
// canDelete: true
// onDeleteClicked: {
// acManager.removeZoneOutdoorSensor(zone.id, thing.id)
// }
// }
// }
// Button {
// Layout.fillWidth: true
// Layout.margins: Style.margins
// text: qsTr("Add outdoor sensor")
// onClicked: {
// var page = pageStack.push(selectThingComponent, {
// acManager: acManager,
// zone: zone,
// interfaces: ["temperaturesensor", "humiditysensor", "vocsensor", "pm25sensor"],
// hiddenThingIds: zone.outdoorSensors,
// title: qsTr("Select outdoor sensors"),
// placeHolderTitle: qsTr("No sensors installed"),
// placeHolderText: qsTr("Before a sensor be assigned to this zone, it needs to be connected to nymea."),
// placeHolderButtonText: qsTr("Setup sensors"),
// placeHolderFilterInterface: "sensor"
// })
// page.selected.connect(function(thingId) {
// acManager.addZoneOutdoorSensor(zone.id, thingId)
// })
// }
// }
SettingsPageSectionHeader {
text: qsTr("Notifications")
}
Repeater {
model: zoneWrapper.notifications
delegate: ThingDelegate {
Layout.fillWidth: true
thing: zoneWrapper.notifications.get(index)
progressive: false
canDelete: true
onDeleteClicked: {
acManager.removeZoneNotification(zone.id, thing.id)
}
}
}
Button {
Layout.fillWidth: true
Layout.margins: Style.margins
text: qsTr("Add notification target")
onClicked: {
var page = pageStack.push(selectThingComponent, {
acManager: acManager,
zone: zone,
interfaces: ["notifications"],
hiddenThingIds: zone.outdoorSensors,
title: qsTr("Select notification target"),
placeHolderTitle: qsTr("No notification things installed"),
placeHolderText: qsTr("Before a notification target can be assigned to this zone, it needs to be connected to nymea."),
placeHolderButtonText: qsTr("Setup notification targets"),
placeHolderFilterInterface: "notifications"
})
page.selected.connect(function(thingId) {
acManager.addZoneNotification(zone.id, thingId)
})
}
}
Component {
id: selectThingComponent
SettingsPageBase {
id: selectThingPage
busy: d.pendingCommandId != -1
property AirConditioningManager acManager: null
property ZoneInfo zone: null
property var interfaces: []
property var hiddenThingIds: []
property alias placeHolderTitle: placeHolder.title
property alias placeHolderText: placeHolder.text
property alias placeHolderButtonText: placeHolder.buttonText
property string placeHolderFilterInterface: ""
signal selected(var thingId)
QtObject {
id: d
property int pendingCommandId: -1
}
Connections {
target: acManager
onSetZoneThingsReply: {
if (commandId == d.pendingCommandId) {
d.pendingCommandId = -1
}
pageStack.pop();
}
}
Repeater {
model: ThingsProxy {
id: thingsProxy
engine: _engine
shownInterfaces: selectThingPage.interfaces
hiddenThingIds: selectThingPage.hiddenThingIds
}
delegate: ThingDelegate {
Layout.fillWidth: true
thing: thingsProxy.get(index)
progressive: false
onClicked: selectThingPage.selected(thing.id)
}
}
Item {
visible: thingsProxy.count == 0
width: selectThingPage.width
height: selectThingPage.height - selectThingPage.header.height
EmptyViewPlaceholder {
id: placeHolder
anchors.centerIn: parent
width: parent.width - app.margins * 2
imageSource: app.interfaceToIcon(selectThingPage.placeHolderFilterInterface)
buttonText: qsTr("Add things")
onButtonClicked: {
pageStack.push("/ui/thingconfiguration/NewThingPage.qml", {filterInterface: selectThingPage.placeHolderFilterInterface})
}
}
}
}
}
}