11import enum
2+ import typing
23from functools import partial
34
45
@@ -51,6 +52,7 @@ def __init__(self, parent: QtWidgets.QWidget, printer: Printer, ws, /) -> None:
5152 partial (self .change_page , self .indexOf (self .panel .load_page ))
5253 )
5354 self .panel .custom_filament_header_back_btn .clicked .connect (self .back_button )
55+ # REFACTOR self.panel.load_custom_btn.clicked.connect(partial(self.change_page, 2))
5456 self .panel .load_custom_btn .hide ()
5557 self .panel .load_header_back_button .clicked .connect (self .back_button )
5658 self .panel .load_pla_btn .clicked .connect (
@@ -81,24 +83,40 @@ def __init__(self, parent: QtWidgets.QWidget, printer: Printer, ws, /) -> None:
8183 self .printer .filament_switch_sensor_update .connect (
8284 self .on_filament_sensor_update
8385 )
84- self .printer .filament_motion_sensor_update .connect (
85- self .on_filament_sensor_update
86- )
86+
87+ self .printer .print_stats_update [str , str ].connect (self .on_print_stats_update )
88+ self .printer .print_stats_update [str , dict ].connect (self .on_print_stats_update )
89+ self .printer .print_stats_update [str , float ].connect (self .on_print_stats_update )
90+
91+ self .loadignore = True
92+ self .unloadignore = True
93+
94+ @QtCore .pyqtSlot (str , dict , name = "on_print_stats_update" )
95+ @QtCore .pyqtSlot (str , float , name = "on_print_stats_update" )
96+ @QtCore .pyqtSlot (str , str , name = "on_print_stats_update" )
97+ def on_print_stats_update (self , field : str , value : dict | float | str ) -> None :
98+ """
99+ unblocks tabs if on standby
100+ """
101+ if isinstance (value , str ):
102+ if "state" in field :
103+ if value in ("standby" ):
104+ self .loadignore = True
105+ self .unloadignore = True
87106
88107 @QtCore .pyqtSlot (str , str , bool , name = "on_filament_sensor_update" )
89108 def on_filament_sensor_update (self , sensor_name : str , parameter : str , value : bool ):
90- """Handles filament sensor updates"""
91109 if parameter == "filament_detected" :
92110 if not isinstance (value , bool ):
93111 self ._filament_state = self .FilamentStates .UNKNOWN
94112 self .handle_filament_state ()
95113 return
96- self ._sensor_states . update ({ sensor_name : value })
114+ self ._sensor_states [ sensor_name ] = value
97115 if not self ._sensor_states :
98116 new_state = self .FilamentStates .UNKNOWN
99- elif all (self ._sensor_states .values ()): # All sensors detect filament
117+ elif all (self ._sensor_states .values ()):
100118 new_state = self .FilamentStates .LOADED
101- else : # No filament sensors detect filament
119+ else :
102120 new_state = self .FilamentStates .UNLOADED
103121 if self ._filament_state != new_state :
104122 self ._filament_state = new_state
@@ -108,7 +126,6 @@ def on_filament_sensor_update(self, sensor_name: str, parameter: str, value: boo
108126 def on_extruder_update (
109127 self , extruder_name : str , field : str , new_value : float
110128 ) -> None :
111- """Handles extruder updates"""
112129 if not self .isVisible :
113130 return
114131
@@ -127,34 +144,39 @@ def on_extruder_update(
127144
128145 @QtCore .pyqtSlot (bool , name = "on_load_filament" )
129146 def on_load_filament (self , status : bool ):
130- """Handles load filament update"""
147+ if self .loadignore :
148+ self .loadignore = False
149+ return
150+
131151 if not self .isVisible :
132152 return
133153 if status :
134154 self .loadscreen .show ()
135155 else :
136- self .current_temp = 0
156+ self .target_temp = 0
137157 self .loadscreen .hide ()
138158 self ._filament_state = self .FilamentStates .LOADED
139159 self .handle_filament_state ()
140160
141161 @QtCore .pyqtSlot (bool , name = "on_unload_filament" )
142162 def on_unload_filament (self , status : bool ):
143- """Handle unload filament update"""
163+ if self .unloadignore :
164+ self .unloadignore = False
165+ return
166+
144167 if not self .isVisible :
145168 return
146169
147170 if status :
148171 self .loadscreen .show ()
149172 else :
150173 self .loadscreen .hide ()
151- self .current_temp = 0
174+ self .target_temp = 0
152175 self ._filament_state = self .FilamentStates .UNLOADED
153176 self .handle_filament_state ()
154177
155178 @QtCore .pyqtSlot (int , int , name = "load_filament" )
156179 def load_filament (self , toolhead : int = 0 , temp : int = 220 ) -> None :
157- """Issues a signal for load filament macro, handles states accordingly"""
158180 if not self .isVisible :
159181 return
160182
@@ -175,25 +197,26 @@ def load_filament(self, toolhead: int = 0, temp: int = 220) -> None:
175197
176198 @QtCore .pyqtSlot (str , int , name = "unload_filament" )
177199 def unload_filament (self , toolhead : int = 0 , temp : int = 220 ) -> None :
178- """Issues unload filament macro, handles state accordingly"""
179200 if not self .isVisible :
180201 return
202+
181203 if self ._filament_state == self .FilamentStates .UNKNOWN :
182204 self .popup .new_message (
183205 message_type = Popup .MessageType .ERROR ,
184206 message = "Unable to detect whether the filament is loaded or unloaded." ,
185207 )
208+
186209 if self ._filament_state == self .FilamentStates .UNLOADED :
187210 self .popup .new_message (
188211 message_type = Popup .MessageType .ERROR ,
189212 message = "Filament is already unloaded." ,
190213 )
191214 return
215+
192216 self .find_routine_objects ()
193217 self .run_gcode .emit (f"UNLOAD_FILAMENT TEMPERATURE={ temp } " )
194218
195219 def handle_filament_state (self ):
196- """Handles filament states"""
197220 if self ._filament_state == self .FilamentStates .LOADED :
198221 self .panel .filament_page_load_btn .setDisabled (True )
199222 self .panel .filament_page_load_btn .setDisabled (False )
@@ -206,27 +229,37 @@ def handle_filament_state(self):
206229
207230 @property
208231 def filament_state (self ):
209- """Filament state property"""
210232 return self ._filament_state
211233
212234 def change_page (self , index ):
213- """Requests to change page"""
214235 self .request_change_page .emit (1 , index )
215236
216237 def back_button (self ):
217- """Requests going back a page"""
218238 self .request_back .emit ()
219239
240+ def sizeHint (self ) -> QtCore .QSize :
241+ return super ().sizeHint ()
242+
220243 def paintEvent (self , a0 : QtGui .QPaintEvent | None ) -> None :
221- """Paints the widget"""
222244 if self .panel .load_page .isVisible () and self .toolhead_count == 1 :
223245 self .panel .load_header_page_title .setText ("Load Toolhead" )
246+ if a0 is not None :
247+ return super ().paintEvent (a0 )
248+
249+ def removeWidget (self , w : QtWidgets .QWidget | None ) -> None :
250+ if w is not None :
251+ return super ().removeWidget (w )
252+
253+ def resizeEvent (self , a0 : QtGui .QResizeEvent | None ) -> None :
254+ if a0 is not None :
255+ return super ().resizeEvent (a0 )
224256
225257 def find_routine_objects (self ):
226- """Finds if objects necessary for loading and unloading exist"""
227258 if not self .printer :
228- return False
259+ return
260+
229261 _available_objects = self .printer .available_objects .copy ()
262+
230263 if "load_filament" in _available_objects .keys ():
231264 self .has_load_unload_objects = True
232265 return True
@@ -237,4 +270,5 @@ def find_routine_objects(self):
237270 return True
238271 if "gcode_macro UNLOAD_FILAMENT" in _available_objects .keys ():
239272 return True
273+
240274 return False
0 commit comments