95 lines
3.9 KiB
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)
|
|
}
|
|
}
|
|
}
|