From 6700ea1f29abd0a97a9089ff85ac05815e95f3d1 Mon Sep 17 00:00:00 2001 From: Roberto Date: Tue, 20 Jan 2026 11:49:46 +0000 Subject: [PATCH 1/2] Refactor: added single instance of loadScreen on all project bugfix fixed conenctionpage below load page --- BlocksScreen/lib/panels/controlTab.py | 39 +++++-------- BlocksScreen/lib/panels/filamentTab.py | 55 +++++++++---------- BlocksScreen/lib/panels/mainWindow.py | 48 +++++++++++++--- BlocksScreen/lib/panels/printTab.py | 12 +--- BlocksScreen/lib/panels/utilitiesTab.py | 21 +++---- .../lib/panels/widgets/connectionPage.py | 2 + .../lib/panels/widgets/inputshaperPage.py | 15 +---- .../lib/panels/widgets/probeHelperPage.py | 14 +---- BlocksScreen/lib/panels/widgets/updatePage.py | 19 ++----- 9 files changed, 101 insertions(+), 124 deletions(-) diff --git a/BlocksScreen/lib/panels/controlTab.py b/BlocksScreen/lib/panels/controlTab.py index a957bea0..2ab60e83 100644 --- a/BlocksScreen/lib/panels/controlTab.py +++ b/BlocksScreen/lib/panels/controlTab.py @@ -6,8 +6,6 @@ from helper_methods import normalize from lib.moonrakerComm import MoonWebSocket -from lib.panels.widgets.basePopup import BasePopup -from lib.panels.widgets.loadWidget import LoadingOverlayWidget from lib.panels.widgets.numpadPage import CustomNumpad from lib.panels.widgets.optionCardWidget import OptionCard from lib.panels.widgets.popupDialogWidget import Popup @@ -47,6 +45,7 @@ class ControlTab(QtWidgets.QStackedWidget): request_file_info: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal( str, name="request-file-info" ) + call_load_panel = QtCore.pyqtSignal(bool,str,name="call-load-panel") tune_display_buttons: dict = {} card_options: dict = {} @@ -70,6 +69,7 @@ def __init__( self.extruder_info: dict = {} self.bed_info: dict = {} self.toolhead_info: dict = {} + self.ztilt_state = False self.extrude_length: int = 10 self.extrude_feedrate: int = 2 self.extrude_page_message: str = "" @@ -77,15 +77,10 @@ def __init__( self.move_speed: float = 25.0 self.probe_helper_page = ProbeHelper(self) self.addWidget(self.probe_helper_page) + self.probe_helper_page.call_load_panel.connect(self.call_load_panel) self.printcores_page = SwapPrintcorePage(self) self.addWidget(self.printcores_page) - self.loadscreen = BasePopup(self, floating=False, dialog=False) - self.loadwidget = LoadingOverlayWidget( - self, LoadingOverlayWidget.AnimationGIF.DEFAULT - ) - self.loadscreen.add_widget(self.loadwidget) - self.sliderPage = SliderPage(self) self.addWidget(self.sliderPage) self.sliderPage.request_back.connect(self.back_button) @@ -299,8 +294,7 @@ def __init__( def _handle_z_tilt_object_update(self, value, state): if state: self.ztilt_state = state - if self.loadscreen.isVisible(): - self.loadscreen.hide() + self.call_load_panel.emit(False,"") @QtCore.pyqtSlot(str, str, float, name="on_fan_update") @QtCore.pyqtSlot(str, str, int, name="on_fan_update") @@ -425,17 +419,16 @@ def handle_printcoreupdate(self, value: dict): return if value["swapping"] == "in_pos": - self.loadscreen.hide() + self.call_load_panel.emit(False,"") self.printcores_page.show() self.disable_popups.emit(True) self.printcores_page.setText( "Please Insert Print Core \n \n Afterwards click continue" ) if value["swapping"] == "unloading": - self.loadwidget.set_status_message("Unloading print core") - + self.call_load_panel.emit(True,"Unloading print core") if value["swapping"] == "cleaning": - self.loadwidget.set_status_message("Cleaning print core") + self.call_load_panel.emit(True,"Cleaning print core") def _handle_gcode_response(self, messages: list): """Handle gcode response for Z-tilt adjustment""" @@ -458,20 +451,15 @@ def _handle_gcode_response(self, messages: list): probed_range = float(match.group(3)) tolerance = float(match.group(4)) if retries_done == retries_total: - self.loadscreen.hide() + self.call_load_panel.emit(False,"") return + self.call_load_panel.emit(True,f"Retries: {retries_done}/{retries_total} | Range: {probed_range:.6f} | Tolerance: {tolerance:.6f}") - self.loadwidget.set_status_message( - f"Retries: {retries_done}/{retries_total} | Range: {probed_range:.6f} | Tolerance: {tolerance:.6f}" - ) def handle_ztilt(self): """Handle Z-Tilt Adjustment""" - self.loadscreen.show() - self.loadwidget.set_status_message( - "Please wait, performing Z-axis calibration." - ) - self.run_gcode_signal.emit("G28\nM400\nZ_TILT_ADJUST") + self.call_load_panel.emit(True,"Please wait, performing Z-axis calibration.") + self.run_gcode_signal.emit("Z_TILT_ADJUST") @QtCore.pyqtSlot(str, name="on-klippy-status") def on_klippy_status(self, state: str): @@ -487,8 +475,7 @@ def on_klippy_status(self, state: str): def show_swapcore(self): """Show swap printcore""" self.run_gcode_signal.emit("CHANGE_PRINTCORES") - self.loadscreen.show() - self.loadwidget.set_status_message("Preparing to swap print core") + self.call_load_panel.emit(True,"Preparing to swap print core") def handle_swapcore(self): """Handle swap printcore routine finish""" @@ -660,7 +647,7 @@ def on_toolhead_update(self, field: str, values: list) -> None: self.panel.mva_z_value_label.setText(f"{values[2]:.3f}") if values[0] == "252,50" and values[1] == "250" and values[2] == "50": - self.loadscreen.hide + self.call_load_panel.emit(False,"") self.toolhead_info.update({f"{field}": values}) @QtCore.pyqtSlot(str, str, float, name="on-extruder-update") diff --git a/BlocksScreen/lib/panels/filamentTab.py b/BlocksScreen/lib/panels/filamentTab.py index 1271375e..4be0918f 100644 --- a/BlocksScreen/lib/panels/filamentTab.py +++ b/BlocksScreen/lib/panels/filamentTab.py @@ -6,8 +6,6 @@ from lib.filament import Filament from lib.ui.filamentStackedWidget_ui import Ui_filamentStackedWidget -from lib.panels.widgets.loadWidget import LoadingOverlayWidget -from lib.panels.widgets.basePopup import BasePopup from lib.panels.widgets.popupDialogWidget import Popup from PyQt6 import QtCore, QtGui, QtWidgets @@ -19,7 +17,7 @@ class FilamentTab(QtWidgets.QStackedWidget): request_change_page = QtCore.pyqtSignal(int, int, name="request_change_page") request_toolhead_count = QtCore.pyqtSignal(int, name="toolhead_number_received") run_gcode = QtCore.pyqtSignal(str, name="run_gcode") - + call_load_panel = QtCore.pyqtSignal(bool,str,name="call-load-panel") class FilamentTypes(enum.Enum): PLA = Filament(name="PLA", temperature=220) @@ -42,11 +40,6 @@ def __init__(self, parent: QtWidgets.QWidget, printer: Printer, ws, /) -> None: self.target_temp: int = 0 self.current_temp: int = 0 self.popup = Popup(self) - self.loadscreen = BasePopup(self, floating=False, dialog=False) - self.loadwidget = LoadingOverlayWidget( - self, LoadingOverlayWidget.AnimationGIF.DEFAULT - ) - self.loadscreen.add_widget(self.loadwidget) self.has_load_unload_objects = None self._filament_state = self.FilamentStates.UNKNOWN self._sensor_states = {} @@ -130,19 +123,22 @@ def on_extruder_update( """Handle extruder update""" if not self.isVisible: return - - if self.target_temp != 0: - if self.current_temp == self.target_temp: - self.loadwidget.set_status_message("Extruder heated up \n Please wait") - return - if field == "temperature": - self.current_temp = round(new_value, 0) - self.loadwidget.set_status_message( - f"Heating up ({new_value}/{self.target_temp}) \n Please wait" - ) - if field == "target": - self.target_temp = round(new_value, 0) - self.loadwidget.set_status_message("Heating up \n Please wait") + if not self.loadignore or not self.unloadignore: + if self.target_temp != 0: + if self.current_temp == self.target_temp: + if self.isVisible: + self.call_load_panel.emit(True,"Extruder heated up \n Please wait") + return + if field == "temperature": + self.current_temp = round(new_value, 0) + if self.isVisible: + self.call_load_panel.emit(True,f"Heating up ({new_value}/{self.target_temp}) \n Please wait") + if field == "target": + self.target_temp = round(new_value, 0) + if self.isVisible: + self.call_load_panel.emit(True,"Heating up \n Please wait") + + @QtCore.pyqtSlot(bool, name="on_load_filament") def on_load_filament(self, status: bool): @@ -150,14 +146,13 @@ def on_load_filament(self, status: bool): if self.loadignore: self.loadignore = False return - if not self.isVisible: return if status: - self.loadscreen.show() + self.call_load_panel.emit(True,"Loading Filament") else: self.target_temp = 0 - self.loadscreen.hide() + self.call_load_panel.emit(False,"") self._filament_state = self.FilamentStates.LOADED self.handle_filament_state() @@ -167,14 +162,12 @@ def on_unload_filament(self, status: bool): if self.unloadignore: self.unloadignore = False return - if not self.isVisible: return - if status: - self.loadscreen.show() + self.call_load_panel.emit(True,"Unloading Filament") else: - self.loadscreen.hide() + self.call_load_panel.emit(False,"") self.target_temp = 0 self._filament_state = self.FilamentStates.UNLOADED self.handle_filament_state() @@ -197,7 +190,8 @@ def load_filament(self, toolhead: int = 0, temp: int = 220) -> None: message="Filament is already loaded.", ) return - self.loadscreen.show() + self.loadignore = False + self.call_load_panel.emit(True,"Loading Filament") self.run_gcode.emit(f"LOAD_FILAMENT TOOLHEAD=load_toolhead TEMPERATURE={temp}") @QtCore.pyqtSlot(str, int, name="unload_filament") @@ -220,7 +214,8 @@ def unload_filament(self, toolhead: int = 0, temp: int = 220) -> None: return self.find_routine_objects() - self.loadscreen.show() + self.unload_filament = False + self.call_load_panel.emit(True,"Unloading Filament") self.run_gcode.emit(f"UNLOAD_FILAMENT TEMPERATURE={temp}") def handle_filament_state(self): diff --git a/BlocksScreen/lib/panels/mainWindow.py b/BlocksScreen/lib/panels/mainWindow.py index 66627b5e..f23b8c8b 100644 --- a/BlocksScreen/lib/panels/mainWindow.py +++ b/BlocksScreen/lib/panels/mainWindow.py @@ -17,6 +17,8 @@ from lib.printer import Printer from lib.ui.mainWindow_ui import Ui_MainWindow # With header from lib.panels.widgets.updatePage import UpdatePage +from lib.panels.widgets.basePopup import BasePopup +from lib.panels.widgets.loadWidget import LoadingOverlayWidget # from lib.ui.mainWindow_v2_ui import Ui_MainWindow # No header from lib.ui.resources.background_resources_rc import * @@ -63,6 +65,7 @@ class MainWindow(QtWidgets.QMainWindow): on_update_message: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal( dict, name="on-update-message" ) + call_load_panel = QtCore.pyqtSignal(bool,str,name="call-load-panel") def __init__(self): super(MainWindow, self).__init__() @@ -140,6 +143,7 @@ def __init__(self): slot=self.mc.restart_klipper_service ) self.conn_window.reboot_clicked.connect(slot=self.mc.machine_restart) + self.printer_object_report_signal.connect( self.printer.on_object_report_received ) @@ -175,11 +179,47 @@ def __init__(self): self.conn_window.update_button_clicked.connect(self.show_update_page) self.ui.extruder_temp_display.display_format = "upper_downer" self.ui.bed_temp_display.display_format = "upper_downer" + + self.controlPanel.call_load_panel.connect(self.show_LoadScreen) + self.filamentPanel.call_load_panel.connect(self.show_LoadScreen) + self.printPanel.call_load_panel.connect(self.show_LoadScreen) + self.utilitiesPanel.call_load_panel.connect(self.show_LoadScreen) + self.conn_window.call_load_panel.connect(self.show_LoadScreen) + + self.loadscreen = BasePopup(self, floating=False, dialog=False) + self.loadwidget = LoadingOverlayWidget( + self, LoadingOverlayWidget.AnimationGIF.DEFAULT + ) + self.loadscreen.add_widget(self.loadwidget) if self.config.has_section("server"): # @ Start websocket connection with moonraker self.bo_ws_startup.emit() self.reset_tab_indexes() + @QtCore.pyqtSlot(bool, str,name="show-load-page") + def show_LoadScreen(self, show : bool = True , msg: str = ""): + _sender = self.sender() + + if _sender == self.filamentPanel: + if not self.filamentPanel.isVisible(): + return + if _sender == self.controlPanel: + if not self.controlPanel.isVisible(): + return + if _sender == self.printPanel: + if not self.printPanel.isVisible(): + return + if _sender == self.utilitiesPanel: + if not self.utilitiesPanel.isVisible(): + return + + + self.loadwidget.set_status_message(msg) + if show: + self.loadscreen.show() + else: + self.loadscreen.hide() + @QtCore.pyqtSlot(bool, name="show-update-page") def show_update_page(self, fullscreen: bool): """Slot for displaying update Panel""" @@ -365,7 +405,7 @@ def global_change_page(self, tab_index: int, panel_index: int) -> None: "Panel page index expected type int, %s", str(type(panel_index)) ) - self.printPanel.loadscreen.hide() + self.show_LoadScreen(False) current_page = [ self.ui.main_content_widget.currentIndex(), self.current_panel_index(), @@ -575,9 +615,6 @@ def _handle_notify_gcode_response_message(self, method, data, metadata) -> None: message=str(_message), userInput=True, ) - if not self.controlPanel.ztilt_state: - if self.controlPanel.loadscreen.isVisible(): - self.controlPanel.loadscreen.hide() @api_handler def _handle_error_message(self, method, data, metadata) -> None: @@ -599,9 +636,6 @@ def _handle_error_message(self, method, data, metadata) -> None: message=str(text), userInput=True, ) - if not self.controlPanel.ztilt_state: - if self.controlPanel.loadscreen.isVisible(): - self.controlPanel.loadscreen.hide() @api_handler def _handle_notify_cpu_throttled_message(self, method, data, metadata) -> None: diff --git a/BlocksScreen/lib/panels/printTab.py b/BlocksScreen/lib/panels/printTab.py index 6331585a..5458f153 100644 --- a/BlocksScreen/lib/panels/printTab.py +++ b/BlocksScreen/lib/panels/printTab.py @@ -11,7 +11,6 @@ from lib.panels.widgets.confirmPage import ConfirmWidget from lib.panels.widgets.filesPage import FilesPage from lib.panels.widgets.jobStatusPage import JobStatusWidget -from lib.panels.widgets.loadWidget import LoadingOverlayWidget from lib.panels.widgets.numpadPage import CustomNumpad from lib.panels.widgets.sensorsPanel import SensorsWindow from lib.panels.widgets.slider_selector_page import SliderPage @@ -63,6 +62,7 @@ class PrintTab(QtWidgets.QStackedWidget): on_cancel_print: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal( name="on_cancel_print" ) + call_load_panel = QtCore.pyqtSignal(bool,str,name="call-load-panel") _z_offset: float = 0.0 _active_z_offset: float = 0.0 @@ -92,12 +92,6 @@ def __init__( self.numpadPage.request_back.connect(self.back_button) self.addWidget(self.numpadPage) - self.loadscreen = BasePopup(self, floating=False, dialog=False) - self.loadwidget = LoadingOverlayWidget( - self, LoadingOverlayWidget.AnimationGIF.DEFAULT - ) - self.loadscreen.add_widget(self.loadwidget) - self.file_data: Files = file_data self.filesPage_widget = FilesPage(self) self.addWidget(self.filesPage_widget) @@ -372,9 +366,7 @@ def setProperty(self, name: str, value: typing.Any) -> bool: def handle_cancel_print(self) -> None: """Handles the print cancel action""" self.ws.api.cancel_print() - self.loadscreen.show() - self.loadscreen.setModal(True) - self.loadwidget.set_status_message("Cancelling print...\nPlease wait") + self.call_load_panel.emit(True,"Cancelling print...\nPlease wait") def change_page(self, index: int) -> None: """Requests a page change page to the global manager diff --git a/BlocksScreen/lib/panels/utilitiesTab.py b/BlocksScreen/lib/panels/utilitiesTab.py index c6453eae..73770164 100644 --- a/BlocksScreen/lib/panels/utilitiesTab.py +++ b/BlocksScreen/lib/panels/utilitiesTab.py @@ -14,7 +14,6 @@ from lib.panels.widgets.optionCardWidget import OptionCard from lib.panels.widgets.inputshaperPage import InputShaperPage from lib.panels.widgets.basePopup import BasePopup -from lib.panels.widgets.loadWidget import LoadingOverlayWidget import re @@ -89,6 +88,7 @@ class UtilitiesTab(QtWidgets.QStackedWidget): show_update_page: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal( bool, name="show-update-page" ) + call_load_panel = QtCore.pyqtSignal(bool,str,name="call-load-panel") def __init__( self, parent: QtWidgets.QWidget, ws: MoonWebSocket, printer: Printer @@ -123,17 +123,12 @@ def __init__( # --- UI Setup --- self.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight) - self.loadPage = BasePopup(self, dialog=False) - self.loadwidget = LoadingOverlayWidget( - self, LoadingOverlayWidget.AnimationGIF.DEFAULT - ) - self.loadPage.add_widget(self.loadwidget) - self.panel.update_btn.clicked.connect( lambda: self.show_update_page[bool].emit(False) ) self.is_page = InputShaperPage(self) + self.is_page.call_load_panel.connect(self.call_load_panel) self.addWidget(self.is_page) self.dialog_page = BasePopup(self, dialog=True, floating=True) @@ -310,7 +305,7 @@ def handle_gcode_response(self, data: list[str]) -> None: self.is_aut_types[axis] = recommended_type if len(self.is_aut_types) == 2: self.run_gcode_signal.emit("SAVE_CONFIG") - self.loadPage.hide() + self.call_load_panel.emit(False,"") self.aut = False return return @@ -329,7 +324,7 @@ def handle_gcode_response(self, data: list[str]) -> None: self.is_page.add_type_entry(key) self.is_page.build_model_list() - self.loadPage.hide() + self.call_load_panel.emit(False,"") return def handle_is(self, gcode: str) -> None: @@ -354,8 +349,7 @@ def handle_is(self, gcode: str) -> None: self.run_gcode_signal.emit(gcode) self.change_page(self.indexOf(self.is_page)) - self.loadwidget.set_status_message("Running Input Shaper...") - self.loadPage.show() + self.call_load_panel.emit(True,"Running Input Shaper...") @QtCore.pyqtSlot(list, name="on_object_list") def on_object_list(self, object_list: list) -> None: @@ -657,8 +651,7 @@ def troubleshoot_request(self) -> None: def show_waiting_page(self, page_to_go_to: int, label: str, time_ms: int): """Show placeholder page""" - self.loadwidget.set_status_message(label) - self.loadPage.show() + self.call_load_panel.emit(True,label) QtCore.QTimer.singleShot(time_ms, lambda: self.change_page(page_to_go_to)) def _connect_page_change(self, button: QtWidgets.QWidget, page: QtWidgets.QWidget): @@ -667,7 +660,7 @@ def _connect_page_change(self, button: QtWidgets.QWidget, page: QtWidgets.QWidge def change_page(self, index: int): """Request change page by index""" - self.loadPage.hide() + self.call_load_panel.emit(False,"") self.troubleshoot_page.hide() if index < self.count(): self.request_change_page.emit(3, index) diff --git a/BlocksScreen/lib/panels/widgets/connectionPage.py b/BlocksScreen/lib/panels/widgets/connectionPage.py index 1e9c32d1..54074522 100644 --- a/BlocksScreen/lib/panels/widgets/connectionPage.py +++ b/BlocksScreen/lib/panels/widgets/connectionPage.py @@ -14,6 +14,7 @@ class ConnectionPage(QtWidgets.QFrame): restart_klipper_clicked = QtCore.pyqtSignal(name="restart_klipper_clicked") firmware_restart_clicked = QtCore.pyqtSignal(name="firmware_restart_clicked") update_button_clicked = QtCore.pyqtSignal(bool, name="show-update-page") + call_load_panel = QtCore.pyqtSignal(bool,str,name="call-load-panel") def __init__(self, parent: QtWidgets.QWidget, ws: MoonWebSocket, /): super().__init__(parent) @@ -65,6 +66,7 @@ def show_panel(self, reason: str | None = None): def showEvent(self, a0: QtCore.QEvent | None): """Handle show event""" self.ws.api.refresh_update_status() + self.call_load_panel.emit(False,"") return super().showEvent(a0) @QtCore.pyqtSlot(bool, name="on_klippy_connected") diff --git a/BlocksScreen/lib/panels/widgets/inputshaperPage.py b/BlocksScreen/lib/panels/widgets/inputshaperPage.py index 539dcaf4..5ee2f901 100644 --- a/BlocksScreen/lib/panels/widgets/inputshaperPage.py +++ b/BlocksScreen/lib/panels/widgets/inputshaperPage.py @@ -1,5 +1,3 @@ -from lib.panels.widgets.loadWidget import LoadingOverlayWidget -from lib.panels.widgets.basePopup import BasePopup from lib.utils.blocks_button import BlocksCustomButton from lib.utils.blocks_frame import BlocksCustomFrame from lib.utils.icon_button import IconButton @@ -18,6 +16,7 @@ class InputShaperPage(QtWidgets.QWidget): run_gcode_signal: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal( str, name="run-gcode" ) + call_load_panel = QtCore.pyqtSignal(bool,str,name="call-load-panel") def __init__(self, parent=None) -> None: if parent: @@ -28,12 +27,6 @@ def __init__(self, parent=None) -> None: self.selected_item: ListItem | None = None self.ongoing_update: bool = False self.type_dict: dict = {} - - self.loadscreen = BasePopup(self, floating=False, dialog=False) - self.loadwidget = LoadingOverlayWidget( - self, LoadingOverlayWidget.AnimationGIF.DEFAULT - ) - self.loadscreen.add_widget(self.loadwidget) self.repeated_request_status = QtCore.QTimer() self.repeated_request_status.setInterval(2000) # every 2 seconds self.model = EntryListModel() @@ -50,8 +43,7 @@ def handle_update_end(self) -> None: """Handles update end signal (closes loading page, returns to normal operation) """ - if self.load_popup.isVisible(): - self.load_popup.close() + self.call_load_panel.emit(False,"Updating...") self.repeated_request_status.stop() self.build_model_list() @@ -59,8 +51,7 @@ def handle_ongoing_update(self) -> None: """Handled ongoing update signal, calls loading page (blocks user interaction) """ - self.loadwidget.set_status_message("Updating...") - self.load_popup.show() + self.call_load_panel.emit(True,"Updating...") self.repeated_request_status.start(2000) def reset_view_model(self) -> None: diff --git a/BlocksScreen/lib/panels/widgets/probeHelperPage.py b/BlocksScreen/lib/panels/widgets/probeHelperPage.py index 77e17d11..2c8a2d17 100644 --- a/BlocksScreen/lib/panels/widgets/probeHelperPage.py +++ b/BlocksScreen/lib/panels/widgets/probeHelperPage.py @@ -7,8 +7,6 @@ from lib.utils.check_button import BlocksCustomCheckButton from lib.utils.blocks_button import BlocksCustomButton -from lib.panels.widgets.loadWidget import LoadingOverlayWidget -from lib.panels.widgets.basePopup import BasePopup class ProbeHelper(QtWidgets.QWidget): @@ -36,6 +34,7 @@ class ProbeHelper(QtWidgets.QWidget): request_page_view: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal( name="request_page_view" ) + call_load_panel = QtCore.pyqtSignal(bool,str,name="call-load-panel") distances = ["0.01", ".025", "0.1", "0.5", "1"] _calibration_commands: list = [] @@ -50,11 +49,6 @@ class ProbeHelper(QtWidgets.QWidget): def __init__(self, parent: QtWidgets.QWidget) -> None: super().__init__(parent) - self.Loadscreen = BasePopup(self, dialog=False) - self.loadwidget = LoadingOverlayWidget( - self, LoadingOverlayWidget.AnimationGIF.DEFAULT - ) - self.Loadscreen.add_widget(self.loadwidget) self.setObjectName("probe_offset_page") self._setupUi() self.inductive_icon = QtGui.QPixmap( @@ -398,9 +392,7 @@ def handle_start_tool(self, sender: typing.Type[OptionCard]) -> None: for i in self.card_options.values(): i.setDisabled(True) - self.Loadscreen.show() - self.loadwidget.set_status_message("Homing Axes...") - + self.call_load_panel.emit(True,"Homing Axes...") if self.z_offset_safe_xy: self.run_gcode_signal.emit("G28\nM400") self._move_to_pos(self.z_offset_safe_xy[0], self.z_offset_safe_xy[1], 100) @@ -534,7 +526,7 @@ def _toggle_tool_buttons(self, state: bool) -> None: if state: for i in self.card_options.values(): i.setDisabled(False) - self.Loadscreen.hide() + self.call_load_panel.emit(False,"") self.po_back_button.setEnabled(False) self.po_back_button.hide() self.po_header_title.setEnabled(False) diff --git a/BlocksScreen/lib/panels/widgets/updatePage.py b/BlocksScreen/lib/panels/widgets/updatePage.py index 4857f92e..0572b417 100644 --- a/BlocksScreen/lib/panels/widgets/updatePage.py +++ b/BlocksScreen/lib/panels/widgets/updatePage.py @@ -1,7 +1,6 @@ import copy import typing -from lib.panels.widgets.basePopup import BasePopup from lib.panels.widgets.loadWidget import LoadingOverlayWidget from lib.utils.blocks_button import BlocksCustomButton from lib.utils.blocks_frame import BlocksCustomFrame @@ -52,6 +51,7 @@ class UpdatePage(QtWidgets.QWidget): update_available: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal( bool, name="update-available" ) + call_load_panel = QtCore.pyqtSignal(bool,str,name="call-load-panel") def __init__(self, parent=None) -> None: if parent: @@ -62,11 +62,6 @@ def __init__(self, parent=None) -> None: self.cli_tracking = {} self.selected_item: ListItem | None = None self.ongoing_update: bool = False - self.load_popup = BasePopup(self, floating=False, dialog=False) - self.loadwidget = LoadingOverlayWidget( - self, LoadingOverlayWidget.AnimationGIF.DEFAULT - ) - self.load_popup.add_widget(self.loadwidget) self.repeated_request_status = QtCore.QTimer() self.repeated_request_status.setInterval(2000) # every 2 seconds self.model = EntryListModel() @@ -90,8 +85,7 @@ def handle_update_end(self) -> None: """Handles update end signal (closes loading page, returns to normal operation) """ - if self.load_popup.isVisible(): - self.load_popup.close() + self.call_load_panel.emit(False,"") self.repeated_request_status.stop() self.on_request_reload() self.build_model_list() @@ -100,8 +94,7 @@ def handle_ongoing_update(self) -> None: """Handled ongoing update signal, calls loading page (blocks user interaction) """ - self.loadwidget.set_status_message("Updating...") - self.load_popup.show() + self.call_load_panel.emit(True,"Updating...") self.repeated_request_status.start(2000) def on_request_reload(self, service: str | None = None) -> None: @@ -166,12 +159,10 @@ def on_update_clicked(self) -> None: self.request_update_moonraker.emit() else: self.request_update_client.emit(cli_name) - - self.loadwidget.set_status_message(f"Updating {cli_name}") + self.call_load_panel.emit(True,f"Updating {cli_name}") else: self.request_recover_repo[str, bool].emit(cli_name, True) - self.loadwidget.set_status_message(f"Recovering {cli_name}") - self.load_popup.show() + self.call_load_panel.emit(True,f"Recovering {cli_name}") self.request_update_status.emit(False) @QtCore.pyqtSlot(ListItem, name="on-item-clicked") From 41c82e244752b3f817258b004b2d109816b2c428 Mon Sep 17 00:00:00 2001 From: Roberto Date: Tue, 20 Jan 2026 12:02:53 +0000 Subject: [PATCH 2/2] Refactor: ran ruff formatter --- BlocksScreen/lib/panels/controlTab.py | 24 ++++++++-------- BlocksScreen/lib/panels/filamentTab.py | 28 +++++++++++-------- BlocksScreen/lib/panels/mainWindow.py | 17 ++++++----- BlocksScreen/lib/panels/printTab.py | 4 +-- BlocksScreen/lib/panels/utilitiesTab.py | 12 ++++---- .../lib/panels/widgets/connectionPage.py | 4 +-- .../lib/panels/widgets/inputshaperPage.py | 6 ++-- .../lib/panels/widgets/probeHelperPage.py | 7 ++--- BlocksScreen/lib/panels/widgets/updatePage.py | 10 +++---- 9 files changed, 58 insertions(+), 54 deletions(-) diff --git a/BlocksScreen/lib/panels/controlTab.py b/BlocksScreen/lib/panels/controlTab.py index 2ab60e83..d5b5d6f5 100644 --- a/BlocksScreen/lib/panels/controlTab.py +++ b/BlocksScreen/lib/panels/controlTab.py @@ -45,7 +45,7 @@ class ControlTab(QtWidgets.QStackedWidget): request_file_info: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal( str, name="request-file-info" ) - call_load_panel = QtCore.pyqtSignal(bool,str,name="call-load-panel") + call_load_panel = QtCore.pyqtSignal(bool, str, name="call-load-panel") tune_display_buttons: dict = {} card_options: dict = {} @@ -294,7 +294,7 @@ def __init__( def _handle_z_tilt_object_update(self, value, state): if state: self.ztilt_state = state - self.call_load_panel.emit(False,"") + self.call_load_panel.emit(False, "") @QtCore.pyqtSlot(str, str, float, name="on_fan_update") @QtCore.pyqtSlot(str, str, int, name="on_fan_update") @@ -419,16 +419,16 @@ def handle_printcoreupdate(self, value: dict): return if value["swapping"] == "in_pos": - self.call_load_panel.emit(False,"") + self.call_load_panel.emit(False, "") self.printcores_page.show() self.disable_popups.emit(True) self.printcores_page.setText( "Please Insert Print Core \n \n Afterwards click continue" ) if value["swapping"] == "unloading": - self.call_load_panel.emit(True,"Unloading print core") + self.call_load_panel.emit(True, "Unloading print core") if value["swapping"] == "cleaning": - self.call_load_panel.emit(True,"Cleaning print core") + self.call_load_panel.emit(True, "Cleaning print core") def _handle_gcode_response(self, messages: list): """Handle gcode response for Z-tilt adjustment""" @@ -451,14 +451,16 @@ def _handle_gcode_response(self, messages: list): probed_range = float(match.group(3)) tolerance = float(match.group(4)) if retries_done == retries_total: - self.call_load_panel.emit(False,"") + self.call_load_panel.emit(False, "") return - self.call_load_panel.emit(True,f"Retries: {retries_done}/{retries_total} | Range: {probed_range:.6f} | Tolerance: {tolerance:.6f}") - + self.call_load_panel.emit( + True, + f"Retries: {retries_done}/{retries_total} | Range: {probed_range:.6f} | Tolerance: {tolerance:.6f}", + ) def handle_ztilt(self): """Handle Z-Tilt Adjustment""" - self.call_load_panel.emit(True,"Please wait, performing Z-axis calibration.") + self.call_load_panel.emit(True, "Please wait, performing Z-axis calibration.") self.run_gcode_signal.emit("Z_TILT_ADJUST") @QtCore.pyqtSlot(str, name="on-klippy-status") @@ -475,7 +477,7 @@ def on_klippy_status(self, state: str): def show_swapcore(self): """Show swap printcore""" self.run_gcode_signal.emit("CHANGE_PRINTCORES") - self.call_load_panel.emit(True,"Preparing to swap print core") + self.call_load_panel.emit(True, "Preparing to swap print core") def handle_swapcore(self): """Handle swap printcore routine finish""" @@ -647,7 +649,7 @@ def on_toolhead_update(self, field: str, values: list) -> None: self.panel.mva_z_value_label.setText(f"{values[2]:.3f}") if values[0] == "252,50" and values[1] == "250" and values[2] == "50": - self.call_load_panel.emit(False,"") + self.call_load_panel.emit(False, "") self.toolhead_info.update({f"{field}": values}) @QtCore.pyqtSlot(str, str, float, name="on-extruder-update") diff --git a/BlocksScreen/lib/panels/filamentTab.py b/BlocksScreen/lib/panels/filamentTab.py index 4be0918f..4b368bd8 100644 --- a/BlocksScreen/lib/panels/filamentTab.py +++ b/BlocksScreen/lib/panels/filamentTab.py @@ -17,7 +17,8 @@ class FilamentTab(QtWidgets.QStackedWidget): request_change_page = QtCore.pyqtSignal(int, int, name="request_change_page") request_toolhead_count = QtCore.pyqtSignal(int, name="toolhead_number_received") run_gcode = QtCore.pyqtSignal(str, name="run_gcode") - call_load_panel = QtCore.pyqtSignal(bool,str,name="call-load-panel") + call_load_panel = QtCore.pyqtSignal(bool, str, name="call-load-panel") + class FilamentTypes(enum.Enum): PLA = Filament(name="PLA", temperature=220) @@ -127,18 +128,21 @@ def on_extruder_update( if self.target_temp != 0: if self.current_temp == self.target_temp: if self.isVisible: - self.call_load_panel.emit(True,"Extruder heated up \n Please wait") + self.call_load_panel.emit( + True, "Extruder heated up \n Please wait" + ) return if field == "temperature": self.current_temp = round(new_value, 0) if self.isVisible: - self.call_load_panel.emit(True,f"Heating up ({new_value}/{self.target_temp}) \n Please wait") + self.call_load_panel.emit( + True, + f"Heating up ({new_value}/{self.target_temp}) \n Please wait", + ) if field == "target": self.target_temp = round(new_value, 0) if self.isVisible: - self.call_load_panel.emit(True,"Heating up \n Please wait") - - + self.call_load_panel.emit(True, "Heating up \n Please wait") @QtCore.pyqtSlot(bool, name="on_load_filament") def on_load_filament(self, status: bool): @@ -149,10 +153,10 @@ def on_load_filament(self, status: bool): if not self.isVisible: return if status: - self.call_load_panel.emit(True,"Loading Filament") + self.call_load_panel.emit(True, "Loading Filament") else: self.target_temp = 0 - self.call_load_panel.emit(False,"") + self.call_load_panel.emit(False, "") self._filament_state = self.FilamentStates.LOADED self.handle_filament_state() @@ -165,9 +169,9 @@ def on_unload_filament(self, status: bool): if not self.isVisible: return if status: - self.call_load_panel.emit(True,"Unloading Filament") + self.call_load_panel.emit(True, "Unloading Filament") else: - self.call_load_panel.emit(False,"") + self.call_load_panel.emit(False, "") self.target_temp = 0 self._filament_state = self.FilamentStates.UNLOADED self.handle_filament_state() @@ -191,7 +195,7 @@ def load_filament(self, toolhead: int = 0, temp: int = 220) -> None: ) return self.loadignore = False - self.call_load_panel.emit(True,"Loading Filament") + self.call_load_panel.emit(True, "Loading Filament") self.run_gcode.emit(f"LOAD_FILAMENT TOOLHEAD=load_toolhead TEMPERATURE={temp}") @QtCore.pyqtSlot(str, int, name="unload_filament") @@ -215,7 +219,7 @@ def unload_filament(self, toolhead: int = 0, temp: int = 220) -> None: self.find_routine_objects() self.unload_filament = False - self.call_load_panel.emit(True,"Unloading Filament") + self.call_load_panel.emit(True, "Unloading Filament") self.run_gcode.emit(f"UNLOAD_FILAMENT TEMPERATURE={temp}") def handle_filament_state(self): diff --git a/BlocksScreen/lib/panels/mainWindow.py b/BlocksScreen/lib/panels/mainWindow.py index f23b8c8b..32355803 100644 --- a/BlocksScreen/lib/panels/mainWindow.py +++ b/BlocksScreen/lib/panels/mainWindow.py @@ -65,7 +65,7 @@ class MainWindow(QtWidgets.QMainWindow): on_update_message: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal( dict, name="on-update-message" ) - call_load_panel = QtCore.pyqtSignal(bool,str,name="call-load-panel") + call_load_panel = QtCore.pyqtSignal(bool, str, name="call-load-panel") def __init__(self): super(MainWindow, self).__init__() @@ -143,7 +143,7 @@ def __init__(self): slot=self.mc.restart_klipper_service ) self.conn_window.reboot_clicked.connect(slot=self.mc.machine_restart) - + self.printer_object_report_signal.connect( self.printer.on_object_report_received ) @@ -196,24 +196,23 @@ def __init__(self): self.bo_ws_startup.emit() self.reset_tab_indexes() - @QtCore.pyqtSlot(bool, str,name="show-load-page") - def show_LoadScreen(self, show : bool = True , msg: str = ""): + @QtCore.pyqtSlot(bool, str, name="show-load-page") + def show_LoadScreen(self, show: bool = True, msg: str = ""): _sender = self.sender() if _sender == self.filamentPanel: - if not self.filamentPanel.isVisible(): + if not self.filamentPanel.isVisible(): return if _sender == self.controlPanel: - if not self.controlPanel.isVisible(): + if not self.controlPanel.isVisible(): return if _sender == self.printPanel: - if not self.printPanel.isVisible(): + if not self.printPanel.isVisible(): return if _sender == self.utilitiesPanel: - if not self.utilitiesPanel.isVisible(): + if not self.utilitiesPanel.isVisible(): return - self.loadwidget.set_status_message(msg) if show: self.loadscreen.show() diff --git a/BlocksScreen/lib/panels/printTab.py b/BlocksScreen/lib/panels/printTab.py index 5458f153..7431938e 100644 --- a/BlocksScreen/lib/panels/printTab.py +++ b/BlocksScreen/lib/panels/printTab.py @@ -62,7 +62,7 @@ class PrintTab(QtWidgets.QStackedWidget): on_cancel_print: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal( name="on_cancel_print" ) - call_load_panel = QtCore.pyqtSignal(bool,str,name="call-load-panel") + call_load_panel = QtCore.pyqtSignal(bool, str, name="call-load-panel") _z_offset: float = 0.0 _active_z_offset: float = 0.0 @@ -366,7 +366,7 @@ def setProperty(self, name: str, value: typing.Any) -> bool: def handle_cancel_print(self) -> None: """Handles the print cancel action""" self.ws.api.cancel_print() - self.call_load_panel.emit(True,"Cancelling print...\nPlease wait") + self.call_load_panel.emit(True, "Cancelling print...\nPlease wait") def change_page(self, index: int) -> None: """Requests a page change page to the global manager diff --git a/BlocksScreen/lib/panels/utilitiesTab.py b/BlocksScreen/lib/panels/utilitiesTab.py index 73770164..6cff5f27 100644 --- a/BlocksScreen/lib/panels/utilitiesTab.py +++ b/BlocksScreen/lib/panels/utilitiesTab.py @@ -88,7 +88,7 @@ class UtilitiesTab(QtWidgets.QStackedWidget): show_update_page: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal( bool, name="show-update-page" ) - call_load_panel = QtCore.pyqtSignal(bool,str,name="call-load-panel") + call_load_panel = QtCore.pyqtSignal(bool, str, name="call-load-panel") def __init__( self, parent: QtWidgets.QWidget, ws: MoonWebSocket, printer: Printer @@ -305,7 +305,7 @@ def handle_gcode_response(self, data: list[str]) -> None: self.is_aut_types[axis] = recommended_type if len(self.is_aut_types) == 2: self.run_gcode_signal.emit("SAVE_CONFIG") - self.call_load_panel.emit(False,"") + self.call_load_panel.emit(False, "") self.aut = False return return @@ -324,7 +324,7 @@ def handle_gcode_response(self, data: list[str]) -> None: self.is_page.add_type_entry(key) self.is_page.build_model_list() - self.call_load_panel.emit(False,"") + self.call_load_panel.emit(False, "") return def handle_is(self, gcode: str) -> None: @@ -349,7 +349,7 @@ def handle_is(self, gcode: str) -> None: self.run_gcode_signal.emit(gcode) self.change_page(self.indexOf(self.is_page)) - self.call_load_panel.emit(True,"Running Input Shaper...") + self.call_load_panel.emit(True, "Running Input Shaper...") @QtCore.pyqtSlot(list, name="on_object_list") def on_object_list(self, object_list: list) -> None: @@ -651,7 +651,7 @@ def troubleshoot_request(self) -> None: def show_waiting_page(self, page_to_go_to: int, label: str, time_ms: int): """Show placeholder page""" - self.call_load_panel.emit(True,label) + self.call_load_panel.emit(True, label) QtCore.QTimer.singleShot(time_ms, lambda: self.change_page(page_to_go_to)) def _connect_page_change(self, button: QtWidgets.QWidget, page: QtWidgets.QWidget): @@ -660,7 +660,7 @@ def _connect_page_change(self, button: QtWidgets.QWidget, page: QtWidgets.QWidge def change_page(self, index: int): """Request change page by index""" - self.call_load_panel.emit(False,"") + self.call_load_panel.emit(False, "") self.troubleshoot_page.hide() if index < self.count(): self.request_change_page.emit(3, index) diff --git a/BlocksScreen/lib/panels/widgets/connectionPage.py b/BlocksScreen/lib/panels/widgets/connectionPage.py index 54074522..9403d290 100644 --- a/BlocksScreen/lib/panels/widgets/connectionPage.py +++ b/BlocksScreen/lib/panels/widgets/connectionPage.py @@ -14,7 +14,7 @@ class ConnectionPage(QtWidgets.QFrame): restart_klipper_clicked = QtCore.pyqtSignal(name="restart_klipper_clicked") firmware_restart_clicked = QtCore.pyqtSignal(name="firmware_restart_clicked") update_button_clicked = QtCore.pyqtSignal(bool, name="show-update-page") - call_load_panel = QtCore.pyqtSignal(bool,str,name="call-load-panel") + call_load_panel = QtCore.pyqtSignal(bool, str, name="call-load-panel") def __init__(self, parent: QtWidgets.QWidget, ws: MoonWebSocket, /): super().__init__(parent) @@ -66,7 +66,7 @@ def show_panel(self, reason: str | None = None): def showEvent(self, a0: QtCore.QEvent | None): """Handle show event""" self.ws.api.refresh_update_status() - self.call_load_panel.emit(False,"") + self.call_load_panel.emit(False, "") return super().showEvent(a0) @QtCore.pyqtSlot(bool, name="on_klippy_connected") diff --git a/BlocksScreen/lib/panels/widgets/inputshaperPage.py b/BlocksScreen/lib/panels/widgets/inputshaperPage.py index 5ee2f901..ead82cfb 100644 --- a/BlocksScreen/lib/panels/widgets/inputshaperPage.py +++ b/BlocksScreen/lib/panels/widgets/inputshaperPage.py @@ -16,7 +16,7 @@ class InputShaperPage(QtWidgets.QWidget): run_gcode_signal: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal( str, name="run-gcode" ) - call_load_panel = QtCore.pyqtSignal(bool,str,name="call-load-panel") + call_load_panel = QtCore.pyqtSignal(bool, str, name="call-load-panel") def __init__(self, parent=None) -> None: if parent: @@ -43,7 +43,7 @@ def handle_update_end(self) -> None: """Handles update end signal (closes loading page, returns to normal operation) """ - self.call_load_panel.emit(False,"Updating...") + self.call_load_panel.emit(False, "Updating...") self.repeated_request_status.stop() self.build_model_list() @@ -51,7 +51,7 @@ def handle_ongoing_update(self) -> None: """Handled ongoing update signal, calls loading page (blocks user interaction) """ - self.call_load_panel.emit(True,"Updating...") + self.call_load_panel.emit(True, "Updating...") self.repeated_request_status.start(2000) def reset_view_model(self) -> None: diff --git a/BlocksScreen/lib/panels/widgets/probeHelperPage.py b/BlocksScreen/lib/panels/widgets/probeHelperPage.py index 2c8a2d17..f50d64b7 100644 --- a/BlocksScreen/lib/panels/widgets/probeHelperPage.py +++ b/BlocksScreen/lib/panels/widgets/probeHelperPage.py @@ -8,7 +8,6 @@ from lib.utils.blocks_button import BlocksCustomButton - class ProbeHelper(QtWidgets.QWidget): request_back: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal( name="request_back" @@ -34,7 +33,7 @@ class ProbeHelper(QtWidgets.QWidget): request_page_view: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal( name="request_page_view" ) - call_load_panel = QtCore.pyqtSignal(bool,str,name="call-load-panel") + call_load_panel = QtCore.pyqtSignal(bool, str, name="call-load-panel") distances = ["0.01", ".025", "0.1", "0.5", "1"] _calibration_commands: list = [] @@ -392,7 +391,7 @@ def handle_start_tool(self, sender: typing.Type[OptionCard]) -> None: for i in self.card_options.values(): i.setDisabled(True) - self.call_load_panel.emit(True,"Homing Axes...") + self.call_load_panel.emit(True, "Homing Axes...") if self.z_offset_safe_xy: self.run_gcode_signal.emit("G28\nM400") self._move_to_pos(self.z_offset_safe_xy[0], self.z_offset_safe_xy[1], 100) @@ -526,7 +525,7 @@ def _toggle_tool_buttons(self, state: bool) -> None: if state: for i in self.card_options.values(): i.setDisabled(False) - self.call_load_panel.emit(False,"") + self.call_load_panel.emit(False, "") self.po_back_button.setEnabled(False) self.po_back_button.hide() self.po_header_title.setEnabled(False) diff --git a/BlocksScreen/lib/panels/widgets/updatePage.py b/BlocksScreen/lib/panels/widgets/updatePage.py index 0572b417..b91e41d3 100644 --- a/BlocksScreen/lib/panels/widgets/updatePage.py +++ b/BlocksScreen/lib/panels/widgets/updatePage.py @@ -51,7 +51,7 @@ class UpdatePage(QtWidgets.QWidget): update_available: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal( bool, name="update-available" ) - call_load_panel = QtCore.pyqtSignal(bool,str,name="call-load-panel") + call_load_panel = QtCore.pyqtSignal(bool, str, name="call-load-panel") def __init__(self, parent=None) -> None: if parent: @@ -85,7 +85,7 @@ def handle_update_end(self) -> None: """Handles update end signal (closes loading page, returns to normal operation) """ - self.call_load_panel.emit(False,"") + self.call_load_panel.emit(False, "") self.repeated_request_status.stop() self.on_request_reload() self.build_model_list() @@ -94,7 +94,7 @@ def handle_ongoing_update(self) -> None: """Handled ongoing update signal, calls loading page (blocks user interaction) """ - self.call_load_panel.emit(True,"Updating...") + self.call_load_panel.emit(True, "Updating...") self.repeated_request_status.start(2000) def on_request_reload(self, service: str | None = None) -> None: @@ -159,10 +159,10 @@ def on_update_clicked(self) -> None: self.request_update_moonraker.emit() else: self.request_update_client.emit(cli_name) - self.call_load_panel.emit(True,f"Updating {cli_name}") + self.call_load_panel.emit(True, f"Updating {cli_name}") else: self.request_recover_repo[str, bool].emit(cli_name, True) - self.call_load_panel.emit(True,f"Recovering {cli_name}") + self.call_load_panel.emit(True, f"Recovering {cli_name}") self.request_update_status.emit(False) @QtCore.pyqtSlot(ListItem, name="on-item-clicked")