flandre/src/nodes/MainUI.py

161 lines
6.5 KiB
Python
Raw Normal View History

2025-01-19 18:27:26 +08:00
import logging
2025-01-06 11:21:04 +08:00
import sys
from PyQt6 import QtCore
from PyQt6.QtCore import QByteArray
2025-01-19 18:27:26 +08:00
from PyQt6.QtWidgets import QMainWindow, QApplication, QFrame
2025-01-06 11:21:04 +08:00
from Main import Ui_MainWindow
2025-01-19 18:27:26 +08:00
from utils.Msg import KillMsg, Msg, ImageArgMsg, SelectSeqMsg, SeqIdMinMax, MoveAxisMsg, SeqListMsg, SetBaseMsg, \
SeqMetaMsg, SetPlayMode, DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, SetDeviceEnabledMsg, \
2025-01-19 18:49:41 +08:00
SetDeviceConnectedMsg, DeviceConfigListMsg, SetDeviceConfigMsg, SetRecordMsg
2025-01-06 11:21:04 +08:00
from ZMQReceiver import ZMQReceiver
from nodes.Node import Node
2025-01-19 18:27:26 +08:00
from utils.RfFile import RfSequenceMeta
2025-01-06 11:21:04 +08:00
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)
2025-01-19 18:27:26 +08:00
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:
2025-01-19 18:49:41 +08:00
self.p.send(SetRecordMsg(False))
2025-01-19 18:27:26 +08:00
self.record = False
self.b_record.setStyleSheet('')
else:
2025-01-19 18:49:41 +08:00
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;')
2025-01-06 11:21:04 +08:00
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)
2025-01-19 18:27:26 +08:00
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)
2025-01-06 11:21:04 +08:00
@QtCore.pyqtSlot(int)
def vc(self, v):
if self.horizontalSlider.sender() is None:
2025-01-19 18:27:26 +08:00
self.arg.v1 = v
self.p.send(self.arg)
@QtCore.pyqtSlot(int)
def cbc(self, v):
2025-01-19 19:04:27 +08:00
if self.comboBox.sender() is None or isinstance(self.comboBox.sender(), QFrame):
2025-01-19 18:27:26 +08:00
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)))
2025-01-06 11:21:04 +08:00
class MainUI(Node):
2025-01-19 18:27:26 +08:00
topics = [ImageArgMsg, SeqIdMinMax, MoveAxisMsg,
SeqListMsg, SeqMetaMsg,
DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, DeviceConfigListMsg]
2025-01-06 11:21:04 +08:00
2025-01-19 18:27:26 +08:00
def __init__(self, level=logging.INFO):
super().__init__(level=level)
2025-01-06 11:21:04 +08:00
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()