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
39 changes: 27 additions & 12 deletions BlocksScreen/lib/panels/widgets/basicFilamentPanel.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import logging
from functools import partial

from devices.amu.models import FilamentPos, GateStatus
from lib.filament import Filament
from lib.panels.widgets.basePopup import BasePopup
from lib.panels.widgets.popupDialogWidget import Popup
Expand Down Expand Up @@ -55,6 +56,7 @@ def __init__(
self.filament_buttons_list = []
self.mmu_configured = False
self.load_popup = load_popup
self._mmu_state = None
self._setupUi()
self.filament_state = self.FilamentStates.UNKNOWN

Expand Down Expand Up @@ -262,10 +264,25 @@ def on_mmu_state_changed(self, mmu_state):
btn.clicked.connect(partial(self.open_pre_gate_popup, _filament_type))
self.mmu_configured = True

if mmu_state.filament == "Loaded":
self.filament_state = self.FilamentStates.LOADED
else:
self._mmu_state = mmu_state
if mmu_state.filament_pos == FilamentPos.UNKNOWN:
self.filament_state = self.FilamentStates.UNKNOWN
elif mmu_state.filament_pos == FilamentPos.UNLOADED:
self.filament_state = self.FilamentStates.UNLOADED
else:
self.filament_state = self.FilamentStates.LOADED

@property
def _gate_has_filament(self) -> bool:
_gate = self._mmu_state.current_gate_info if self._mmu_state else None
return _gate is None or _gate.status != GateStatus.EMPTY

@property
def _mmu_busy(self) -> bool:
return self._mmu_state is not None and self._mmu_state.action not in (
"",
"Idle",
)

@property
def filament_state(self):
Expand All @@ -274,15 +291,13 @@ def filament_state(self):
@filament_state.setter
def filament_state(self, update: FilamentStates) -> None:
self._filament_state = update
if update is self.FilamentStates.LOADED:
self.filament_page_unload_btn.setEnabled(True)
self.filament_page_load_btn.setEnabled(False)
elif update is self.FilamentStates.UNLOADED:
self.filament_page_unload_btn.setEnabled(False)
self.filament_page_load_btn.setEnabled(True)
else:
self.filament_page_load_btn.setEnabled(True)
self.filament_page_unload_btn.setEnabled(True)
_idle = not self._mmu_busy
_loaded = update is self.FilamentStates.LOADED
_unloaded = update is self.FilamentStates.UNLOADED
self.filament_page_unload_btn.setEnabled(_idle and not _unloaded)
self.filament_page_load_btn.setEnabled(
_idle and not _loaded and self._gate_has_filament
)

def change_page(self, index: int) -> None:
"""Switch this stacked widget to the page at *index*."""
Expand Down
23 changes: 18 additions & 5 deletions tests/widgets/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,26 @@
if str(_project_root) not in sys.path:
sys.path.insert(0, str(_project_root))

for _pkg in ("lib", "lib.panels", "lib.panels.widgets", "lib.utils"):
for _pkg in (
"lib",
"lib.panels",
"lib.panels.widgets",
"lib.utils",
"devices",
"devices.amu",
"devices.amu.models",
):
sys.modules.pop(_pkg, None)

_lib_mod = types.ModuleType("lib")
_lib_mod.__path__ = [str(_project_root / "BlocksScreen" / "lib")]
_lib_mod.__package__ = "lib"
sys.modules["lib"] = _lib_mod
for _name, _parts in (
("lib", ("lib",)),
("devices", ("devices",)),
("devices.amu", ("devices", "amu")),
):
_m = types.ModuleType(_name)
_m.__path__ = [str(_project_root.joinpath("BlocksScreen", *_parts))]
_m.__package__ = _name
sys.modules[_name] = _m

for _mod_name in ("events", "helper_methods"):
_mod_path = _project_root / "BlocksScreen" / f"{_mod_name}.py"
Expand Down
Loading