diff --git a/BlocksScreen/lib/panels/controlTab.py b/BlocksScreen/lib/panels/controlTab.py index a957bea0..d5b5d6f5 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,17 @@ 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.loadwidget.set_status_message( - 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.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 +477,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 +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.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..4b368bd8 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,6 +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 +41,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 +124,25 @@ 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 +150,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 +166,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 +194,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 +218,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..32355803 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,46 @@ 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 +404,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 +614,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 +635,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..7431938e 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..6cff5f27 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..9403d290 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..ead82cfb 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 9cf25e59..a105037b 100644 --- a/BlocksScreen/lib/panels/widgets/probeHelperPage.py +++ b/BlocksScreen/lib/panels/widgets/probeHelperPage.py @@ -10,6 +10,7 @@ from PyQt6 import QtCore, QtGui, QtWidgets + class ProbeHelper(QtWidgets.QWidget): request_back: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal( name="request_back" @@ -35,6 +36,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 = [] @@ -49,11 +51,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( @@ -397,9 +394,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) @@ -533,7 +528,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..b91e41d3 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")