Skip to content

Commit c7fd6b6

Browse files
Robert0MartRoberto
authored andcommitted
Refactor: refactor on_fan_object_update
1 parent aa03b9e commit c7fd6b6

File tree

1 file changed

+67
-56
lines changed

1 file changed

+67
-56
lines changed

BlocksScreen/lib/panels/controlTab.py

Lines changed: 67 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from lib.panels.widgets.printcorePage import SwapPrintcorePage
1010
from lib.panels.widgets.probeHelperPage import ProbeHelper
1111
from lib.printer import Printer
12-
from lib.ui.controlStackedWidget_ui import Ui_controlStackedWidget
12+
from lib.ui.controlStackedWidget_ui import Ui_controlStackedWidget
1313
from PyQt6 import QtCore, QtGui, QtWidgets
1414

1515
from lib.panels.widgets.popupDialogWidget import Popup
@@ -19,6 +19,7 @@
1919
from lib.panels.widgets.optionCardWidget import OptionCard
2020
from helper_methods import normalize
2121

22+
2223
class ControlTab(QtWidgets.QStackedWidget):
2324
"""Printer Control Stacked Widget"""
2425

@@ -84,7 +85,7 @@ def __init__(
8485
self.sliderPage = SliderPage(self)
8586
self.addWidget(self.sliderPage)
8687
self.sliderPage.request_back.connect(self.back_button)
87-
88+
8889
self.probe_helper_page.request_page_view.connect(
8990
partial(self.change_page, self.indexOf(self.probe_helper_page))
9091
)
@@ -282,72 +283,84 @@ def __init__(
282283
self.panel.cooldown_btn.hide()
283284
self.panel.cp_switch_print_core_btn.hide()
284285

285-
self.printer.fan_update[str, str, float].connect(
286-
self.on_fan_object_update
287-
)
288-
self.printer.fan_update[str, str, int].connect(
289-
self.on_fan_object_update
290-
)
286+
self.printer.fan_update[str, str, float].connect(self.on_fan_object_update)
287+
self.printer.fan_update[str, str, int].connect(self.on_fan_object_update)
291288

292289
@QtCore.pyqtSlot(str, str, float, name="on_fan_update")
293290
@QtCore.pyqtSlot(str, str, int, name="on_fan_update")
294291
def on_fan_object_update(
295292
self, name: str, field: str, new_value: int | float
296293
) -> None:
297-
"""Slot Method that receives information from fan objects
294+
"""Slot that receives updates from fan objects.
298295
299296
Args:
300-
name (str): fan object name
301-
field (str): field name
302-
new_value (int | float): New value for field name
297+
name (str): Fan object name
298+
field (str): Field name
299+
new_value (int | float): New value for the field
303300
"""
304-
if "speed" in field:
305-
if not self.tune_display_buttons.get(name, None):
306-
if name in ("fan", "fan_generic"):
307-
if "blower" in name.lower():
308-
_icon = QtGui.QPixmap(
309-
":/temperature_related/media/btn_icons/blower.svg"
310-
)
311-
else:
312-
_icon = QtGui.QPixmap(":/temperature_related/media/btn_icons/fan.svg")
313-
314-
_card = OptionCard(self, name, str(name), _icon) # type: ignore
315-
_card.setObjectName(str(name))
316-
self.card_options.update({str(name): _card})
317-
self.panel.fans_content_layout.addWidget(_card)
318-
319-
if not hasattr(self.card_options.get(name), "continue_clicked"):
320-
del _card
321-
self.card_options.pop(name)
322-
return
323-
324-
self.card_options.get(name).setMode(True)
325-
self.card_options.get(name).secondtext.setText(f"{new_value}%")
326-
self.card_options.get(name).continue_clicked.connect(
327-
lambda: self.on_slidePage_request(
328-
str(name),
329-
self.card_options.get(name).secondtext.text().replace("%", ""),
330-
self.on_slider_change,
331-
0,
332-
100,
333-
)
334-
)
335-
self.tune_display_buttons[name] = self.card_options.get(name) #{self.card_options.get(name),True,self.card_options.get(name).secondtext.text().replace("%", "")}
301+
if "speed" not in field:
302+
return
336303

304+
# Check if this fan already has a display button
305+
fan_card = self.tune_display_buttons.get(name)
337306

338-
self.card_options.get(name)
339-
self.update()
340-
_display_button = self.tune_display_buttons.get(name)
341-
if not _display_button:
307+
# Create a new card if it doesn't exist
308+
if fan_card is None:
309+
if not name.startswith(("fan", "fan_generic")):
342310
return
343-
_display_button.secondtext.setText(
344-
f"{new_value * 100:.0f}%"
311+
312+
icon_path = (
313+
":/temperature_related/media/btn_icons/blower.svg"
314+
if "blower" in name.lower()
315+
else ":/temperature_related/media/btn_icons/fan.svg"
345316
)
317+
icon = QtGui.QPixmap(icon_path)
318+
if name == "fan_generic Auxiliary_Cooling_Fans":
319+
name = "Auxiliary\ncooling fans"
320+
elif name == "fan_generic CHAMBER_EXHAUST":
321+
name = "Exhaust"
322+
elif name == "fan_generic Part_Cooling_Fan":
323+
name = "Cooling fan"
324+
else:
325+
name = name.removeprefix("fan_generic")
326+
327+
card = OptionCard(self, name, str(name), icon) # type: ignore
328+
card.setObjectName(str(name))
329+
330+
# Add card to layout and record reference
331+
self.card_options[name] = card
332+
self.panel.fans_content_layout.addWidget(card)
333+
334+
# If the card doesn't have expected UI properties, discard it
335+
if not hasattr(card, "continue_clicked"):
336+
del card
337+
self.card_options.pop(name, None)
338+
return
339+
340+
card.setMode(True)
341+
card.secondtext.setText(f"{new_value}%")
342+
card.continue_clicked.connect(
343+
lambda: self.on_slidePage_request(
344+
str(name),
345+
card.secondtext.text().replace("%", ""),
346+
self.on_slider_change,
347+
0,
348+
100,
349+
)
350+
)
351+
352+
self.tune_display_buttons[name] = card
353+
self.update()
354+
fan_card = card # reuse for next section
355+
356+
# Update existing card value display
357+
if fan_card:
358+
# Only multiply by 100 if it seems like a normalized value (0–1)
359+
value_percent = new_value * 100 if new_value <= 1 else new_value
360+
fan_card.secondtext.setText(f"{value_percent:.0f}%")
346361

347362
@QtCore.pyqtSlot(str, int, "PyQt_PyObject", name="on_slidePage_request")
348-
@QtCore.pyqtSlot(
349-
str, int, "PyQt_PyObject", int, int, name="on_slidePage_request"
350-
)
363+
@QtCore.pyqtSlot(str, int, "PyQt_PyObject", int, int, name="on_slidePage_request")
351364
def on_slidePage_request(
352365
self,
353366
name: str,
@@ -363,7 +376,6 @@ def on_slidePage_request(
363376
self.sliderPage.set_slider_maximum(max_value)
364377
self.change_page(self.indexOf(self.sliderPage))
365378

366-
367379
@QtCore.pyqtSlot(str, int, name="on_slider_change")
368380
def on_slider_change(self, name: str, new_value: int) -> None:
369381
if "speed" in name.lower():
@@ -397,9 +409,8 @@ def create_display_button(self, name: str) -> DisplayButton:
397409
font.setPointSize(16)
398410
display_button.setFont(font)
399411
return display_button
400-
401-
def handle_printcoreupdate(self, value:dict):
402412

413+
def handle_printcoreupdate(self, value: dict):
403414
if value["swapping"] == "idle":
404415
return
405416

0 commit comments

Comments
 (0)