diff --git a/BlocksScreen/lib/panels/controlTab.py b/BlocksScreen/lib/panels/controlTab.py index be84c8bc..8df4ab4d 100644 --- a/BlocksScreen/lib/panels/controlTab.py +++ b/BlocksScreen/lib/panels/controlTab.py @@ -1,8 +1,8 @@ from __future__ import annotations - import re import typing from functools import partial +import logging from helper_methods import normalize from lib.moonrakerComm import MoonWebSocket @@ -18,6 +18,9 @@ from PyQt6 import QtCore, QtGui, QtWidgets +_logger = logging.getLogger(__name__) + + class ControlTab(QtWidgets.QStackedWidget): """Printer Control Stacked Widget""" @@ -252,24 +255,6 @@ def __init__( self.numpadPage.request_back.connect(self.request_back_button) self.addWidget(self.numpadPage) - self.panel.extruder_temp_display.clicked.connect( - lambda: self.request_numpad[str, int, "PyQt_PyObject", int, int].emit( - "Extruder Temperature", - int(round(float(self.panel.extruder_temp_display.secondary_text))), - self.on_numpad_change, - 0, - 370, # TODO: Get this value from printer objects - ) - ) - self.panel.bed_temp_display.clicked.connect( - lambda: self.request_numpad[str, int, "PyQt_PyObject", int, int].emit( - "Bed Temperature", - int(round(float(self.panel.bed_temp_display.secondary_text))), - self.on_numpad_change, - 0, - 120, # TODO: Get this value from printer objects - ) - ) self.request_numpad[str, int, "PyQt_PyObject", int, int].connect( self.on_numpad_request ) @@ -304,6 +289,8 @@ def __init__( self.printer.fan_update[str, str, float].connect(self.on_fan_object_update) self.printer.fan_update[str, str, int].connect(self.on_fan_object_update) + self.printer.printer_config.connect(self.on_printer_config) + def _handle_z_tilt_object_update(self, value, state): if state: self.call_load_panel.emit(False, "") @@ -470,6 +457,44 @@ def _handle_gcode_response(self, messages: list): f"Retries: {retries_done}/{retries_total} | Range: {probed_range:.6f} | Tolerance: {tolerance:.6f}", ) + @QtCore.pyqtSlot(dict, name="printer_config") + def on_printer_config(self, config: dict) -> None: + """Slot that receives the full printer configuration, + + Additionally, this method configures the signal connections + between controllable heaters and numpad calls + """ + try: + self.panel.extruder_temp_display.clicked.disconnect() + self.panel.bed_temp_display.clicked.disconnect() + except Exception: + _logger.debug("Signals were not connected") + extruder = config.get("extruder", None) or {} + bed = config.get("heater_bed", None) or {} + e_min_temp = extruder.get("min_temp", 0) + e_max_temp = extruder.get("max_temp", 300) + b_max_temp = bed.get("max_temp", 100) + b_min_temp = bed.get("min_temp", 0) + # Configure numpads + self.panel.extruder_temp_display.clicked.connect( + lambda: self.request_numpad[str, int, "PyQt_PyObject", int, int].emit( + "Extruder Temperature", + int(round(float(self.panel.extruder_temp_display.secondary_text))), + self.on_numpad_change, + int(e_min_temp), + int(e_max_temp), + ) + ) + self.panel.bed_temp_display.clicked.connect( + lambda: self.request_numpad[str, int, "PyQt_PyObject", int, int].emit( + "Bed Temperature", + int(round(float(self.panel.bed_temp_display.secondary_text))), + self.on_numpad_change, + int(b_min_temp), + int(b_max_temp), + ) + ) + def handle_ztilt(self): """Handle Z-Tilt Adjustment""" self.call_load_panel.emit(True, "Please wait, performing Z-axis calibration.") diff --git a/BlocksScreen/lib/panels/printTab.py b/BlocksScreen/lib/panels/printTab.py index 65927aae..aec952cd 100644 --- a/BlocksScreen/lib/panels/printTab.py +++ b/BlocksScreen/lib/panels/printTab.py @@ -268,6 +268,7 @@ def __init__( self.change_page(self.indexOf(self.print_page)) # force set the initial page self.save_config_btn.clicked.connect(self.save_config) self.BasePopup_z_offset.accepted.connect(self.update_configuration_file) + self.printer.printer_config.connect(self.tune_page.on_printer_config) @QtCore.pyqtSlot(str, dict, name="on_print_stats_update") @QtCore.pyqtSlot(str, float, name="on_print_stats_update") diff --git a/BlocksScreen/lib/panels/widgets/tunePage.py b/BlocksScreen/lib/panels/widgets/tunePage.py index 301c5cd1..1b68c2f7 100644 --- a/BlocksScreen/lib/panels/widgets/tunePage.py +++ b/BlocksScreen/lib/panels/widgets/tunePage.py @@ -1,5 +1,6 @@ import re import typing +import logging from helper_methods import normalize from lib.utils.blocks_button import BlocksCustomButton @@ -8,6 +9,9 @@ from PyQt6 import QtCore, QtGui, QtWidgets +_logger = logging.getLogger(__name__) + + class TuneWidget(QtWidgets.QWidget): request_back: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal( name="request_back_page" @@ -45,31 +49,51 @@ def __init__(self, parent) -> None: self.sensors_menu_btn.clicked.connect(self.request_sensorsPage.emit) self.tune_babystep_menu_btn.clicked.connect(self.request_bbpPage.emit) self.tune_back_btn.clicked.connect(self.request_back) - self.bed_display.clicked.connect( - lambda: self.request_numpad[str, int, "PyQt_PyObject", int, int].emit( - "Bed", - int(round(self.bed_target)), - self.on_numpad_change, - 0, - 120, # TODO: Get this value from printer objects + self.speed_display.clicked.connect( + lambda: self.request_sliderPage[str, int, "PyQt_PyObject", int, int].emit( + "Speed", + int(self.speed_factor_override * 100), + self.on_slider_change, + 10, + 300, ) ) + + @QtCore.pyqtSlot(dict, name="printer_config") + def on_printer_config(self, config: dict) -> None: + """Slot that receives the full printer configuration, + + Additionally, this method configures the signal connections + between controllable heaters and numpad calls + """ + try: + self.extruder_display.clicked.disconnect() + self.bed_display.clicked.disconnect() + except Exception: + _logger.debug("Signals were not connected") + extruder = config.get("extruder", None) or {} + bed = config.get("heater_bed", None) or {} + e_min_temp = extruder.get("min_temp", 0) + e_max_temp = extruder.get("max_temp", 300) + b_max_temp = bed.get("max_temp", 100) + b_min_temp = bed.get("min_temp", 0) + # Configure numpads self.extruder_display.clicked.connect( lambda: self.request_numpad[str, int, "PyQt_PyObject", int, int].emit( "Extruder", int(round(self.extruder_target)), self.on_numpad_change, - 0, - 300, # TODO: Get this value from printer objects + int(e_min_temp), + int(e_max_temp), ) ) - self.speed_display.clicked.connect( - lambda: self.request_sliderPage[str, int, "PyQt_PyObject", int, int].emit( - "Speed", - int(self.speed_factor_override * 100), - self.on_slider_change, - 10, - 300, + self.bed_display.clicked.connect( + lambda: self.request_numpad[str, int, "PyQt_PyObject", int, int].emit( + "Bed", + int(round(self.bed_target)), + self.on_numpad_change, + int(b_min_temp), + int(b_max_temp), ) )