fix many add windows
This commit is contained in:
parent
6b93db3442
commit
daa30c0818
@ -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)
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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:
|
||||
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)
|
||||
s2.send(buffer.getvalue())
|
||||
elif isinstance(r, SelectSeqMsg):
|
||||
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
|
||||
|
||||
@ -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]
|
||||
|
||||
@ -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", "<html><head/><body><p style=\"line-height:0.3\" align=\"center\">Connection</p><p align=\"center\">Status</p></body></html>"))
|
||||
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"))
|
||||
|
||||
135
src/ui/Main.ui
135
src/ui/Main.ui
@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1177</width>
|
||||
<height>910</height>
|
||||
<width>936</width>
|
||||
<height>479</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@ -17,21 +17,14 @@
|
||||
<layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0">
|
||||
<item row="1" column="1">
|
||||
<layout class="QGridLayout" name="gridLayout_7">
|
||||
<item row="2" column="1">
|
||||
<item row="3" column="1">
|
||||
<widget class="QSlider" name="s_sid">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Frame ID</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<item row="3" column="2">
|
||||
<widget class="QSpinBox" name="sp_sid"/>
|
||||
</item>
|
||||
<item row="0" column="0" colspan="3">
|
||||
@ -44,6 +37,20 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_16">
|
||||
<property name="text">
|
||||
<string>SeqName</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Frame ID</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1" colspan="2">
|
||||
<widget class="QComboBox" name="c_playback_seq_name">
|
||||
<property name="enabled">
|
||||
@ -59,13 +66,52 @@
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_16">
|
||||
<item row="2" column="0" colspan="3">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5" stretch="0,1,0,1,0,1">
|
||||
<item>
|
||||
<widget class="QLabel" name="label26">
|
||||
<property name="text">
|
||||
<string>SeqName</string>
|
||||
<string>Min:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="l_seq_min">
|
||||
<property name="text">
|
||||
<string>0</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_28">
|
||||
<property name="text">
|
||||
<string>Current:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="l_seq_current">
|
||||
<property name="text">
|
||||
<string>0</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_29">
|
||||
<property name="text">
|
||||
<string>Max:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="l_seq_max">
|
||||
<property name="text">
|
||||
<string>0</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
@ -164,7 +210,7 @@
|
||||
<item row="2" column="1">
|
||||
<widget class="QSlider" name="horizontalSlider_5">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -178,7 +224,7 @@
|
||||
<item row="3" column="1">
|
||||
<widget class="QSlider" name="horizontalSlider_6">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -187,7 +233,6 @@
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>20</pointsize>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
@ -195,7 +240,7 @@
|
||||
<string>Probe Position</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
<set>Qt::AlignmentFlag::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -214,14 +259,14 @@
|
||||
<item row="7" column="1">
|
||||
<widget class="QSlider" name="horizontalSlider_7">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QSlider" name="horizontalSlider_10">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -235,7 +280,7 @@
|
||||
<item row="5" column="1">
|
||||
<widget class="QSlider" name="horizontalSlider_9">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -272,14 +317,14 @@
|
||||
<item row="1" column="1">
|
||||
<widget class="QSlider" name="horizontalSlider_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="1">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@ -299,7 +344,7 @@
|
||||
<item row="6" column="1">
|
||||
<widget class="QSlider" name="horizontalSlider_8">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -333,7 +378,7 @@
|
||||
<number>1500</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -342,7 +387,6 @@
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>20</pointsize>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
@ -350,21 +394,21 @@
|
||||
<string>Imaging</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
<set>Qt::AlignmentFlag::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QSlider" name="horizontalSlider_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@ -387,7 +431,7 @@
|
||||
<item row="3" column="1">
|
||||
<widget class="QSlider" name="horizontalSlider_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -400,7 +444,7 @@
|
||||
<item row="1" column="1">
|
||||
<widget class="QSlider" name="s_t_start">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -461,7 +505,7 @@
|
||||
<string><html><head/><body><p style="line-height:0.3" align="center">Beam</p><p align="center">Status</p></body></html></string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
<set>Qt::AlignmentFlag::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -471,7 +515,7 @@
|
||||
<string>Disconnected</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
<set>Qt::AlignmentFlag::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -489,7 +533,7 @@
|
||||
<string>Device Offline</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
<set>Qt::AlignmentFlag::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -499,7 +543,7 @@
|
||||
<string>Disabled</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
<set>Qt::AlignmentFlag::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -509,7 +553,7 @@
|
||||
<string><html><head/><body><p style="line-height:0.3" align="center">Connection</p><p align="center">Status</p></body></html></string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
<set>Qt::AlignmentFlag::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -531,6 +575,13 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="b_select_base">
|
||||
<property name="text">
|
||||
<string>Select</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="b_base">
|
||||
<property name="text">
|
||||
@ -553,7 +604,7 @@
|
||||
<string>0,0,0,0,0,0</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
<set>Qt::AlignmentFlag::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -568,7 +619,7 @@
|
||||
<string>0,0,0,0,0,0</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
<set>Qt::AlignmentFlag::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -600,7 +651,7 @@
|
||||
<string>Robot Offline</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
<set>Qt::AlignmentFlag::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -613,8 +664,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1177</width>
|
||||
<height>30</height>
|
||||
<width>936</width>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user