nymea-app/guh-control/ui/magic/NewThingMagicPage.qml

95 lines
3.9 KiB
QML

import QtQuick 2.4
import QtQuick.Controls 2.1
import "../components"
import Guh 1.0
Page {
id: root
property alias text: header.text
property var device: null
readonly property var deviceClass: Engine.deviceManager.deviceClasses.getDeviceClass(device.deviceClassId)
header: GuhHeader {
id: header
onBackPressed: pageStack.pop()
}
ListModel {
id: eventModel
ListElement { interfaceName: "temperaturesensor"; text: "When it's freezing..."; identifier: "freeze"}
ListElement { interfaceName: "battery"; text: "When the device runs out of battery..."; identifier: "lowBattery"}
ListElement { interfaceName: "weather"; text: "When it starts raining..."; identifier: "rain" }
ListElement { interfaceName: "weather"; text: "When it's freezing..."; identifier: "freeze"}
}
ListModel {
id: actionModel
ListElement { interfaceName: "light"; text: "Switch light when..."; identifier: "switchLight"}
ListElement { interfaceName: "dimmablelight"; text: "Dim light when..."; identifier: "dimLight"}
ListElement { interfaceName: "colorlight"; text: "Set light color when..."; identifier: "colorLight" }
ListElement { interfaceName: "mediacontroller"; text: "Pause playback when..."; identifier: "pausePlayback" }
ListElement { interfaceName: "mediacontroller"; text: "Resume playback when..."; identifier: "resumePlayback" }
ListElement { interfaceName: "extendedvolumecontroller"; text: "Set volume..."; identifier: "setVolume" }
ListElement { interfaceName: "extendedvolumecontroller"; text: "Mute when..."; identifier: "mute" }
ListElement { interfaceName: "extendedvolumecontroller"; text: "Unmute when..."; identifier: "unmute" }
ListElement { interfaceName: "notifications"; text: "Notify me when..."; identifier: "notify" }
}
function entrySelected(identifier) {
switch (identifier) {
case "freeze":
var page = pageStack.push(Qt.resolvedUrl("SelectActionPage.qml"), {device: root.device })
page.complete.connect(function() {
print("have action:", page.actions.length)
var rule = {};
rule["name"] = "Freeze in " + root.device.name
var stateEvaluator = {};
var stateDescriptor = {};
stateDescriptor["deviceId"] = root.device.id;
stateDescriptor["operator"] = "ValueOperatorLessOrEqual";
stateDescriptor["stateTypeId"] = root.deviceClass.stateTypes.findByName("temperature").id;
stateDescriptor["value"] = 0;
stateEvaluator["stateDescriptor"] = stateDescriptor;
rule["stateEvaluator"] = stateEvaluator;
rule["actions"] = page.actions;
Engine.ruleManager.addRule(rule);
pageStack.pop(root);
})
}
}
onDeviceClassChanged: {
actualModel.clear()
print("device supports interfaces", deviceClass.interfaces)
for (var i = 0; i < eventModel.count; i++) {
print("event is for interface", eventModel.get(i).interfaceName)
if (deviceClass.interfaces.indexOf(eventModel.get(i).interfaceName) >= 0) {
actualModel.append(eventModel.get(i))
}
}
print("huh")
for (var i = 0; i < actionModel.count; i++) {
print("action is for interface", actionModel.get(i).interfaceName)
if (deviceClass.interfaces.indexOf(actionModel.get(i).interfaceName) >= 0) {
actualModel.append(actionModel.get(i))
}
}
}
ListView {
anchors.fill: parent
model: ListModel {
id: actualModel
}
delegate: ItemDelegate {
width: parent.width
text: model.text
onClicked: root.entrySelected(model.identifier)
}
}
}