From cde4433e8b3ed3c7940a4801f97f696e35ef248a Mon Sep 17 00:00:00 2001 From: Roberto Martins Date: Fri, 12 Sep 2025 15:00:53 +0100 Subject: [PATCH 1/2] ADD: Added image to screensaver --- BlocksScreen/screensaver.py | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/BlocksScreen/screensaver.py b/BlocksScreen/screensaver.py index 081f98c3..d481e91d 100644 --- a/BlocksScreen/screensaver.py +++ b/BlocksScreen/screensaver.py @@ -1,5 +1,5 @@ import helper_methods as helper_methods -from PyQt6 import QtCore, QtWidgets +from PyQt6 import QtCore, QtWidgets ,QtGui class ScreenSaver(QtCore.QObject): @@ -31,7 +31,19 @@ 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_widget.setStyleSheet("background-color: black;") + self.image_widget.setScaledContents(True) + + # load image from config or hardcode + self.image_widget.setPixmap(QtGui.QPixmap("BlocksScreen/lib/ui/resources/media/logoblocks.png")) QtWidgets.QApplication.instance().installEventFilter(self) + self.timer.timeout.connect(self.check_dpms) self.timer.setInterval(self.blank_timeout) self.timer.start() @@ -46,21 +58,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 +71,6 @@ 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) + self.image_widget.showFullScreen() + self.timer.stop() From f8d684c439e817353e32b11e83d7be4a76a4b3ae Mon Sep 17 00:00:00 2001 From: Roberto Martins Date: Fri, 12 Sep 2025 17:48:50 +0100 Subject: [PATCH 2/2] ADD: added support for thumbnails --- BlocksScreen/lib/panels/mainWindow.py | 22 ++++++++++++++ BlocksScreen/lib/panels/widgets/filesPage.py | 3 +- BlocksScreen/screensaver.py | 32 +++++++++++++++++--- 3 files changed, 52 insertions(+), 5 deletions(-) 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 13aceae2..6106c1b5 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 d481e91d..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 ,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 @@ -37,11 +40,13 @@ def __init__(self, parent) -> None: 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 - self.image_widget.setPixmap(QtGui.QPixmap("BlocksScreen/lib/ui/resources/media/logoblocks.png")) + QtWidgets.QApplication.instance().installEventFilter(self) self.timer.timeout.connect(self.check_dpms) @@ -71,6 +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 + 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