From daa30c0818572ba3771f95c935b59f69bbebfac2 Mon Sep 17 00:00:00 2001
From: gti
Date: Fri, 14 Feb 2025 11:29:55 +0800
Subject: [PATCH] fix many add windows
---
src/config.py | 31 ++++++++-
src/nodes/Beamformer.py | 22 ++++---
src/nodes/Loader.py | 47 ++++++++------
src/nodes/MainUI.py | 36 ++++++----
src/ui/Main.py | 62 +++++++++++++-----
src/ui/Main.ui | 141 +++++++++++++++++++++++++++-------------
src/utils/Msg.py | 6 ++
test/winmain.py | 8 +--
8 files changed, 246 insertions(+), 107 deletions(-)
diff --git a/src/config.py b/src/config.py
index b7166ab..6a89bcf 100644
--- a/src/config.py
+++ b/src/config.py
@@ -1,5 +1,9 @@
+import dataclasses
+import json
from pathlib import Path
+from PIL.TiffImagePlugin import SOFTWARE
+
PLAYBACK_SOCKET_PORT = 5003
PLAYBACK_SOCKET = f'127.0.0.1:{PLAYBACK_SOCKET_PORT}'
LIVE_SOCKET_IP = '11.6.1.66'
@@ -22,5 +26,30 @@ LAST_CONFIG = BASE / 'config' / 'last_imaging_config.json'
CONFIG_FOLDER.mkdir(exist_ok=True)
+SOFTWARE_CONFIG_PATH = BASE / 'software.json'
+
+
+@dataclasses.dataclass
+class SoftwareConfig:
+ base_dir: Path = DS
+
+ @staticmethod
+ def read_config():
+ j = json.loads(SOFTWARE_CONFIG_PATH.read_text(encoding='utf-8'))
+ sc = SoftwareConfig()
+ sc.base_dir = Path(j['base_dir'])
+ return sc
+
+ def write_config(self):
+ SOFTWARE_CONFIG_PATH.write_text(json.dumps(dict(
+ base_dir=self.base_dir.__str__(),
+ ), indent=4), encoding='utf-8')
+
+
+SOFTWARE_CONFIG = SoftwareConfig()
+
+if SOFTWARE_CONFIG_PATH.exists():
+ SOFTWARE_CONFIG = SoftwareConfig.read_config()
+
if __name__ == '__main__':
- print(BASE)
+ print(SOFTWARE_CONFIG)
diff --git a/src/nodes/Beamformer.py b/src/nodes/Beamformer.py
index e24149c..5159ad5 100644
--- a/src/nodes/Beamformer.py
+++ b/src/nodes/Beamformer.py
@@ -13,6 +13,7 @@ from utils.Msg import BMMsg, ImageArgMsg, KillMsg, SeqMetaMsg, SetPlayMode, SetD
RecordFrameMsg
from utils.RfFile import RfFrame, RfSequenceMeta
from utils.RfMat import RfMat
+from utils.RfMeta import RfFrameMeta
logger = logging.getLogger(__name__)
@@ -20,8 +21,8 @@ logger = logging.getLogger(__name__)
class Beamformer(Node):
topics = [ImageArgMsg, SeqMetaMsg, SetPlayMode, SetDeviceConfigMsg, SetRecordMsg]
- def __init__(self):
- super(Beamformer, self).__init__()
+ def __init__(self, level=logging.INFO):
+ super(Beamformer, self).__init__(level=level)
self.arg = ImageArgMsg('', t_start=0, t_end=1499)
self.seq_meta_live = None
self.seq_meta_playback = None
@@ -63,19 +64,18 @@ class Beamformer(Node):
socks = dict(self.c.poller.poll())
if device_socket in socks and socks[device_socket] == zmq.POLLIN:
buffer = device_socket.recv()
+ logger.debug(f'device receive {buffer.__len__()}')
_, sequence_id, encoder = struct.unpack_from('=iqi', buffer)
s = buffer[4 + 8 + 4:]
- seq_meta = None
- match self.play_mode:
- case 'live':
- seq_meta = self.seq_meta_live
- case 'playback':
- seq_meta = self.seq_meta_playback
-
+ logger.debug(f'live meta {self.seq_meta_live}, playback meta {self.seq_meta_playback}')
+ seq_meta: RfSequenceMeta | None = {
+ "live": self.seq_meta_live,
+ "playback": self.seq_meta_playback,
+ }.get(self.play_mode, None)
if seq_meta is not None:
fb1 = cp.frombuffer(s, dtype=cp.int16)
if fb1.shape[0] == np.prod(seq_meta.shape):
- mat = RfMat(fb1.reshape(seq_meta.shape), RfFrame.RfFrameMeta(
+ mat = RfMat(fb1.reshape(seq_meta.shape), RfFrameMeta(
encoder=encoder,
sequence_id=sequence_id,
), seq_meta)
@@ -98,6 +98,7 @@ class Beamformer(Node):
if isinstance(msg, ImageArgMsg):
self.arg = msg
if isinstance(msg, SetPlayMode):
+ logger.debug(f'set playmode {msg}')
self.play_mode = msg.value
if msg.value == 'live':
try:
@@ -111,6 +112,7 @@ class Beamformer(Node):
except:
pass
device_socket.connect(f"tcp://{PLAYBACK_SOCKET}")
+ logger.debug('connect to playback')
if isinstance(msg, SetRecordMsg):
self.record_enable = msg.enable
if msg.enable:
diff --git a/src/nodes/Loader.py b/src/nodes/Loader.py
index 62a3942..afb3c2e 100644
--- a/src/nodes/Loader.py
+++ b/src/nodes/Loader.py
@@ -5,9 +5,9 @@ from pathlib import Path
import zmq
-from config import PLAYBACK_SOCKET_PORT
+from config import PLAYBACK_SOCKET_PORT, SOFTWARE_CONFIG
from nodes.Node import Node
-from utils.Msg import MoveAxisMsg, KillMsg, SelectSeqMsg, SeqMetaMsg, SeqIdMinMax, SetBaseMsg, SeqListMsg
+from utils.Msg import MoveAxisMsg, KillMsg, SelectSeqMsg, SeqMetaMsg, SeqIdMinMax, SetBaseMsg, SeqListMsg, SeqIdList
from utils.RfFile import RfSequence
logger = logging.getLogger(__name__)
@@ -17,32 +17,39 @@ class Loader(Node):
topics = [MoveAxisMsg, SelectSeqMsg, SetBaseMsg]
def loop(self):
- s2 = self.context.socket(zmq.PUSH)
- s2.bind(f"tcp://*:{PLAYBACK_SOCKET_PORT}")
+ playback_socket = self.context.socket(zmq.PUSH)
+ playback_socket.bind(f"tcp://*:{PLAYBACK_SOCKET_PORT}")
# base = Path('/mnt/16T/private_dataset/us/')
base: Path | None = None
rff = None
while True:
- r = self.recv()
- if isinstance(r, MoveAxisMsg) and rff is not None:
- logger.debug(f'Move axis: {rff}')
- for frame in rff.frames:
- if frame.meta.sequence_id == r.value:
- buffer = io.BytesIO()
- buffer.write(struct.pack('=iqi', 114514, frame.meta.sequence_id, frame.meta.encoder))
- buffer.write(frame.bytes)
- s2.send(buffer.getvalue())
- elif isinstance(r, SelectSeqMsg):
+ msg = self.recv()
+ if isinstance(msg, MoveAxisMsg) and rff is not None:
+ logger.debug(f'Move axis: {msg}')
+ if msg.axis == 'S':
+ frame = rff.frames[msg.value]
+ buffer = io.BytesIO()
+ buffer.write(struct.pack('=iqi', 114514, frame.meta.sequence_id, frame.meta.encoder))
+ buffer.write(frame.bytes)
+ playback_socket.send(buffer.getvalue())
+ elif isinstance(msg, SelectSeqMsg):
if base is None:
continue
- rff = RfSequence.from_folder(base / r.value)
+ rff = RfSequence.from_folder(base / msg.value)
self.send(SeqMetaMsg('playback', rff.meta.name))
self.send(SeqIdMinMax(*rff.seq_id_minmax))
- elif isinstance(r, SetBaseMsg):
- base = Path(r.value)
- self.send(SeqListMsg([f.name for f in base.glob('*')]))
- elif isinstance(r, KillMsg):
- if r.name == '':
+ self.send(SeqIdList([f.meta.sequence_id for f in rff.frames]))
+ elif isinstance(msg, SetBaseMsg):
+ base = Path(msg.value)
+ seq_list = [f.name for f in base.glob('*')]
+ if not seq_list:
+ logger.warning(f'No sequences found in {base}')
+ else:
+ SOFTWARE_CONFIG.base_dir = base
+ SOFTWARE_CONFIG.write_config()
+ self.send(SeqListMsg(seq_list))
+ elif isinstance(msg, KillMsg):
+ if msg.name == '':
break
diff --git a/src/nodes/MainUI.py b/src/nodes/MainUI.py
index 615c2b6..73723f2 100644
--- a/src/nodes/MainUI.py
+++ b/src/nodes/MainUI.py
@@ -6,7 +6,7 @@ from pathlib import Path
from PyQt6 import QtCore
from PyQt6.QtCore import QByteArray
-from PyQt6.QtWidgets import QMainWindow, QApplication, QFrame, QMessageBox
+from PyQt6.QtWidgets import QMainWindow, QApplication, QFrame, QMessageBox, QFileDialog
from Main import Ui_MainWindow
from ZMQReceiver import ZMQReceiver
@@ -14,9 +14,12 @@ from config import DS
from nodes.Node import Node
from utils.Msg import KillMsg, Msg, ImageArgMsg, SelectSeqMsg, SeqIdMinMax, MoveAxisMsg, SeqListMsg, SetBaseMsg, \
SeqMetaMsg, SetPlayMode, DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, SetDeviceEnabledMsg, \
- SetDeviceConnectedMsg, DeviceConfigListMsg, SetDeviceConfigMsg, SetRecordMsg, RobotRtsiMsg, RecordFrameMsg
+ SetDeviceConnectedMsg, DeviceConfigListMsg, SetDeviceConfigMsg, SetRecordMsg, RobotRtsiMsg, RecordFrameMsg, \
+ SeqIdList
from utils.RfMeta import RfSequenceMeta
+logger = logging.getLogger(__name__)
+
class LinkStatus(Enum):
RED = auto()
@@ -54,7 +57,7 @@ class Adv(QMainWindow, Ui_MainWindow):
zmq_receiver.start()
self.s_t_start.valueChanged.connect(self.on_t_start)
self.s_t_end.valueChanged.connect(self.on_t_end)
- self.c_playback_seq_name.currentIndexChanged.connect(self.cbc)
+ self.c_playback_seq_name.currentIndexChanged.connect(self.on_select_plyayback_seq_name)
self.s_sid.valueChanged.connect(self.c_sid)
self.arg = ImageArgMsg('ui', t_start=0, t_end=1499)
self.b_base.clicked.connect(self.on_base)
@@ -77,6 +80,14 @@ class Adv(QMainWindow, Ui_MainWindow):
self.record_frame_cnt = 0
self.update_device_buttons()
+ self.seq_id_list = []
+
+ self.b_select_base.clicked.connect(self.on_select_base)
+
+ def on_select_base(self):
+ base = QFileDialog.getExistingDirectory(self, 'Select Base Folder', DS.__str__())
+ self.l_base.setText(Path(base).__str__())
+
def update_b_play_live_enabled(self):
self.b_play_live.setEnabled(all([self.b1, self.b2]))
@@ -136,6 +147,7 @@ class Adv(QMainWindow, Ui_MainWindow):
self.l_record_commit.setEnabled(False)
self.p.send(SeqMetaMsg('playback', self.c_playback_seq_name.itemText(self.c_playback_seq_name.currentIndex())))
self.p.send(SetPlayMode('playback'))
+ logger.debug(f'set playmode playback')
self.b3 = True
self.update_c_playback_seq_name_enable()
@@ -235,13 +247,13 @@ class Adv(QMainWindow, Ui_MainWindow):
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.setMinimum(msg.min)
- self.sp_sid.setMaximum(msg.max)
- self.sp_sid.setValue(msg.min)
- self.sp_sid.setValue(msg.min)
+ self.l_seq_current.setText(str(self.seq_id_list[msg.value]))
+ elif isinstance(msg, SeqIdList):
+ self.seq_id_list = msg.li
+ self.s_sid.setMaximum(msg.li.__len__() - 1)
+ self.sp_sid.setMaximum(msg.li.__len__() - 1)
+ self.l_seq_min.setText(str(min(msg.li)))
+ self.l_seq_max.setText(str(max(msg.li)))
elif isinstance(msg, SeqListMsg):
self.b4 = True
self.update_c_playback_seq_name_enable()
@@ -306,7 +318,7 @@ class Adv(QMainWindow, Ui_MainWindow):
self.p.send(self.arg)
@QtCore.pyqtSlot(int)
- def cbc(self, v):
+ def on_select_plyayback_seq_name(self, v):
if self.c_playback_seq_name.sender() is None or isinstance(self.c_playback_seq_name.sender(), QFrame):
self.p.send(SelectSeqMsg(self.c_playback_seq_name.itemText(v)))
@@ -328,7 +340,7 @@ class Adv(QMainWindow, Ui_MainWindow):
class MainUI(Node):
topics = [ImageArgMsg, SeqIdMinMax, MoveAxisMsg,
- SeqListMsg, SeqMetaMsg,
+ SeqListMsg, SeqMetaMsg, SeqIdList,
DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, DeviceConfigListMsg,
RobotRtsiMsg,
RecordFrameMsg]
diff --git a/src/ui/Main.py b/src/ui/Main.py
index 6b2ee3c..9a662df 100644
--- a/src/ui/Main.py
+++ b/src/ui/Main.py
@@ -1,4 +1,4 @@
-# Form implementation generated from reading ui file 'Main.ui'
+# Form implementation generated from reading ui file '.\Main.ui'
#
# Created by: PyQt6 UI code generator 6.8.0
#
@@ -12,7 +12,7 @@ from PyQt6 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
- MainWindow.resize(1177, 910)
+ MainWindow.resize(936, 479)
self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
@@ -22,26 +22,50 @@ class Ui_MainWindow(object):
self.s_sid = QtWidgets.QSlider(parent=self.centralwidget)
self.s_sid.setOrientation(QtCore.Qt.Orientation.Horizontal)
self.s_sid.setObjectName("s_sid")
- self.gridLayout_7.addWidget(self.s_sid, 2, 1, 1, 1)
- self.label_4 = QtWidgets.QLabel(parent=self.centralwidget)
- self.label_4.setObjectName("label_4")
- self.gridLayout_7.addWidget(self.label_4, 2, 0, 1, 1)
+ self.gridLayout_7.addWidget(self.s_sid, 3, 1, 1, 1)
self.sp_sid = QtWidgets.QSpinBox(parent=self.centralwidget)
self.sp_sid.setObjectName("sp_sid")
- self.gridLayout_7.addWidget(self.sp_sid, 2, 2, 1, 1)
+ self.gridLayout_7.addWidget(self.sp_sid, 3, 2, 1, 1)
self.b_play_playback = QtWidgets.QPushButton(parent=self.centralwidget)
self.b_play_playback.setEnabled(False)
self.b_play_playback.setObjectName("b_play_playback")
self.gridLayout_7.addWidget(self.b_play_playback, 0, 0, 1, 3)
+ self.label_16 = QtWidgets.QLabel(parent=self.centralwidget)
+ self.label_16.setObjectName("label_16")
+ self.gridLayout_7.addWidget(self.label_16, 1, 0, 1, 1)
+ self.label_4 = QtWidgets.QLabel(parent=self.centralwidget)
+ self.label_4.setObjectName("label_4")
+ self.gridLayout_7.addWidget(self.label_4, 3, 0, 1, 1)
self.c_playback_seq_name = QtWidgets.QComboBox(parent=self.centralwidget)
self.c_playback_seq_name.setEnabled(False)
self.c_playback_seq_name.setEditable(False)
self.c_playback_seq_name.setObjectName("c_playback_seq_name")
self.c_playback_seq_name.addItem("")
self.gridLayout_7.addWidget(self.c_playback_seq_name, 1, 1, 1, 2)
- self.label_16 = QtWidgets.QLabel(parent=self.centralwidget)
- self.label_16.setObjectName("label_16")
- self.gridLayout_7.addWidget(self.label_16, 1, 0, 1, 1)
+ self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_5.setObjectName("horizontalLayout_5")
+ self.label26 = QtWidgets.QLabel(parent=self.centralwidget)
+ self.label26.setObjectName("label26")
+ self.horizontalLayout_5.addWidget(self.label26)
+ self.l_seq_min = QtWidgets.QLabel(parent=self.centralwidget)
+ self.l_seq_min.setObjectName("l_seq_min")
+ self.horizontalLayout_5.addWidget(self.l_seq_min)
+ self.label_28 = QtWidgets.QLabel(parent=self.centralwidget)
+ self.label_28.setObjectName("label_28")
+ self.horizontalLayout_5.addWidget(self.label_28)
+ self.l_seq_current = QtWidgets.QLabel(parent=self.centralwidget)
+ self.l_seq_current.setObjectName("l_seq_current")
+ self.horizontalLayout_5.addWidget(self.l_seq_current)
+ self.label_29 = QtWidgets.QLabel(parent=self.centralwidget)
+ self.label_29.setObjectName("label_29")
+ self.horizontalLayout_5.addWidget(self.label_29)
+ self.l_seq_max = QtWidgets.QLabel(parent=self.centralwidget)
+ self.l_seq_max.setObjectName("l_seq_max")
+ self.horizontalLayout_5.addWidget(self.l_seq_max)
+ self.horizontalLayout_5.setStretch(1, 1)
+ self.horizontalLayout_5.setStretch(3, 1)
+ self.horizontalLayout_5.setStretch(5, 1)
+ self.gridLayout_7.addLayout(self.horizontalLayout_5, 2, 0, 1, 3)
self.gridLayout.addLayout(self.gridLayout_7, 1, 1, 1, 1)
self.gridLayout_6 = QtWidgets.QGridLayout()
self.gridLayout_6.setObjectName("gridLayout_6")
@@ -105,7 +129,6 @@ class Ui_MainWindow(object):
font = QtGui.QFont()
font.setPointSize(20)
font.setBold(False)
- font.setWeight(50)
self.label_3.setFont(font)
self.label_3.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.label_3.setObjectName("label_3")
@@ -190,7 +213,6 @@ class Ui_MainWindow(object):
font = QtGui.QFont()
font.setPointSize(20)
font.setBold(False)
- font.setWeight(50)
self.label_2.setFont(font)
self.label_2.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.label_2.setObjectName("label_2")
@@ -282,6 +304,9 @@ class Ui_MainWindow(object):
self.l_base.setText("")
self.l_base.setObjectName("l_base")
self.horizontalLayout_4.addWidget(self.l_base)
+ self.b_select_base = QtWidgets.QPushButton(parent=self.centralwidget)
+ self.b_select_base.setObjectName("b_select_base")
+ self.horizontalLayout_4.addWidget(self.b_select_base)
self.b_base = QtWidgets.QPushButton(parent=self.centralwidget)
self.b_base.setObjectName("b_base")
self.horizontalLayout_4.addWidget(self.b_base)
@@ -320,7 +345,7 @@ class Ui_MainWindow(object):
self.gridLayout.addLayout(self.gridLayout_2, 0, 1, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
- self.menubar.setGeometry(QtCore.QRect(0, 0, 1177, 30))
+ self.menubar.setGeometry(QtCore.QRect(0, 0, 936, 18))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(parent=MainWindow)
@@ -333,10 +358,16 @@ class Ui_MainWindow(object):
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
- self.label_4.setText(_translate("MainWindow", "Frame ID"))
self.b_play_playback.setText(_translate("MainWindow", "Playback"))
- self.c_playback_seq_name.setItemText(0, _translate("MainWindow", "Unset"))
self.label_16.setText(_translate("MainWindow", "SeqName"))
+ self.label_4.setText(_translate("MainWindow", "Frame ID"))
+ self.c_playback_seq_name.setItemText(0, _translate("MainWindow", "Unset"))
+ self.label26.setText(_translate("MainWindow", "Min:"))
+ self.l_seq_min.setText(_translate("MainWindow", "0"))
+ self.label_28.setText(_translate("MainWindow", "Current:"))
+ self.l_seq_current.setText(_translate("MainWindow", "0"))
+ self.label_29.setText(_translate("MainWindow", "Max:"))
+ self.l_seq_max.setText(_translate("MainWindow", "0"))
self.label_17.setText(_translate("MainWindow", "RecordName"))
self.b_record.setText(_translate("MainWindow", "Record"))
self.label_18.setText(_translate("MainWindow", "Record Frames:"))
@@ -369,6 +400,7 @@ class Ui_MainWindow(object):
self.lb_device_enable.setText(_translate("MainWindow", "Disabled"))
self.label_21.setText(_translate("MainWindow", "
Connection
Status
"))
self.label.setText(_translate("MainWindow", "Base Path"))
+ self.b_select_base.setText(_translate("MainWindow", "Select"))
self.b_base.setText(_translate("MainWindow", "Open"))
self.l_robot_pos.setText(_translate("MainWindow", "0,0,0,0,0,0"))
self.l_robot_force.setText(_translate("MainWindow", "0,0,0,0,0,0"))
diff --git a/src/ui/Main.ui b/src/ui/Main.ui
index 08fe380..1be1c30 100644
--- a/src/ui/Main.ui
+++ b/src/ui/Main.ui
@@ -6,8 +6,8 @@
0
0
- 1177
- 910
+ 936
+ 479
@@ -17,21 +17,14 @@
-
-
-
+
-
- Qt::Horizontal
+ Qt::Orientation::Horizontal
- -
-
-
- Frame ID
-
-
-
- -
+
-
-
@@ -44,6 +37,20 @@
+ -
+
+
+ SeqName
+
+
+
+ -
+
+
+ Frame ID
+
+
+
-
@@ -59,12 +66,51 @@
- -
-
-
- SeqName
-
-
+
-
+
+
-
+
+
+ Min:
+
+
+
+ -
+
+
+ 0
+
+
+
+ -
+
+
+ Current:
+
+
+
+ -
+
+
+ 0
+
+
+
+ -
+
+
+ Max:
+
+
+
+ -
+
+
+ 0
+
+
+
+
@@ -164,7 +210,7 @@
-
- Qt::Horizontal
+ Qt::Orientation::Horizontal
@@ -178,7 +224,7 @@
-
- Qt::Horizontal
+ Qt::Orientation::Horizontal
@@ -187,7 +233,6 @@
20
- 50
false
@@ -195,7 +240,7 @@
Probe Position
- Qt::AlignCenter
+ Qt::AlignmentFlag::AlignCenter
@@ -214,14 +259,14 @@
-
- Qt::Horizontal
+ Qt::Orientation::Horizontal
-
- Qt::Horizontal
+ Qt::Orientation::Horizontal
@@ -235,7 +280,7 @@
-
- Qt::Horizontal
+ Qt::Orientation::Horizontal
@@ -272,14 +317,14 @@
-
- Qt::Horizontal
+ Qt::Orientation::Horizontal
-
- Qt::Vertical
+ Qt::Orientation::Vertical
@@ -299,7 +344,7 @@
-
- Qt::Horizontal
+ Qt::Orientation::Horizontal
@@ -333,7 +378,7 @@
1500
- Qt::Horizontal
+ Qt::Orientation::Horizontal
@@ -342,7 +387,6 @@
20
- 50
false
@@ -350,21 +394,21 @@
Imaging
- Qt::AlignCenter
+ Qt::AlignmentFlag::AlignCenter
-
- Qt::Horizontal
+ Qt::Orientation::Horizontal
-
- Qt::Vertical
+ Qt::Orientation::Vertical
@@ -387,7 +431,7 @@
-
- Qt::Horizontal
+ Qt::Orientation::Horizontal
@@ -400,7 +444,7 @@
-
- Qt::Horizontal
+ Qt::Orientation::Horizontal
@@ -461,7 +505,7 @@
<html><head/><body><p style="line-height:0.3" align="center">Beam</p><p align="center">Status</p></body></html>
- Qt::AlignCenter
+ Qt::AlignmentFlag::AlignCenter
@@ -471,7 +515,7 @@
Disconnected
- Qt::AlignCenter
+ Qt::AlignmentFlag::AlignCenter
@@ -489,7 +533,7 @@
Device Offline
- Qt::AlignCenter
+ Qt::AlignmentFlag::AlignCenter
@@ -499,7 +543,7 @@
Disabled
- Qt::AlignCenter
+ Qt::AlignmentFlag::AlignCenter
@@ -509,7 +553,7 @@
<html><head/><body><p style="line-height:0.3" align="center">Connection</p><p align="center">Status</p></body></html>
- Qt::AlignCenter
+ Qt::AlignmentFlag::AlignCenter
@@ -531,6 +575,13 @@
+ -
+
+
+ Select
+
+
+
-
@@ -553,7 +604,7 @@
0,0,0,0,0,0
- Qt::AlignCenter
+ Qt::AlignmentFlag::AlignCenter
@@ -568,7 +619,7 @@
0,0,0,0,0,0
- Qt::AlignCenter
+ Qt::AlignmentFlag::AlignCenter
@@ -600,7 +651,7 @@
Robot Offline
- Qt::AlignCenter
+ Qt::AlignmentFlag::AlignCenter
@@ -613,8 +664,8 @@
0
0
- 1177
- 30
+ 936
+ 18
diff --git a/src/utils/Msg.py b/src/utils/Msg.py
index 4d5e7c7..3859a31 100644
--- a/src/utils/Msg.py
+++ b/src/utils/Msg.py
@@ -29,6 +29,7 @@ class BG(Enum):
SetRecordMsg = auto()
RobotRtsiMsg = auto()
RecordFrameMsg = auto()
+ SeqIdList = auto()
class Msg:
@@ -153,6 +154,11 @@ class SeqIdMinMax(Msg):
max: int
+@dataclasses.dataclass
+class SeqIdList(Msg):
+ li: list[int]
+
+
@dataclasses.dataclass
class MoveAxisMsg(Msg):
sender: str
diff --git a/test/winmain.py b/test/winmain.py
index b4a491e..5737094 100644
--- a/test/winmain.py
+++ b/test/winmain.py
@@ -26,12 +26,12 @@ def main():
pps = []
ps = [
Broker(),
- WebRTC(),
- MainUI(),
+ # WebRTC(),
+ MainUI(level=logging.DEBUG),
Device(level=logging.DEBUG),
ImageCV(),
- Beamformer(),
- Loader(),
+ Beamformer(level=logging.DEBUG),
+ Loader(level=logging.DEBUG),
Robot(),
]
for p in ps: