diff --git a/BlocksScreen.cfg b/BlocksScreen.cfg
index 42ab150b..065a900b 100644
--- a/BlocksScreen.cfg
+++ b/BlocksScreen.cfg
@@ -7,3 +7,7 @@ timeout: 5000
[usb_manager]
gcodes_dir: ~/printer_data/gcodes/
+
+[filament_presence]
+object: cutter_sensor
+name: extruder_cutter
\ No newline at end of file
diff --git a/BlocksScreen/lib/panels/filamentTab.py b/BlocksScreen/lib/panels/filamentTab.py
index 04fc5ef4..3a7ed42e 100644
--- a/BlocksScreen/lib/panels/filamentTab.py
+++ b/BlocksScreen/lib/panels/filamentTab.py
@@ -1,27 +1,36 @@
import enum
from functools import partial
-
+import logging
from lib.printer import Printer
from lib.filament import Filament
from lib.ui.filamentStackedWidget_ui import Ui_filamentStackedWidget
-
from lib.panels.widgets.popupDialogWidget import Popup
from PyQt6 import QtCore, QtGui, QtWidgets
+logger = logging.getLogger(__name__)
+
+
+class FilamentTypes(enum.Enum):
+ PLA = Filament(name="PLA", temperature=220)
+ PETG = Filament(name="PETG", temperature=240)
+ ABS = Filament(name="ABS", temperature=250)
+ HIPS = Filament(name="HIPS", temperature=250)
+ NYLON = Filament(name="NYLON", temperature=270)
+ TPU = Filament(name="TPU", temperature=230)
+ UNKNOWN = Filament(name="UNKNOWN", temperature=250)
+
class FilamentTab(QtWidgets.QStackedWidget):
request_filament_change_page = QtCore.pyqtSignal(name="filament_change_page")
request_filament_load = QtCore.pyqtSignal(name="filament_load_t1")
request_back = QtCore.pyqtSignal(name="request_back")
request_change_page = QtCore.pyqtSignal(int, int, name="request_change_page")
+ request_change_tab = QtCore.pyqtSignal(int, name="request_change_tab")
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)
-
class FilamentStates(enum.Enum):
LOADED = enum.auto()
UNLOADED = enum.auto()
@@ -43,8 +52,14 @@ def __init__(self, parent: QtWidgets.QWidget, printer: Printer, ws, /) -> None:
self.popup = Popup(self)
self.has_load_unload_objects = None
self._filament_state = self.FilamentStates.UNKNOWN
- self._sensor_states = {}
- self.filament_type: Filament | None = None
+ self.filament_type = FilamentTypes.UNKNOWN
+
+ cfg = parent.config
+ if cfg.has_section("filament_presence"):
+ i = cfg.get_section("filament_presence", None)
+ self.filament_sensor = i.get("name", str, None)
+ else:
+ self.filament_sensor = None
self.panel.filament_page_load_btn.clicked.connect(
partial(self.change_page, self.indexOf(self.panel.load_page))
)
@@ -52,28 +67,30 @@ def __init__(self, parent: QtWidgets.QWidget, printer: Printer, ws, /) -> None:
self.panel.load_custom_btn.hide()
self.panel.load_header_back_button.clicked.connect(self.back_button)
self.panel.load_pla_btn.clicked.connect(
- partial(self.load_filament, toolhead=0, temp=220)
+ partial(self.load_filament, toolhead=0, filament=FilamentTypes.PLA)
)
self.panel.load_petg_btn.clicked.connect(
- partial(self.load_filament, toolhead=0, temp=240)
+ partial(self.load_filament, toolhead=0, filament=FilamentTypes.PETG)
)
self.panel.load_abs_btn.clicked.connect(
- partial(self.load_filament, toolhead=0, temp=250)
+ partial(self.load_filament, toolhead=0, filament=FilamentTypes.ABS)
)
self.panel.load_hips_btn.clicked.connect(
- partial(self.load_filament, toolhead=0, temp=250)
+ partial(self.load_filament, toolhead=0, filament=FilamentTypes.HIPS)
)
self.panel.load_nylon_btn.clicked.connect(
- partial(self.load_filament, toolhead=0, temp=270)
+ partial(self.load_filament, toolhead=0, filament=FilamentTypes.NYLON)
)
self.panel.load_tpu_btn.clicked.connect(
- partial(self.load_filament, toolhead=0, temp=230)
+ partial(self.load_filament, toolhead=0, filament=FilamentTypes.TPU)
)
self.panel.filament_page_unload_btn.clicked.connect(
lambda: self.unload_filament(toolhead=0, temp=250)
)
+ self.panel.main_back_button.clicked.connect(
+ lambda: self.request_change_tab.emit(0)
+ )
self.run_gcode.connect(self.ws.api.run_gcode)
- self.printer.extruder_update.connect(self.on_extruder_update)
self.printer.unload_filament_update.connect(self.on_unload_filament)
self.printer.load_filament_update.connect(self.on_load_filament)
self.printer.filament_switch_sensor_update.connect(
@@ -84,8 +101,18 @@ def __init__(self, parent: QtWidgets.QWidget, printer: Printer, ws, /) -> None:
self.printer.print_stats_update[str, dict].connect(self.on_print_stats_update)
self.printer.print_stats_update[str, float].connect(self.on_print_stats_update)
- self.loadignore = True
- self.unloadignore = True
+ self.printer.save_variables_update.connect(self.on_save_variables_update)
+ self.state = "standby"
+
+ def on_save_variables_update(self, save_variables: dict):
+ """Handle query response"""
+ for i in FilamentTypes:
+ if i.value.name in save_variables["variables"]["filament_type"]:
+ self.filament_type = i
+ break
+ else:
+ self.filament_type = FilamentTypes.UNKNOWN
+ self.panel.label_2.setText(self.filament_type.value.name)
@QtCore.pyqtSlot(str, dict, name="on_print_stats_update")
@QtCore.pyqtSlot(str, float, name="on_print_stats_update")
@@ -94,9 +121,23 @@ def on_print_stats_update(self, field: str, value: dict | float | str) -> None:
"""Handle print stats object update"""
if isinstance(value, str):
if "state" in field:
+ self.state = value
+ if value in ("printing", "pausing", "paused", "resuming"):
+ self.panel.main_back_button.show()
+ self.panel.spacerItem1.changeSize(
+ 60,
+ 0,
+ QtWidgets.QSizePolicy.Policy.Minimum,
+ QtWidgets.QSizePolicy.Policy.Minimum,
+ )
if value in ("standby"):
- self.loadignore = True
- self.unloadignore = True
+ self.panel.main_back_button.hide()
+ self.panel.spacerItem1.changeSize(
+ 0,
+ 0,
+ QtWidgets.QSizePolicy.Policy.Minimum,
+ QtWidgets.QSizePolicy.Policy.Minimum,
+ )
@QtCore.pyqtSlot(str, str, bool, name="on_filament_sensor_update")
def on_filament_sensor_update(self, sensor_name: str, parameter: str, value: bool):
@@ -106,78 +147,46 @@ def on_filament_sensor_update(self, sensor_name: str, parameter: str, value: boo
self._filament_state = self.FilamentStates.UNKNOWN
self.handle_filament_state()
return
- self._sensor_states[sensor_name] = value
- if not self._sensor_states:
- new_state = self.FilamentStates.UNKNOWN
- elif all(self._sensor_states.values()):
- new_state = self.FilamentStates.LOADED
- else:
- new_state = self.FilamentStates.UNLOADED
- if self._filament_state != new_state:
- self._filament_state = new_state
- self.handle_filament_state()
+ if sensor_name == self.filament_sensor:
+ if value:
+ self._filament_state = self.FilamentStates.LOADED
+ else:
+ self._filament_state = self.FilamentStates.UNLOADED
+ return
+ self.handle_filament_state()
- @QtCore.pyqtSlot(str, str, float, name="on_extruder_update")
- def on_extruder_update(
- self, extruder_name: str, field: str, new_value: float
- ) -> None:
- """Handle extruder update"""
- if not self.isVisible:
- return
- 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):
+ @QtCore.pyqtSlot(dict, name="on_load_filament")
+ def on_load_filament(self, status: dict):
"""Handle load filament object updated"""
- if not self.isVisible:
- return
- if self.loadignore:
- return
- if status:
- self.call_load_panel.emit(True, "Loading Filament")
- else:
- self.loadignore = True
- self.target_temp = 0
- self.call_load_panel.emit(False, "")
- self._filament_state = self.FilamentStates.LOADED
+ if "state" in status.keys():
+ if not status["state"]:
+ self.target_temp = 0
+ self.call_load_panel.emit(False, "")
+ if self.state == "paused":
+ self.request_change_tab.emit(0)
+ return
+ self.call_load_panel.emit(
+ True, f"Loading Filament\n{status['step'].capitalize()}"
+ )
self.handle_filament_state()
- @QtCore.pyqtSlot(bool, name="on_unload_filament")
- def on_unload_filament(self, status: bool):
+ @QtCore.pyqtSlot(dict, name="on_unload_filament")
+ def on_unload_filament(self, status: dict):
"""Handle unload filament object updated"""
- if not self.isVisible:
- return
- if self.unloadignore:
- return
- if status:
- self.call_load_panel.emit(True, "Unloading Filament")
- else:
- self.unloadignore = True
- self.call_load_panel.emit(False, "")
- self.target_temp = 0
- self._filament_state = self.FilamentStates.UNLOADED
+ if "state" in status.keys():
+ if not status["state"]:
+ self.target_temp = 0
+ self.call_load_panel.emit(False, "")
+ return
+ self.call_load_panel.emit(
+ True, f"Unloading Filament\n{status['step'].capitalize()}"
+ )
self.handle_filament_state()
@QtCore.pyqtSlot(int, int, name="load_filament")
- def load_filament(self, toolhead: int = 0, temp: int = 220) -> None:
+ def load_filament(
+ self, toolhead: int = 0, filament: FilamentTypes = FilamentTypes.UNKNOWN
+ ) -> None:
"""Handle load filament buttons clicked"""
if not self.isVisible:
return
@@ -194,9 +203,11 @@ def load_filament(self, toolhead: int = 0, temp: int = 220) -> None:
message="Filament is already loaded.",
)
return
- self.loadignore = False
self.call_load_panel.emit(True, "Loading Filament")
- self.run_gcode.emit(f"LOAD_FILAMENT TOOLHEAD=load_toolhead TEMPERATURE={temp}")
+ self.run_gcode.emit(
+ f"""SAVE_VARIABLE VARIABLE=filament_type VALUE='"{filament.value.name}"'"""
+ )
+ self.run_gcode.emit(f"LOAD_FILAMENT TEMPERATURE={filament.value.temperature}")
@QtCore.pyqtSlot(str, int, name="unload_filament")
def unload_filament(self, toolhead: int = 0, temp: int = 220) -> None:
@@ -218,21 +229,23 @@ def unload_filament(self, toolhead: int = 0, temp: int = 220) -> None:
return
self.find_routine_objects()
- self.unloadignore = False
self.call_load_panel.emit(True, "Unloading Filament")
+ self.run_gcode.emit(
+ f"""SAVE_VARIABLE VARIABLE=filament_type VALUE='"{FilamentTypes.UNKNOWN.value.name}"'"""
+ )
self.run_gcode.emit(f"UNLOAD_FILAMENT TEMPERATURE={temp}")
def handle_filament_state(self):
"""Handle ui changes on filament states"""
if self._filament_state == self.FilamentStates.LOADED:
- self.panel.filament_page_load_btn.setDisabled(True)
- self.panel.filament_page_load_btn.setDisabled(False)
+ self.panel.filament_page_unload_btn.setEnabled(True)
+ self.panel.filament_page_load_btn.setEnabled(False)
elif self._filament_state == self.FilamentStates.UNLOADED:
- self.panel.filament_page_unload_btn.setDisabled(True)
- self.panel.filament_page_unload_btn.setDisabled(False)
+ self.panel.filament_page_unload_btn.setEnabled(False)
+ self.panel.filament_page_load_btn.setEnabled(True)
else:
- self.panel.filament_page_load_btn.setDisabled(False)
- self.panel.filament_page_unload_btn.setDisabled(False)
+ self.panel.filament_page_load_btn.setEnabled(True)
+ self.panel.filament_page_unload_btn.setEnabled(True)
@property
def filament_state(self):
diff --git a/BlocksScreen/lib/panels/mainWindow.py b/BlocksScreen/lib/panels/mainWindow.py
index 52207142..fffc2679 100644
--- a/BlocksScreen/lib/panels/mainWindow.py
+++ b/BlocksScreen/lib/panels/mainWindow.py
@@ -183,7 +183,7 @@ def __init__(self):
self.ui.filament_type_icon.clicked.connect(
lambda: self.global_change_page(
self.ui.main_content_widget.indexOf(self.ui.filamentTab),
- self.filamentPanel.indexOf(self.filamentPanel.panel.load_page),
+ self.filamentPanel.indexOf(self.filamentPanel),
)
)
self.ui.filament_type_icon.setText("PLA")
@@ -253,11 +253,14 @@ def __init__(self):
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.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.filamentPanel.request_change_tab.connect(self.global_change_tab)
+ self.printPanel.request_change_tab.connect(self.global_change_tab)
self.loadscreen = BasePopup(self, floating=False, dialog=False)
self.loadwidget = LoadingOverlayWidget(
@@ -280,6 +283,8 @@ def __init__(self):
self.file_data.fileinfo.connect(self.cancelpage._show_screen_thumbnail)
self.printPanel.call_cancel_panel.connect(self.handle_cancel_print)
+ self.print_status = "idle"
+
if self.config.has_section("server"):
self.bo_ws_startup.emit()
self.reset_tab_indexes()
@@ -298,13 +303,9 @@ def handle_cancel_print(self, show: bool = True):
self.cancelpage.show()
@QtCore.pyqtSlot(bool, str, name="show-load-page")
- def show_LoadScreen(self, show: bool = True, msg: str = ""):
+ def show_loadscreen(self, show: bool = True, msg: str = ""):
"""Show or hide the loading overlay, guarded by the calling panel's visibility."""
_sender = self.sender()
-
- if _sender == self.filamentPanel:
- if not self.filamentPanel.isVisible():
- return
if _sender == self.controlPanel:
if not self.controlPanel.isVisible():
return
@@ -314,7 +315,6 @@ def show_LoadScreen(self, show: bool = True, msg: str = ""):
if _sender == self.utilitiesPanel:
if not self.utilitiesPanel.isVisible():
return
-
self.loadwidget.set_status_message(msg)
if show:
self.loadscreen.show()
@@ -348,8 +348,6 @@ def on_cancel_print(self):
self.enable_tab_bar()
self.ui.extruder_temp_display.clicked.disconnect()
self.ui.bed_temp_display.clicked.disconnect()
- self.ui.filament_type_icon.setDisabled(False)
- self.ui.nozzle_size_icon.setDisabled(False)
self.ui.extruder_temp_display.clicked.connect(
lambda: self.global_change_page(
self.ui.main_content_widget.indexOf(self.ui.controlTab),
@@ -378,9 +376,6 @@ def enable_tab_bar(self) -> bool:
bool: True if the TabBar was disabled
"""
- self.ui.main_content_widget.setTabEnabled(
- self.ui.main_content_widget.indexOf(self.ui.filamentTab), True
- )
self.ui.main_content_widget.setTabEnabled(
self.ui.main_content_widget.indexOf(self.ui.controlTab), True
)
@@ -390,9 +385,6 @@ def enable_tab_bar(self) -> bool:
self.ui.header_main_layout.setEnabled(True)
return all(
[
- not self.ui.main_content_widget.isTabEnabled(
- self.ui.main_content_widget.indexOf(self.ui.filamentTab)
- ),
not self.ui.main_content_widget.isTabEnabled(
self.ui.main_content_widget.indexOf(self.ui.controlTab)
),
@@ -414,9 +406,6 @@ def disable_tab_bar(self) -> bool:
Returns:
boolean: True if the TabBar was disabled
"""
- self.ui.main_content_widget.setTabEnabled(
- self.ui.main_content_widget.indexOf(self.ui.filamentTab), False
- )
self.ui.main_content_widget.setTabEnabled(
self.ui.main_content_widget.indexOf(self.ui.controlTab), False
)
@@ -426,9 +415,6 @@ def disable_tab_bar(self) -> bool:
self.ui.header_main_layout.setEnabled(False)
return all(
[
- not self.ui.main_content_widget.isTabEnabled(
- self.ui.main_content_widget.indexOf(self.ui.filamentTab)
- ),
not self.ui.main_content_widget.isTabEnabled(
self.ui.main_content_widget.indexOf(self.ui.controlTab)
),
@@ -467,12 +453,18 @@ def reset_tab_indexes(self):
Used to grantee all tabs reset to their
first page once the user leaves the tab
"""
- self.update_page.hide()
- self.printPanel.setCurrentIndex(0)
self.filamentPanel.setCurrentIndex(0)
+
+ if self.print_status == "printing":
+ self.printPanel.setCurrentIndex(
+ self.printPanel.indexOf(self.printPanel.jobStatusPage_widget)
+ )
+ return
+ self.printPanel.setCurrentIndex(0)
self.controlPanel.setCurrentIndex(0)
self.utilitiesPanel.setCurrentIndex(0)
self.networkPanel.setCurrentIndex(0)
+ self.update_page.hide()
def current_panel_index(self) -> int:
"""Helper function to get the index of the current page in the current tab
@@ -533,7 +525,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.show_LoadScreen(False)
+ self.show_loadscreen(False)
current_page = [
self.ui.main_content_widget.currentIndex(),
self.current_panel_index(),
@@ -549,6 +541,22 @@ def global_change_page(self, tab_index: int, panel_index: int) -> None:
f"Requested page change -> Tab index : {requested_page[0]} | panel index : {requested_page[1]}",
)
+ def global_change_tab(self, tab_index: int) -> None:
+ """Changes the current tab while keeping the current panel page index if possible
+
+ Args:
+ tab_index (int): The index of the tab to change to
+ """
+ if not isinstance(tab_index, int):
+ _logger.debug(
+ "Tab index argument expected type int, got %s", str(type(tab_index))
+ )
+ return
+ self.ui.main_content_widget.setCurrentIndex(tab_index)
+ _logger.debug(
+ f"Requested tab change -> Tab index : {tab_index}",
+ )
+
@QtCore.pyqtSlot(name="request-back")
def global_back(self) -> None:
"""Requests to go back a page globally"""
@@ -868,11 +876,10 @@ def event(self, event: QtCore.QEvent) -> bool:
return True
return False
if event.type() == events.PrintStart.type():
+ self.print_status = "printing"
self.disable_tab_bar()
self.ui.extruder_temp_display.clicked.disconnect()
self.ui.bed_temp_display.clicked.disconnect()
- self.ui.filament_type_icon.setDisabled(True)
- self.ui.nozzle_size_icon.setDisabled(True)
self.ui.extruder_temp_display.clicked.connect(
lambda: self.global_change_page(
self.ui.main_content_widget.indexOf(self.ui.printTab),
@@ -892,13 +899,12 @@ def event(self, event: QtCore.QEvent) -> bool:
events.PrintComplete.type(),
events.PrintCancelled.type(),
):
+ self.print_status = "idle"
if event.type() == events.PrintCancelled.type():
self.handle_cancel_print()
self.enable_tab_bar()
self.ui.extruder_temp_display.clicked.disconnect()
self.ui.bed_temp_display.clicked.disconnect()
- self.ui.filament_type_icon.setDisabled(False)
- self.ui.nozzle_size_icon.setDisabled(False)
self.ui.extruder_temp_display.clicked.connect(
lambda: self.global_change_page(
self.ui.main_content_widget.indexOf(self.ui.controlTab),
diff --git a/BlocksScreen/lib/panels/printTab.py b/BlocksScreen/lib/panels/printTab.py
index 693de4d1..8d63c8ed 100644
--- a/BlocksScreen/lib/panels/printTab.py
+++ b/BlocksScreen/lib/panels/printTab.py
@@ -56,6 +56,10 @@ class PrintTab(QtWidgets.QStackedWidget):
int, int, name="request_change_page"
)
+ request_change_tab: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal(
+ int, name="request_change_tab"
+ )
+
run_gcode_signal: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal(
str, name="run_gcode"
)
@@ -206,6 +210,9 @@ def __init__(
self.addWidget(self.babystepPage)
self.tune_page = TuneWidget(self)
self.addWidget(self.tune_page)
+ self.tune_page.tune_change_filament_btn.clicked.connect(
+ lambda: self.request_change_tab.emit(1)
+ )
self.jobStatusPage_widget.tune_clicked.connect(
lambda: self.change_page(self.indexOf(self.tune_page))
)
diff --git a/BlocksScreen/lib/printer.py b/BlocksScreen/lib/printer.py
index c6c76fbc..67aecb55 100644
--- a/BlocksScreen/lib/printer.py
+++ b/BlocksScreen/lib/printer.py
@@ -30,6 +30,8 @@ class Printer(QtCore.QObject):
[str, float], [str, str], name="idle_timeout_update"
)
+ save_variables_update = QtCore.pyqtSignal(dict, name="save_variables_update")
+
gcode_move_update = QtCore.pyqtSignal(
[str, list], [str, float], [str, bool], name="gcode_move_update"
)
@@ -62,8 +64,8 @@ class Printer(QtCore.QObject):
gcode_macro_update = QtCore.pyqtSignal(str, dict, name="gcode_macro_update")
webhooks_update = QtCore.pyqtSignal(str, str, name="webhooks_update")
- load_filament_update = QtCore.pyqtSignal(bool, name="load_filament_update")
- unload_filament_update = QtCore.pyqtSignal(bool, name="unload_filament_update")
+ load_filament_update = QtCore.pyqtSignal(dict, name="load_filament_update")
+ unload_filament_update = QtCore.pyqtSignal(dict, name="unload_filament_update")
query_printer_object = QtCore.pyqtSignal(dict, name="query_printer_object")
save_config_pending: typing.ClassVar[QtCore.pyqtSignal] = QtCore.pyqtSignal(
@@ -328,6 +330,11 @@ def _webhooks_object_updated(self, value: dict, name: str = "webhooks") -> None:
e,
)
+ def _save_variables_object_updated(
+ self, value: dict, name: str = "saved_variables"
+ ) -> None:
+ self.save_variables_update.emit(value)
+
def _gcode_move_object_updated(self, value: dict, name: str = "gcode_move") -> None:
if "speed_factor" in value.keys():
self.gcode_move_update[str, float].emit(
@@ -734,9 +741,7 @@ def _temperature_probe_object_updated(self, values: dict, name: str) -> None:
# TODO: testing needed here idk if does work
def _unload_filament_object_updated(self, values: dict, name: str) -> None:
- if "state" in values.keys():
- self.unload_filament_update[bool].emit(values["state"])
+ self.unload_filament_update[dict].emit(values)
def _load_filament_object_updated(self, values: dict, name: str) -> None:
- if "state" in values.keys():
- self.load_filament_update[bool].emit(values["state"])
+ self.load_filament_update[dict].emit(values)
diff --git a/BlocksScreen/lib/ui/filamentStackedWidget.ui b/BlocksScreen/lib/ui/filamentStackedWidget.ui
index e9d359a6..c418ca80 100644
--- a/BlocksScreen/lib/ui/filamentStackedWidget.ui
+++ b/BlocksScreen/lib/ui/filamentStackedWidget.ui
@@ -75,10 +75,26 @@
-
+
-
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Minimum
+
+
+
+ 60
+ 0
+
+
+
+
-
-
+
0
0
@@ -118,6 +134,69 @@
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 60
+ 60
+
+
+
+
+ 60
+ 60
+
+
+
+
+ Momcake
+ 20
+ false
+ PreferAntialias
+
+
+
+ false
+
+
+ true
+
+
+ Qt::NoContextMenu
+
+
+ Qt::LeftToRight
+
+
+
+
+
+ Back
+
+
+ false
+
+
+ true
+
+
+ menu_btn
+
+
+ icon
+
+
+ :/ui/media/btn_icons/back.svg
+
+
+
-
@@ -137,125 +216,6 @@
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 600
- 80
-
-
-
-
- 600
- 80
-
-
-
- QFrame::StyledPanel
-
-
- QFrame::Raised
-
-
-
-
- 20
- 20
- 201
- 41
-
-
-
-
- 0
- 0
-
-
-
-
- 280
- 60
-
-
-
-
- 15
-
-
-
- background: transparent; color:white ;
-
-
- Filament Name
-
-
- Qt::AlignCenter
-
-
- Qt::NoTextInteraction
-
-
-
-
-
- 260
- 10
- 321
- 60
-
-
-
-
- 0
- 60
-
-
-
-
- 16777215
- 60
-
-
-
-
- 13
-
-
-
- color:white
-
-
- ...
-
-
- Qt::AlignCenter
-
-
-
-
-
- 240
- 10
- 3
- 61
-
-
-
- color:white
-
-
- Qt::Vertical
-
-
-
-
-
@@ -1624,6 +1584,8 @@ Filament
+
+
diff --git a/BlocksScreen/lib/ui/filamentStackedWidget_ui.py b/BlocksScreen/lib/ui/filamentStackedWidget_ui.py
index bd545139..8ec597b2 100644
--- a/BlocksScreen/lib/ui/filamentStackedWidget_ui.py
+++ b/BlocksScreen/lib/ui/filamentStackedWidget_ui.py
@@ -1,6 +1,6 @@
-# Form implementation generated from reading ui file '/home/levi/main/Blocks_Screen/BlocksScreen/lib/ui/filamentStackedWidget.ui'
+# Form implementation generated from reading ui file 'filamentStackedWidget.ui'
#
-# Created by: PyQt6 UI code generator 6.7.1
+# Created by: PyQt6 UI code generator 6.10.0
#
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
# run again. Do not edit this file unless you know what you are doing.
@@ -36,8 +36,10 @@ def setupUi(self, filamentStackedWidget):
self.verticalLayout.addItem(spacerItem)
self.filament_page_header_layout = QtWidgets.QHBoxLayout()
self.filament_page_header_layout.setObjectName("filament_page_header_layout")
+ self.spacerItem1 = QtWidgets.QSpacerItem(60, 0, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.filament_page_header_layout.addItem(self.spacerItem1)
self.filament_page_header_title = QtWidgets.QLabel(parent=self.filament_control_page)
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Maximum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.filament_page_header_title.sizePolicy().hasHeightForWidth())
@@ -53,54 +55,39 @@ def setupUi(self, filamentStackedWidget):
self.filament_page_header_title.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.filament_page_header_title.setObjectName("filament_page_header_title")
self.filament_page_header_layout.addWidget(self.filament_page_header_title, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.main_back_button = IconButton(parent=self.filament_control_page)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.main_back_button.sizePolicy().hasHeightForWidth())
+ self.main_back_button.setSizePolicy(sizePolicy)
+ self.main_back_button.setMinimumSize(QtCore.QSize(60, 60))
+ self.main_back_button.setMaximumSize(QtCore.QSize(60, 60))
+ font = QtGui.QFont()
+ font.setFamily("Momcake")
+ font.setPointSize(20)
+ font.setItalic(False)
+ font.setStyleStrategy(QtGui.QFont.StyleStrategy.PreferAntialias)
+ self.main_back_button.setFont(font)
+ self.main_back_button.setMouseTracking(False)
+ self.main_back_button.setTabletTracking(True)
+ self.main_back_button.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu)
+ self.main_back_button.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight)
+ self.main_back_button.setStyleSheet("")
+ self.main_back_button.setAutoDefault(False)
+ self.main_back_button.setFlat(True)
+ self.main_back_button.setProperty("icon_pixmap", QtGui.QPixmap(":/ui/media/btn_icons/back.svg"))
+ self.main_back_button.setObjectName("main_back_button")
+ self.filament_page_header_layout.addWidget(self.main_back_button)
self.verticalLayout.addLayout(self.filament_page_header_layout)
- spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
- self.verticalLayout.addItem(spacerItem1)
+ spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.verticalLayout.addItem(spacerItem2)
self.verticalLayout_4 = QtWidgets.QVBoxLayout()
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.verticalLayout_3 = QtWidgets.QVBoxLayout()
self.verticalLayout_3.setObjectName("verticalLayout_3")
- self.frame_8 = BlocksCustomFrame(parent=self.filament_control_page)
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.frame_8.sizePolicy().hasHeightForWidth())
- self.frame_8.setSizePolicy(sizePolicy)
- self.frame_8.setMinimumSize(QtCore.QSize(600, 80))
- self.frame_8.setMaximumSize(QtCore.QSize(600, 80))
- self.frame_8.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
- self.frame_8.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
- self.frame_8.setObjectName("frame_8")
- self.filament_page_info_content_6 = QtWidgets.QLabel(parent=self.frame_8)
- self.filament_page_info_content_6.setGeometry(QtCore.QRect(20, 20, 201, 41))
- self.filament_page_info_content_6.setMinimumSize(QtCore.QSize(0, 0))
- self.filament_page_info_content_6.setMaximumSize(QtCore.QSize(280, 60))
- font = QtGui.QFont()
- font.setPointSize(15)
- self.filament_page_info_content_6.setFont(font)
- self.filament_page_info_content_6.setStyleSheet("background: transparent; color:white ;")
- self.filament_page_info_content_6.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
- self.filament_page_info_content_6.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
- self.filament_page_info_content_6.setObjectName("filament_page_info_content_6")
- self.label = QtWidgets.QLabel(parent=self.frame_8)
- self.label.setGeometry(QtCore.QRect(260, 10, 321, 60))
- self.label.setMinimumSize(QtCore.QSize(0, 60))
- self.label.setMaximumSize(QtCore.QSize(16777215, 60))
- font = QtGui.QFont()
- font.setPointSize(13)
- self.label.setFont(font)
- self.label.setStyleSheet("color:white")
- self.label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
- self.label.setObjectName("label")
- self.line = QtWidgets.QFrame(parent=self.frame_8)
- self.line.setGeometry(QtCore.QRect(240, 10, 3, 61))
- self.line.setStyleSheet("color:white")
- self.line.setFrameShape(QtWidgets.QFrame.Shape.VLine)
- self.line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
- self.line.setObjectName("line")
- self.verticalLayout_3.addWidget(self.frame_8, 0, QtCore.Qt.AlignmentFlag.AlignHCenter)
- spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
- self.verticalLayout_3.addItem(spacerItem2)
+ spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.verticalLayout_3.addItem(spacerItem3)
self.frame_7 = BlocksCustomFrame(parent=self.filament_control_page)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
sizePolicy.setHorizontalStretch(0)
@@ -138,8 +125,8 @@ def setupUi(self, filamentStackedWidget):
self.line_2.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
self.line_2.setObjectName("line_2")
self.verticalLayout_3.addWidget(self.frame_7, 0, QtCore.Qt.AlignmentFlag.AlignHCenter)
- spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
- self.verticalLayout_3.addItem(spacerItem3)
+ spacerItem4 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.verticalLayout_3.addItem(spacerItem4)
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.filament_page_load_btn = BlocksCustomButton(parent=self.filament_control_page)
@@ -193,10 +180,10 @@ def setupUi(self, filamentStackedWidget):
self.verticalLayout_3.addLayout(self.horizontalLayout)
self.verticalLayout_4.addLayout(self.verticalLayout_3)
self.verticalLayout.addLayout(self.verticalLayout_4)
- spacerItem4 = QtWidgets.QSpacerItem(20, 26, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum)
- self.verticalLayout.addItem(spacerItem4)
- spacerItem5 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ spacerItem5 = QtWidgets.QSpacerItem(20, 26, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum)
self.verticalLayout.addItem(spacerItem5)
+ spacerItem6 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.verticalLayout.addItem(spacerItem6)
filamentStackedWidget.addWidget(self.filament_control_page)
self.load_page = QtWidgets.QWidget()
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.MinimumExpanding, QtWidgets.QSizePolicy.Policy.MinimumExpanding)
@@ -210,12 +197,12 @@ def setupUi(self, filamentStackedWidget):
self.load_page.setObjectName("load_page")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.load_page)
self.verticalLayout_2.setObjectName("verticalLayout_2")
- spacerItem6 = QtWidgets.QSpacerItem(20, 24, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum)
- self.verticalLayout_2.addItem(spacerItem6)
+ spacerItem7 = QtWidgets.QSpacerItem(20, 24, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.verticalLayout_2.addItem(spacerItem7)
self.load_page_header_layout = QtWidgets.QHBoxLayout()
self.load_page_header_layout.setObjectName("load_page_header_layout")
- spacerItem7 = QtWidgets.QSpacerItem(60, 20, QtWidgets.QSizePolicy.Policy.Maximum, QtWidgets.QSizePolicy.Policy.Minimum)
- self.load_page_header_layout.addItem(spacerItem7)
+ spacerItem8 = QtWidgets.QSpacerItem(60, 20, QtWidgets.QSizePolicy.Policy.Maximum, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.load_page_header_layout.addItem(spacerItem8)
self.load_header_page_title = QtWidgets.QLabel(parent=self.load_page)
self.load_header_page_title.setMinimumSize(QtCore.QSize(0, 60))
font = QtGui.QFont()
@@ -251,8 +238,8 @@ def setupUi(self, filamentStackedWidget):
self.load_header_back_button.setObjectName("load_header_back_button")
self.load_page_header_layout.addWidget(self.load_header_back_button)
self.verticalLayout_2.addLayout(self.load_page_header_layout)
- spacerItem8 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
- self.verticalLayout_2.addItem(spacerItem8)
+ spacerItem9 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.verticalLayout_2.addItem(spacerItem9)
self.load_page_content_layout = QtWidgets.QGridLayout()
self.load_page_content_layout.setContentsMargins(5, 5, 5, 5)
self.load_page_content_layout.setHorizontalSpacing(6)
@@ -428,8 +415,8 @@ def setupUi(self, filamentStackedWidget):
self.load_custom_btn.setObjectName("load_custom_btn")
self.load_page_footer_layout.addWidget(self.load_custom_btn)
self.verticalLayout_2.addLayout(self.load_page_footer_layout)
- spacerItem9 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
- self.verticalLayout_2.addItem(spacerItem9)
+ spacerItem10 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.verticalLayout_2.addItem(spacerItem10)
filamentStackedWidget.addWidget(self.load_page)
self.custom_filament_page = QtWidgets.QWidget()
self.custom_filament_page.setMinimumSize(QtCore.QSize(710, 400))
@@ -587,8 +574,9 @@ def retranslateUi(self, filamentStackedWidget):
filamentStackedWidget.setWindowTitle(_translate("filamentStackedWidget", "StackedWidget"))
self.filament_page_header_title.setText(_translate("filamentStackedWidget", "Filament Control"))
self.filament_page_header_title.setProperty("class", _translate("filamentStackedWidget", "title_text"))
- self.filament_page_info_content_6.setText(_translate("filamentStackedWidget", "Filament Name"))
- self.label.setText(_translate("filamentStackedWidget", "..."))
+ self.main_back_button.setText(_translate("filamentStackedWidget", "Back"))
+ self.main_back_button.setProperty("class", _translate("filamentStackedWidget", "menu_btn"))
+ self.main_back_button.setProperty("button_type", _translate("filamentStackedWidget", "icon"))
self.filament_page_info_title_6.setText(_translate("filamentStackedWidget", "Loaded Filament Type"))
self.label_2.setText(_translate("filamentStackedWidget", "..."))
self.filament_page_load_btn.setText(_translate("filamentStackedWidget", "Load"))
@@ -638,3 +626,13 @@ def retranslateUi(self, filamentStackedWidget):
from lib.utils.blocks_button import BlocksCustomButton
from lib.utils.blocks_frame import BlocksCustomFrame
from lib.utils.icon_button import IconButton
+
+
+if __name__ == "__main__":
+ import sys
+ app = QtWidgets.QApplication(sys.argv)
+ filamentStackedWidget = QtWidgets.QStackedWidget()
+ ui = Ui_filamentStackedWidget()
+ ui.setupUi(filamentStackedWidget)
+ filamentStackedWidget.show()
+ sys.exit(app.exec())