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.

172 lines
5.6 KiB
QML

import QtQuick 2.5
import QtQuick.Controls 2.1
import QtQuick.Layouts 1.1
import Nymea 1.0
import "../components"
import "../customviews"
Page {
id: root
property var device: null
property var stateType: null
readonly property bool canShowGraph: {
switch (root.stateType.type) {
case "Int":
case "Double":
return true;
}
print("not showing graph for", root.stateType.type)
return false;
}
header: GuhHeader {
text: qsTr("History")
onBackPressed: pageStack.pop()
}
LogsModel {
id: logsModel
engine: _engine
deviceId: root.device.id
live: true
Component.onCompleted: update()
typeIds: [root.stateType.id]
}
// LogsModelNg {
// id: logsModelNg
// deviceId: root.device.id
// typeId: root.stateType.id
// startTime: {
// var date = new Date();
// date.setHours(new Date().getHours() - 24)
// return date;
// }
// endTime: new Date();
// }
ColumnLayout {
anchors.fill: parent
TabBar {
id: tabBar
Layout.fillWidth: true
visible: root.canShowGraph
TabButton {
text: qsTr("Log")
}
TabButton {
text: qsTr("Graph")
}
}
SwipeView {
id: swipeView
Layout.fillWidth: true
Layout.fillHeight: true
currentIndex: tabBar.currentIndex
interactive: false
GenericTypeLogView {
id: logView
width: swipeView.width
height: swipeView.height
text: qsTr("%1, %2 has changed %3 times in the last %4 days").arg(device.name).arg(stateType.displayName)
logsModel: logsModel
onAddRuleClicked: {
var rule = engine.ruleManager.createNewRule();
var stateEvaluator = rule.createStateEvaluator();
stateEvaluator.stateDescriptor.deviceId = device.id;
stateEvaluator.stateDescriptor.stateTypeId = root.stateType.id;
stateEvaluator.stateDescriptor.value = value;
stateEvaluator.stateDescriptor.valueOperator = StateDescriptor.ValueOperatorEquals;
rule.setStateEvaluator(stateEvaluator);
rule.name = root.device.name + " - " + stateType.displayName + " = " + value;
var rulePage = pageStack.push(Qt.resolvedUrl("../magic/DeviceRulesPage.qml"), {device: root.device});
rulePage.addRule(rule);
}
}
ColumnLayout {
width: swipeView.width
height: swipeView.height
TabBar {
id: zoomTabBar
Layout.fillWidth: true
TabButton {
text: qsTr("6 h")
property int avg: ValueLogsProxyModel.AverageQuarterHour
property date startTime: {
var date = new Date();
date.setHours(new Date().getHours() - 6)
date.setMinutes(0)
date.setSeconds(0)
return date;
}
}
TabButton {
text: qsTr("24 h")
property int avg: ValueLogsProxyModel.AverageHourly
property date startTime: {
var date = new Date();
date.setHours(new Date().getHours() - 24);
date.setMinutes(0)
date.setSeconds(0)
return date;
}
}
TabButton {
text: qsTr("7 d")
property int avg: ValueLogsProxyModel.AverageDayTime
property date startTime: {
var date = new Date();
date.setDate(new Date().getDate() - 7);
date.setHours(0)
date.setMinutes(0)
date.setSeconds(0)
return date;
}
}
}
Graph {
Layout.fillWidth: true
Layout.fillHeight: true
mode: settings.graphStyle
color: app.accentColor
Timer {
id: updateTimer
interval: 10
repeat: false
onTriggered: {
graphModel.update()
}
}
model: ValueLogsProxyModel {
id: graphModel
deviceId: root.device.id
typeIds: [stateType.id]
average: zoomTabBar.currentItem.avg
startTime: zoomTabBar.currentItem.startTime
Component.onCompleted: updateTimer.start();
onAverageChanged: updateTimer.start()
onStartTimeChanged: updateTimer.start();
// Live doesn't work yet with ValueLogsProxyModel
// live: true
}
}
}
}
}
}