WaterLevelSensor/Main.qml

156 lines
4.7 KiB
QML

import QtQuick
import WaterLevelRewrite
import QtQuick.Effects
import QtQuick.Controls
import QtQuick.Controls.Material
Window {
width: 640
height: 1080
visible: true
title: qsTr("Water Level Rewrite")
id: root
property color accent_color: "#F05FAF5F"
property color dark_accent_color: "#FF5F7F5F"
property color danger_color: "#F0AF2F1F"
property color water_color: "#F00F7FAF"
property color background_color: "#1F1F1F"
Material.accent: root.accent_color
property int font_enlarged_text_size: 20
property int font_normal_text_size: 16
property int distance_count_thres: 3
property string mode: "http"
property string status: "Initializing"
Rectangle {
anchors.fill: parent
color: root.background_color
Rectangle {
id: top_bar
height: Math.min(root.height / 12, 100)
width: root.width
anchors {
top: parent.top
horizontalCenter: parent.horizontalCenter
topMargin: 25
}
color: "#0A0F0F0F"
SettingsBarIcon {
height: top_bar.height - 20
width: top_bar.width / 12
anchors {
top: parent.top
left: parent.left
bottomMargin: 5
topMargin: 5
leftMargin: 5
}
color: "#0A0F0F0F"
radius: 100
accent_color: root.accent_color
onOpen: {
settings_popup.open()
}
}
}
SettingsPopup {
id: settings_popup
accent_color: root.accent_color
font_enlarged_text_size: 20
function setConfig(new_config: var) {
settings_popup.config.max = new_config.max
settings_popup.config.min = new_config.min
settings_popup.config.alert = new_config.alert
settings_popup.config.url = new_config.url
}
onSaveConfig: (config) => {
console.log("Saving config: ", config)
config_interface.saveConfig(config);
}
}
WaterTank {
id: tank
anchors {
top: top_bar.bottom
horizontalCenter: parent.horizontalCenter
topMargin: 0
}
height: (parent.height - top_bar.height) / 1.2
width: parent.width / 1.2
base_color: root.background_color
distance: 0
tank_lid_color: "#F0121212"
tank_base_color: "#0FFFFFFF"
water_level_color: "#F00F7FAF"
tank_base_border_color: "#F0121212"
min_thres_input: 0
max_thres_input: 0
}
Text {
id: status
text: root.status
anchors {
bottom: connect_button.top
bottomMargin: 20
horizontalCenter: parent.horizontalCenter
}
horizontalAlignment: Text.AlignHCenter
color: root.accent_color
font.pointSize: root.font_normal_text_size
}
ConnectButton {
id: connect_button
height: parent.height / 20
width: parent.width / 4
font_color: root.accent_color
font_enlarged_text_size: root.font_enlarged_text_size
font_normal_text_size: root.font_normal_text_size
color: root.background_color
accent_color: root.accent_color
anchors {
horizontalCenter: parent.horizontalCenter
bottom: parent.bottom
bottomMargin: 50
}
onConnect: {
requester.start();
root.status = "Waiting to Send.";
}
}
}
RequestWorker {
id: requester
onStatusChanged: () => {
root.status = requester.status;
}
onNetworkReply: (water_level, fill_rate, expected) => {
tank.setDistance(water_level);
tank.rate_of_fill = fill_rate;
tank.expected_to_fill = expected;
}
}
ConfigInterface {
id: config_interface
fileName: "config.json"
onConfig: (config) => {
settings_popup.config = config
console.log("Loading initial config");
setConfig(config);
if(root.status === "Initializing") {
root.status = "Waiting to connect.";
}
}
function setConfig(config) {
tank.setConfig(config);
requester.setConfig(config);
}
}
}