Skip to content

Commit 6781ac8

Browse files
authored
Dynamically retrieve the max heater temperatures for numpads (#199)
* Dynamically retrieve the max heater temperatures for numpads * Del unused import * Add same logic to tune page, disconnect previouslly connected signals * Conform to the new logging strategy * Del unused vars
1 parent ef8d728 commit 6781ac8

2 files changed

Lines changed: 84 additions & 35 deletions

File tree

BlocksScreen/lib/panels/controlTab.py

Lines changed: 44 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from __future__ import annotations
2-
32
import re
43
import typing
54
from functools import partial
5+
import logging
66

77
from helper_methods import normalize
88
from lib.moonrakerComm import MoonWebSocket
@@ -18,6 +18,9 @@
1818
from PyQt6 import QtCore, QtGui, QtWidgets
1919

2020

21+
_logger = logging.getLogger(__name__)
22+
23+
2124
class ControlTab(QtWidgets.QStackedWidget):
2225
"""Printer Control Stacked Widget"""
2326

@@ -252,24 +255,6 @@ def __init__(
252255
self.numpadPage.request_back.connect(self.request_back_button)
253256
self.addWidget(self.numpadPage)
254257

255-
self.panel.extruder_temp_display.clicked.connect(
256-
lambda: self.request_numpad[str, int, "PyQt_PyObject", int, int].emit(
257-
"Extruder Temperature",
258-
int(round(float(self.panel.extruder_temp_display.secondary_text))),
259-
self.on_numpad_change,
260-
0,
261-
370, # TODO: Get this value from printer objects
262-
)
263-
)
264-
self.panel.bed_temp_display.clicked.connect(
265-
lambda: self.request_numpad[str, int, "PyQt_PyObject", int, int].emit(
266-
"Bed Temperature",
267-
int(round(float(self.panel.bed_temp_display.secondary_text))),
268-
self.on_numpad_change,
269-
0,
270-
120, # TODO: Get this value from printer objects
271-
)
272-
)
273258
self.request_numpad[str, int, "PyQt_PyObject", int, int].connect(
274259
self.on_numpad_request
275260
)
@@ -304,6 +289,8 @@ def __init__(
304289
self.printer.fan_update[str, str, float].connect(self.on_fan_object_update)
305290
self.printer.fan_update[str, str, int].connect(self.on_fan_object_update)
306291

292+
self.printer.printer_config.connect(self.on_printer_config)
293+
307294
def _handle_z_tilt_object_update(self, value, state):
308295
if state:
309296
self.call_load_panel.emit(False, "")
@@ -470,6 +457,44 @@ def _handle_gcode_response(self, messages: list):
470457
f"Retries: {retries_done}/{retries_total} | Range: {probed_range:.6f} | Tolerance: {tolerance:.6f}",
471458
)
472459

460+
@QtCore.pyqtSlot(dict, name="printer_config")
461+
def on_printer_config(self, config: dict) -> None:
462+
"""Slot that receives the full printer configuration,
463+
464+
Additionally, this method configures the signal connections
465+
between controllable heaters and numpad calls
466+
"""
467+
try:
468+
self.panel.extruder_temp_display.clicked.disconnect()
469+
self.panel.bed_temp_display.clicked.disconnect()
470+
except Exception:
471+
_logger.debug("Signals were not connected")
472+
extruder = config.get("extruder", None) or {}
473+
bed = config.get("heater_bed", None) or {}
474+
e_min_temp = extruder.get("min_temp", 0)
475+
e_max_temp = extruder.get("max_temp", 300)
476+
b_max_temp = bed.get("max_temp", 100)
477+
b_min_temp = bed.get("min_temp", 0)
478+
# Configure numpads
479+
self.panel.extruder_temp_display.clicked.connect(
480+
lambda: self.request_numpad[str, int, "PyQt_PyObject", int, int].emit(
481+
"Extruder Temperature",
482+
int(round(float(self.panel.extruder_temp_display.secondary_text))),
483+
self.on_numpad_change,
484+
int(e_min_temp),
485+
int(e_max_temp),
486+
)
487+
)
488+
self.panel.bed_temp_display.clicked.connect(
489+
lambda: self.request_numpad[str, int, "PyQt_PyObject", int, int].emit(
490+
"Bed Temperature",
491+
int(round(float(self.panel.bed_temp_display.secondary_text))),
492+
self.on_numpad_change,
493+
int(b_min_temp),
494+
int(b_max_temp),
495+
)
496+
)
497+
473498
def handle_ztilt(self):
474499
"""Handle Z-Tilt Adjustment"""
475500
self.call_load_panel.emit(True, "Please wait, performing Z-axis calibration.")

BlocksScreen/lib/panels/widgets/tunePage.py

Lines changed: 40 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import re
22
import typing
3+
import logging
34

45
from helper_methods import normalize
56
from lib.utils.blocks_button import BlocksCustomButton
@@ -8,6 +9,9 @@
89
from PyQt6 import QtCore, QtGui, QtWidgets
910

1011

12+
_logger = logging.getLogger(__name__)
13+
14+
1115
class TuneWidget(QtWidgets.QWidget):
1216
request_back: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal(
1317
name="request_back_page"
@@ -45,31 +49,51 @@ def __init__(self, parent) -> None:
4549
self.sensors_menu_btn.clicked.connect(self.request_sensorsPage.emit)
4650
self.tune_babystep_menu_btn.clicked.connect(self.request_bbpPage.emit)
4751
self.tune_back_btn.clicked.connect(self.request_back)
48-
self.bed_display.clicked.connect(
49-
lambda: self.request_numpad[str, int, "PyQt_PyObject", int, int].emit(
50-
"Bed",
51-
int(round(self.bed_target)),
52-
self.on_numpad_change,
53-
0,
54-
120, # TODO: Get this value from printer objects
52+
self.speed_display.clicked.connect(
53+
lambda: self.request_sliderPage[str, int, "PyQt_PyObject", int, int].emit(
54+
"Speed",
55+
int(self.speed_factor_override * 100),
56+
self.on_slider_change,
57+
10,
58+
300,
5559
)
5660
)
61+
62+
@QtCore.pyqtSlot(dict, name="printer_config")
63+
def on_printer_config(self, config: dict) -> None:
64+
"""Slot that receives the full printer configuration,
65+
66+
Additionally, this method configures the signal connections
67+
between controllable heaters and numpad calls
68+
"""
69+
try:
70+
self.extruder_display.clicked.disconnect()
71+
self.bed_display.clicked.disconnect()
72+
except Exception:
73+
_logger.debug("Signals were not connected")
74+
extruder = config.get("extruder", None) or {}
75+
bed = config.get("heater_bed", None) or {}
76+
e_min_temp = extruder.get("min_temp", 0)
77+
e_max_temp = extruder.get("max_temp", 300)
78+
b_max_temp = bed.get("max_temp", 100)
79+
b_min_temp = bed.get("min_temp", 0)
80+
# Configure numpads
5781
self.extruder_display.clicked.connect(
5882
lambda: self.request_numpad[str, int, "PyQt_PyObject", int, int].emit(
5983
"Extruder",
6084
int(round(self.extruder_target)),
6185
self.on_numpad_change,
62-
0,
63-
300, # TODO: Get this value from printer objects
86+
int(e_min_temp),
87+
int(e_max_temp),
6488
)
6589
)
66-
self.speed_display.clicked.connect(
67-
lambda: self.request_sliderPage[str, int, "PyQt_PyObject", int, int].emit(
68-
"Speed",
69-
int(self.speed_factor_override * 100),
70-
self.on_slider_change,
71-
10,
72-
300,
90+
self.bed_display.clicked.connect(
91+
lambda: self.request_numpad[str, int, "PyQt_PyObject", int, int].emit(
92+
"Bed",
93+
int(round(self.bed_target)),
94+
self.on_numpad_change,
95+
int(b_min_temp),
96+
int(b_max_temp),
7397
)
7498
)
7599

0 commit comments

Comments
 (0)