import logging import sys from PyQt6 import QtCore from PyQt6.QtCore import QByteArray from PyQt6.QtWidgets import QMainWindow, QApplication, QFrame from Main import Ui_MainWindow from utils.Msg import KillMsg, Msg, ImageArgMsg, SelectSeqMsg, SeqIdMinMax, MoveAxisMsg, SeqListMsg, SetBaseMsg, \ SeqMetaMsg, SetPlayMode, DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, SetDeviceEnabledMsg, \ SetDeviceConnectedMsg, DeviceConfigListMsg, SetDeviceConfigMsg, SetRecordMsg from ZMQReceiver import ZMQReceiver from nodes.Node import Node from utils.RfFile import RfSequenceMeta class Adv(QMainWindow, Ui_MainWindow): def __init__(self, p: Node, parent=None): super(Adv, self).__init__(parent) self.p = p self.setupUi(self) zmq_receiver = ZMQReceiver(self) zmq_receiver.zmq_event.connect(self.on_zmq_event) zmq_receiver.start() self.horizontalSlider.valueChanged.connect(self.vc) self.comboBox.currentIndexChanged.connect(self.cbc) self.s_sid.valueChanged.connect(self.c_sid) self.arg = ImageArgMsg('ui', v1=1499) self.b_base.clicked.connect(lambda: self.p.send(SetBaseMsg(self.l_base.text()))) self.seq_meta: RfSequenceMeta | None = None self.b_exit.clicked.connect(lambda: self.p.send(KillMsg(''))) self.b_play_live.clicked.connect(self.on_play_live) self.b_play_playback.clicked.connect(self.on_play_playback) self.b_record.clicked.connect(self.on_record) self.record = False self.device_connected = False self.device_enabled = False self.b_device_enabled.clicked.connect(lambda: self.p.send(SetDeviceEnabledMsg(not self.device_enabled))) self.b_device_connected.clicked.connect(lambda: self.p.send(SetDeviceConnectedMsg(not self.device_connected))) self.c_seq_meta.currentIndexChanged.connect(self.on_m) def on_play_live(self): self.b_play_live.setStyleSheet('background-color: red;') self.b_play_playback.setStyleSheet('') self.b_record.setEnabled(True) self.l_record_commit.setEnabled(True) self.p.send(SeqMetaMsg(self.c_seq_meta.itemText(self.c_seq_meta.currentIndex()))) self.p.send(SetPlayMode('live')) self.comboBox.setEnabled(False) def on_play_playback(self): self.b_play_live.setStyleSheet('') self.b_play_playback.setStyleSheet('background-color: red;') self.b_record.setEnabled(False) self.l_record_commit.setEnabled(False) self.p.send(SeqMetaMsg(self.comboBox.itemText(self.comboBox.currentIndex()))) self.p.send(SetPlayMode('playback')) self.comboBox.setEnabled(True) def on_record(self): if self.record: self.p.send(SetRecordMsg(False)) self.record = False self.b_record.setStyleSheet('') else: if self.l_record_commit.text() != '': self.p.send(SetRecordMsg(True, self.l_record_commit.text())) self.record = True self.b_record.setStyleSheet('background-color: red;') def on_zmq_event(self, msg: QByteArray): msg = Msg.decode_msg(msg.data()) if isinstance(msg, KillMsg): if msg.name == '': self.close() elif isinstance(msg, ImageArgMsg): self.horizontalSlider.setValue(msg.v1) elif isinstance(msg, MoveAxisMsg): match msg.axis: case 'S': self.s_sid.setValue(msg.value) elif isinstance(msg, SeqIdMinMax): self.s_sid.setMinimum(msg.min) self.s_sid.setMaximum(msg.max) self.s_sid.setValue(msg.min) elif isinstance(msg, SeqListMsg): self.comboBox.setEnabled(True) self.comboBox.clear() for name in msg.value: self.comboBox.addItem(name) self.p.send(SelectSeqMsg(self.comboBox.itemText(self.comboBox.currentIndex()))) self.b_play_playback.setEnabled(True) elif isinstance(msg, SeqMetaMsg): self.seq_meta = RfSequenceMeta.from_name(msg.s) self.horizontalSlider.setMaximum(max(self.seq_meta.shape)) elif isinstance(msg, DeviceConnectedMsg): if msg.value: self.b_device_connected.setStyleSheet("background-color: red;") self.device_connected = True else: self.b_device_connected.setStyleSheet("") self.device_connected = False elif isinstance(msg, DeviceEnabledMsg): if msg.value: self.b_device_enabled.setStyleSheet("background-color: red;") self.device_enabled = True else: self.b_device_enabled.setStyleSheet("") self.device_enabled = False elif isinstance(msg, DeviceOnlineMsg): if msg.value: self.l_online.setStyleSheet("") self.l_online.setText("Device Online") else: self.l_online.setStyleSheet("background-color: pink;") self.l_online.setText("Device Offline") elif isinstance(msg, DeviceConfigListMsg): for name, txt in msg.arr: self.c_seq_meta.addItem(name, txt) @QtCore.pyqtSlot(int) def vc(self, v): if self.horizontalSlider.sender() is None: self.arg.v1 = v self.p.send(self.arg) @QtCore.pyqtSlot(int) def cbc(self, v): if self.comboBox.sender() is None: self.p.send(SelectSeqMsg(self.comboBox.itemText(v))) @QtCore.pyqtSlot(int) def c_sid(self, v): if self.s_sid.sender() is None: self.p.send(MoveAxisMsg('ui', 'S', v)) @QtCore.pyqtSlot(int) def on_m(self, v): if self.c_seq_meta.sender() is None or isinstance(self.c_seq_meta.sender(), QFrame): self.p.send(SetDeviceConfigMsg(self.c_seq_meta.itemData(v))) self.p.send(SeqMetaMsg(self.c_seq_meta.itemText(v))) class MainUI(Node): topics = [ImageArgMsg, SeqIdMinMax, MoveAxisMsg, SeqListMsg, SeqMetaMsg, DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, DeviceConfigListMsg] def __init__(self, level=logging.INFO): super().__init__(level=level) def loop(self): app = QApplication(sys.argv) MainWindow = Adv(self) # MainWindow.move(int(px), int(py)) # MainWindow.resize(int(sx), int(sy)) MainWindow.show() app.exec()