1010from PyQt6 import QtCore , QtGui , QtWidgets
1111
1212
13+ class FilamentTypes (enum .Enum ):
14+ PLA = Filament (name = "PLA" , temperature = 220 )
15+ PETG = Filament (name = "PETG" , temperature = 240 )
16+ ABS = Filament (name = "ABS" , temperature = 250 )
17+ HIPS = Filament (name = "HIPS" , temperature = 250 )
18+ NYLON = Filament (name = "NYLON" , temperature = 270 )
19+ TPU = Filament (name = "TPU" , temperature = 230 )
20+ UNKNOWN = Filament (name = "UNKNOWN" , temperature = 250 )
21+
22+
1323class FilamentTab (QtWidgets .QStackedWidget ):
1424 request_filament_change_page = QtCore .pyqtSignal (name = "filament_change_page" )
1525 request_filament_load = QtCore .pyqtSignal (name = "filament_load_t1" )
@@ -19,9 +29,6 @@ class FilamentTab(QtWidgets.QStackedWidget):
1929 run_gcode = QtCore .pyqtSignal (str , name = "run_gcode" )
2030 call_load_panel = QtCore .pyqtSignal (bool , str , name = "call-load-panel" )
2131
22- class FilamentTypes (enum .Enum ):
23- PLA = Filament (name = "PLA" , temperature = 220 )
24-
2532 class FilamentStates (enum .Enum ):
2633 LOADED = enum .auto ()
2734 UNLOADED = enum .auto ()
@@ -44,30 +51,30 @@ def __init__(self, parent: QtWidgets.QWidget, printer: Printer, ws, /) -> None:
4451 self .has_load_unload_objects = None
4552 self ._filament_state = self .FilamentStates .UNKNOWN
4653 self ._sensor_states = {}
47- self .filament_type : Filament | None = None
54+ self .filament_type = FilamentTypes . UNKNOWN
4855 self .panel .filament_page_load_btn .clicked .connect (
4956 partial (self .change_page , self .indexOf (self .panel .load_page ))
5057 )
5158 self .panel .custom_filament_header_back_btn .clicked .connect (self .back_button )
5259 self .panel .load_custom_btn .hide ()
5360 self .panel .load_header_back_button .clicked .connect (self .back_button )
5461 self .panel .load_pla_btn .clicked .connect (
55- partial (self .load_filament , toolhead = 0 , temp = 220 )
62+ partial (self .load_filament , toolhead = 0 , filament = FilamentTypes . PLA )
5663 )
5764 self .panel .load_petg_btn .clicked .connect (
58- partial (self .load_filament , toolhead = 0 , temp = 240 )
65+ partial (self .load_filament , toolhead = 0 , filament = FilamentTypes . PETG )
5966 )
6067 self .panel .load_abs_btn .clicked .connect (
61- partial (self .load_filament , toolhead = 0 , temp = 250 )
68+ partial (self .load_filament , toolhead = 0 , filament = FilamentTypes . ABS )
6269 )
6370 self .panel .load_hips_btn .clicked .connect (
64- partial (self .load_filament , toolhead = 0 , temp = 250 )
71+ partial (self .load_filament , toolhead = 0 , filament = FilamentTypes . HIPS )
6572 )
6673 self .panel .load_nylon_btn .clicked .connect (
67- partial (self .load_filament , toolhead = 0 , temp = 270 )
74+ partial (self .load_filament , toolhead = 0 , filament = FilamentTypes . NYLON )
6875 )
6976 self .panel .load_tpu_btn .clicked .connect (
70- partial (self .load_filament , toolhead = 0 , temp = 230 )
77+ partial (self .load_filament , toolhead = 0 , filament = FilamentTypes . TPU )
7178 )
7279 self .panel .filament_page_unload_btn .clicked .connect (
7380 lambda : self .unload_filament (toolhead = 0 , temp = 250 )
@@ -87,6 +94,18 @@ def __init__(self, parent: QtWidgets.QWidget, printer: Printer, ws, /) -> None:
8794 self .loadignore = True
8895 self .unloadignore = True
8996
97+ self .printer .save_variables_update .connect (self .on_save_variables_update )
98+
99+ def on_save_variables_update (self , save_variables : dict ):
100+ """Handle query response"""
101+ for i in FilamentTypes :
102+ if i .value .name in save_variables ["variables" ]["filament_type" ]:
103+ self .filament_type = i
104+ break
105+ else :
106+ self .filament_type = FilamentTypes .UNKNOWN
107+ self .panel .label_2 .setText (self .filament_type .value .name )
108+
90109 @QtCore .pyqtSlot (str , dict , name = "on_print_stats_update" )
91110 @QtCore .pyqtSlot (str , float , name = "on_print_stats_update" )
92111 @QtCore .pyqtSlot (str , str , name = "on_print_stats_update" )
@@ -177,7 +196,9 @@ def on_unload_filament(self, status: bool):
177196 self .handle_filament_state ()
178197
179198 @QtCore .pyqtSlot (int , int , name = "load_filament" )
180- def load_filament (self , toolhead : int = 0 , temp : int = 220 ) -> None :
199+ def load_filament (
200+ self , toolhead : int = 0 , filament : FilamentTypes = FilamentTypes .UNKNOWN
201+ ) -> None :
181202 """Handle load filament buttons clicked"""
182203 if not self .isVisible :
183204 return
@@ -196,7 +217,12 @@ def load_filament(self, toolhead: int = 0, temp: int = 220) -> None:
196217 return
197218 self .loadignore = False
198219 self .call_load_panel .emit (True , "Loading Filament" )
199- self .run_gcode .emit (f"LOAD_FILAMENT TOOLHEAD=load_toolhead TEMPERATURE={ temp } " )
220+ self .run_gcode .emit (
221+ f"""SAVE_VARIABLE VARIABLE=filament_type VALUE='"{ filament .value .name } "'"""
222+ )
223+ self .run_gcode .emit (
224+ f"LOAD_FILAMENT TOOLHEAD=load_toolhead TEMPERATURE={ filament .value .temperature } "
225+ )
200226
201227 @QtCore .pyqtSlot (str , int , name = "unload_filament" )
202228 def unload_filament (self , toolhead : int = 0 , temp : int = 220 ) -> None :
@@ -220,19 +246,22 @@ def unload_filament(self, toolhead: int = 0, temp: int = 220) -> None:
220246 self .find_routine_objects ()
221247 self .unloadignore = False
222248 self .call_load_panel .emit (True , "Unloading Filament" )
249+ self .run_gcode .emit (
250+ f"""SAVE_VARIABLE VARIABLE=filament_type VALUE='"{ FilamentTypes .UNKNOWN .value .name } "'"""
251+ )
223252 self .run_gcode .emit (f"UNLOAD_FILAMENT TEMPERATURE={ temp } " )
224253
225254 def handle_filament_state (self ):
226255 """Handle ui changes on filament states"""
227256 if self ._filament_state == self .FilamentStates .LOADED :
228- self .panel .filament_page_load_btn . setDisabled (True )
229- self .panel .filament_page_load_btn .setDisabled (False )
257+ self .panel .filament_page_unload_btn . setEnabled (True )
258+ self .panel .filament_page_load_btn .setEnabled (False )
230259 elif self ._filament_state == self .FilamentStates .UNLOADED :
231- self .panel .filament_page_unload_btn .setDisabled ( True )
232- self .panel .filament_page_unload_btn . setDisabled ( False )
260+ self .panel .filament_page_unload_btn .setEnabled ( False )
261+ self .panel .filament_page_load_btn . setEnabled ( True )
233262 else :
234- self .panel .filament_page_load_btn .setDisabled ( False )
235- self .panel .filament_page_unload_btn .setDisabled ( False )
263+ self .panel .filament_page_load_btn .setEnabled ( True )
264+ self .panel .filament_page_unload_btn .setEnabled ( True )
236265
237266 @property
238267 def filament_state (self ):
0 commit comments