157 lines
5.8 KiB
Python
157 lines
5.8 KiB
Python
# External Dependencies v####################################
|
|
import sys
|
|
from PySide6.QtWidgets import (QApplication,
|
|
QMainWindow,
|
|
QWidget,
|
|
QVBoxLayout,
|
|
QProgressBar,
|
|
QPushButton)
|
|
from PySide6.QtCore import (Qt,
|
|
QTimer,
|
|
QThreadPool)
|
|
from PySide6.QtGui import QIcon
|
|
## Internal Imports #########################################
|
|
import resources
|
|
import common
|
|
from MessageHandler import MessageHandler
|
|
## Platform Imports #########################################
|
|
import globals
|
|
if globals.os == "Windows":
|
|
from LiquidCTL_Helper_Windows import LiquidCTL_Helper
|
|
from styles import Labels_Windows as Labels
|
|
import win32mica
|
|
import darkdetect
|
|
elif globals.os == "Linux":
|
|
from LiquidCTL_Helper_Linux import LiquidCTL_Helper
|
|
from styles import Labels_Linux as Labels
|
|
from pathlib import Path
|
|
|
|
|
|
class MainWindow(QMainWindow):
|
|
""" Main application window. """
|
|
|
|
def __init__(self, lctl):
|
|
super(MainWindow, self).__init__()
|
|
self.setWindowTitle("LiquidGUI (v.1.2.0.0)")
|
|
self.setFixedSize(450, 500)
|
|
|
|
self.lctl = lctl
|
|
|
|
# Widgets ##########################################
|
|
self.lbl_device_name = Labels.MainLabel()
|
|
|
|
self.lbl_temp = Labels.SubLabel(value="💧 Liquid Temperature:")
|
|
self.min_max_cur_temp = common.MinMaxCurrent()
|
|
self.prg_temp = QProgressBar(textVisible=False,
|
|
minimum=0,
|
|
maximum=50)
|
|
self.lbl_value_prg_temp = Labels.SubLabelValue()
|
|
|
|
self.lbl_fanspeed = Labels.SubLabel(value="🍃 Fan Speed:")
|
|
self.min_max_cur_fanspeed = common.MinMaxCurrent()
|
|
self.prg_fanspeed = QProgressBar(textVisible=False,
|
|
minimum=520,
|
|
maximum=1700)
|
|
self.lbl_value_prg_fanspeed = Labels.SubLabelValue()
|
|
|
|
self.lbl_pumpspeed = Labels.SubLabel(value="⛽ Pump Speed:")
|
|
self.min_max_cur_pumpspeed = common.MinMaxCurrent()
|
|
self.prg_pumpspeed = QProgressBar(textVisible=False,
|
|
minimum=1900,
|
|
maximum=2700)
|
|
self.lbl_value_prg_pumpspeed = Labels.SubLabelValue()
|
|
self.btn_reset_min_max = QPushButton("Reset Min/Max")
|
|
self.btn_reset_min_max.clicked.connect(self.on_reset_min_max)
|
|
|
|
self.lbl_fwvers = Labels.SubLabelValue()
|
|
|
|
# Layout ##########################################
|
|
widget = QWidget(self)
|
|
layout = QVBoxLayout(widget)
|
|
layout.addWidget(self.lbl_device_name)
|
|
layout.addWidget(self.lbl_temp)
|
|
layout.addWidget(self.prg_temp)
|
|
layout.addWidget(self.lbl_value_prg_temp)
|
|
layout.addWidget(self.lbl_fanspeed)
|
|
layout.addWidget(self.prg_fanspeed)
|
|
layout.addWidget(self.lbl_value_prg_fanspeed)
|
|
layout.addWidget(self.lbl_pumpspeed)
|
|
layout.addWidget(self.prg_pumpspeed)
|
|
layout.addWidget(self.lbl_value_prg_pumpspeed)
|
|
layout.addWidget(self.lbl_fwvers)
|
|
layout.addWidget(self.btn_reset_min_max)
|
|
|
|
layout.setSpacing(10)
|
|
|
|
self.setLayout(layout)
|
|
self.setCentralWidget(widget)
|
|
self.setContentsMargins(20, 20, 20, 20)
|
|
|
|
# Threading #######################################
|
|
self.thread_manager = QThreadPool()
|
|
|
|
self.timer = QTimer()
|
|
self.timer.setInterval(1000)
|
|
self.timer.timeout.connect(lambda: self.thread_manager.start(self.lctl.Update))
|
|
self.timer.timeout.connect(self.update_widgets)
|
|
self.timer.start()
|
|
|
|
def on_reset_min_max(self):
|
|
""" Pauses the timer and creates new instances of MinMaxCurrent """
|
|
self.timer.stop()
|
|
self.min_max_cur_temp = common.MinMaxCurrent()
|
|
self.min_max_cur_fanspeed = common.MinMaxCurrent()
|
|
self.min_max_cur_pumpspeed = common.MinMaxCurrent()
|
|
self.timer.start()
|
|
|
|
def update_widgets(self):
|
|
""" Update widgets using LiquidCTL library."""
|
|
self.lbl_device_name.setText(self.lctl.device_name)
|
|
self.prg_temp.setValue(self.lctl.device_temp)
|
|
self.lbl_value_prg_temp.setText(
|
|
self.min_max_cur_temp.builder(
|
|
self.lctl.device_temp, "°C"))
|
|
self.prg_fanspeed.setValue(self.lctl.device_fanSpeed)
|
|
self.lbl_value_prg_fanspeed.setText(
|
|
self.min_max_cur_fanspeed.builder(
|
|
self.lctl.device_fanSpeed, " rpm"))
|
|
self.prg_pumpspeed.setValue(self.lctl.device_pumpSpeed)
|
|
self.lbl_value_prg_pumpspeed.setText(
|
|
self.min_max_cur_pumpspeed.builder(
|
|
self.lctl.device_pumpSpeed, " rpm"))
|
|
if self.lctl.device_fwVers is not None:
|
|
self.lbl_fwvers.setText(f"Firmware: v{self.lctl.device_fwVers}")
|
|
|
|
|
|
def main():
|
|
""" Initialize application and setup window parameters. """
|
|
app = QApplication(sys.argv)
|
|
window = MainWindow(LiquidCTL_Helper())
|
|
|
|
if globals.os == "Windows":
|
|
window.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)
|
|
icon = QIcon(":/icons/LiquidGUI.ico")
|
|
|
|
if darkdetect.isDark():
|
|
win32mica.ApplyMica(window.winId(), win32mica.MICAMODE.DARK)
|
|
elif darkdetect.isLight():
|
|
win32mica.ApplyMica(window.winId(), win32mica.MICAMODE.LIGHT)
|
|
|
|
elif globals.os == "Linux":
|
|
app.setDesktopFileName("LiquidGUI")
|
|
icon = QIcon(":/icons/LiquidGUI.png")
|
|
|
|
app.setWindowIcon(icon)
|
|
|
|
# Show error and quit app if no devices are found
|
|
if window.lctl.TestConnectionState():
|
|
MessageHandler().ShowNoDevicesFoundError()
|
|
sys.exit(1)
|
|
else:
|
|
window.show()
|
|
app.exec()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|