Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 15 additions & 26 deletions BlocksScreen/lib/panels/controlTab.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 = {}

Expand All @@ -70,22 +69,18 @@ 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 = ""
self.move_length: float = 1.0
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)
Expand Down Expand Up @@ -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")
Expand Down Expand Up @@ -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"""
Expand All @@ -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):
Expand All @@ -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"""
Expand Down Expand Up @@ -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")
Expand Down
57 changes: 28 additions & 29 deletions BlocksScreen/lib/panels/filamentTab.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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)
Expand All @@ -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 = {}
Expand Down Expand Up @@ -130,34 +124,39 @@ 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):
"""Handle load filament object updated"""
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()

Expand All @@ -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()
Expand All @@ -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")
Expand All @@ -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):
Expand Down
47 changes: 40 additions & 7 deletions BlocksScreen/lib/panels/mainWindow.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 *
Expand Down Expand Up @@ -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__()
Expand Down Expand Up @@ -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
)
Expand Down Expand Up @@ -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"""
Expand Down Expand Up @@ -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(),
Expand Down Expand Up @@ -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:
Expand All @@ -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:
Expand Down
12 changes: 2 additions & 10 deletions BlocksScreen/lib/panels/printTab.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down
Loading
Loading