diff --git a/BlocksScreen/lib/panels/mainWindow.py b/BlocksScreen/lib/panels/mainWindow.py index fc30ed96..0694d29f 100644 --- a/BlocksScreen/lib/panels/mainWindow.py +++ b/BlocksScreen/lib/panels/mainWindow.py @@ -90,6 +90,8 @@ def __init__(self): self.printPanel.request_change_page.connect( slot=self.global_change_page ) + + self.filamentPanel.request_back.connect(slot=self.global_back) self.filamentPanel.request_change_page.connect( slot=self.global_change_page @@ -102,6 +104,26 @@ def __init__(self): self.utilitiesPanel.request_change_page.connect( slot=self.global_change_page ) + + + self.printer.print_stats_update[str, str].connect( + self.screensaver.on_object_config + ) + self.printer.print_stats_update[str, dict].connect( + self.screensaver.on_object_config + ) + self.printer.print_stats_update[str, float].connect( + self.screensaver.on_object_config + ) + + self.screensaver.request_file_info.connect( + self.file_data.on_request_fileinfo + ) + + self.file_data.fileinfo.connect(self.screensaver.on_fileinfo) + + + self.ui.extruder_temp_display.clicked.connect( partial(self.global_change_page, 2, 4) ) diff --git a/BlocksScreen/lib/panels/widgets/filesPage.py b/BlocksScreen/lib/panels/widgets/filesPage.py index 89e0386b..c3512499 100644 --- a/BlocksScreen/lib/panels/widgets/filesPage.py +++ b/BlocksScreen/lib/panels/widgets/filesPage.py @@ -82,7 +82,8 @@ def on_fileinfo(self, filedata: dict) -> None: self.button.setRightText(f"{filament_type} - {time_str}") return - self.file_selected.emit(str(self._current_file_name), filedata) + if self.isVisible(): + self.file_selected.emit(str(self._current_file_name), filedata) @QtCore.pyqtSlot(name="reload_list") def reload_list(self) -> None: diff --git a/BlocksScreen/screensaver.py b/BlocksScreen/screensaver.py index 081f98c3..566ee2d7 100644 --- a/BlocksScreen/screensaver.py +++ b/BlocksScreen/screensaver.py @@ -1,10 +1,9 @@ import helper_methods as helper_methods -from PyQt6 import QtCore, QtWidgets - +from PyQt6 import QtCore, QtWidgets ,QtGui +import typing class ScreenSaver(QtCore.QObject): timer = QtCore.QTimer() - dpms_off_timeout = helper_methods.get_dpms_timeouts().get("off_timeout") dpms_suspend_timeout = helper_methods.get_dpms_timeouts().get( "suspend_timeout" @@ -12,6 +11,10 @@ class ScreenSaver(QtCore.QObject): dpms_standby_timeout = helper_methods.get_dpms_timeouts().get( "standby_timeout" ) + request_file_info: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal( + str, name="request_file_info" + ) + touch_blocked: bool = False @@ -31,7 +34,21 @@ def __init__(self, parent) -> None: self.blank_timeout = self.screensaver_config.getint( "timeout", default=500000 ) + self.image_widget = QtWidgets.QLabel() + self.image_widget.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) + self.image_widget.setWindowFlags( + QtCore.Qt.WindowType.FramelessWindowHint + | QtCore.Qt.WindowType.WindowStaysOnTopHint + ) + self.image=QtGui.QPixmap("BlocksScreen/lib/ui/resources/media/logoblocks.png") + + self.image_widget.setStyleSheet("background-color: black;") + self.image_widget.setScaledContents(True) + + # load image from config or hardcode + QtWidgets.QApplication.instance().installEventFilter(self) + self.timer.timeout.connect(self.check_dpms) self.timer.setInterval(self.blank_timeout) self.timer.start() @@ -46,21 +63,11 @@ def eventFilter(self, object, event) -> bool: QtCore.QEvent.Type.MouseButtonPress, QtCore.QEvent.Type.MouseButtonDblClick, ): - dpms_info = helper_methods.get_dpms_info() - if ( - dpms_info.get("state") - in ( - helper_methods.DPMSState.OFF, - helper_methods.DPMSState.STANDBY, - helper_methods.DPMSState.SUSPEND, - ) - or self.touch_blocked - ): - if not self.timer.isActive(): - self.touch_blocked = False - helper_methods.set_dpms_mode(helper_methods.DPMSState.ON) - self.timer.start() - return True # filter out the event, block touch events on the application + if self.image_widget.isVisible() or self.touch_blocked: + self.touch_blocked = False + self.image_widget.hide() + self.timer.start() + return True # block the wake-up touch return False def timerEvent(self, a0: QtCore.QTimerEvent) -> None: @@ -69,5 +76,25 @@ def timerEvent(self, a0: QtCore.QTimerEvent) -> None: def check_dpms(self) -> None: """Checks the X11 extension dpms for the status of the screen""" self.touch_blocked = True - helper_methods.set_dpms_mode(helper_methods.DPMSState.STANDBY) + if self.state == "printing": + self.request_file_info.emit(self.filename) + self.image = QtGui.QPixmap(self.thumbnail[2]) + self.image_widget.setPixmap(self.image) + self.image_widget.setMaximumWidth(self.image.width()) + self.image_widget.showFullScreen() self.timer.stop() + + @QtCore.pyqtSlot(dict, name="on_fileinfo") + def on_fileinfo(self, filedata: dict) -> None: + self.thumbnail = filedata["thumbnail_images"] + + + @QtCore.pyqtSlot(str, dict, name="on_object_config") + @QtCore.pyqtSlot(str, float, name="on_object_config") + @QtCore.pyqtSlot(str, str, name="on_object_config") + def on_object_config(self, field: str, value: dict | float | str) -> None: + if field == "filename": + self.filename = value + if field == "state": + self.state = value + print(self.state) \ No newline at end of file