Skip to content

Commit 876d801

Browse files
authored
Bugfix: wrong state at start (#97)
1 parent 518df56 commit 876d801

1 file changed

Lines changed: 55 additions & 21 deletions

File tree

BlocksScreen/lib/panels/filamentTab.py

Lines changed: 55 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import enum
2+
import typing
23
from 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

Comments
 (0)