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); } } }