This commit is contained in:
flandre 2025-02-19 00:05:14 +08:00
parent b7164b7c78
commit 8427211b78
5 changed files with 37 additions and 24 deletions

View File

@ -7,7 +7,7 @@ import zmq
from config import PLAYBACK_SOCKET_PORT, SOFTWARE_CONFIG from config import PLAYBACK_SOCKET_PORT, SOFTWARE_CONFIG
from nodes.Node import Node from nodes.Node import Node
from utils.Msg import MoveAxisMsg, KillMsg, SelectSeqMsg, SetSeqMetaMsg, SeqIdMinMax, SetBaseMsg, SeqListMsg, SeqIdList, \ from utils.Msg import MoveAxisMsg, KillMsg, SetSeqMetaMsg, SeqIdMinMax, SetBaseMsg, SeqListMsg, SeqIdList, \
SetSidMsg SetSidMsg
from utils.RfFile import RfSequence from utils.RfFile import RfSequence
@ -15,7 +15,7 @@ logger = logging.getLogger(__name__)
class Loader(Node): class Loader(Node):
topics = [MoveAxisMsg, SelectSeqMsg, SetBaseMsg, SetSidMsg] topics = [MoveAxisMsg, SetSeqMetaMsg, SetBaseMsg, SetSidMsg]
def loop(self): def loop(self):
playback_socket = self.context.socket(zmq.PUSH) playback_socket = self.context.socket(zmq.PUSH)
@ -37,13 +37,14 @@ class Loader(Node):
buffer.write(struct.pack('=iqi', 114514, frame.meta.sequence_id, frame.meta.encoder)) buffer.write(struct.pack('=iqi', 114514, frame.meta.sequence_id, frame.meta.encoder))
buffer.write(frame.bytes) buffer.write(frame.bytes)
playback_socket.send(buffer.getvalue()) playback_socket.send(buffer.getvalue())
elif isinstance(msg, SelectSeqMsg): elif isinstance(msg, SetSeqMetaMsg):
if base is None: if base is None:
continue continue
rff = RfSequence.from_folder(base / msg.value) if msg.target == 'playback':
self.send(SetSeqMetaMsg('playback', rff.meta.name)) rff = RfSequence.from_folder(base / msg.name)
self.send(SeqIdMinMax(*rff.seq_id_minmax)) self.send(SeqIdMinMax(*rff.seq_id_minmax))
self.send(SeqIdList([f.meta.sequence_id for f in rff.frames])) self.send(SeqIdList([f.meta.sequence_id for f in rff.frames]))
self.send(SetSidMsg(0))
elif isinstance(msg, SetBaseMsg): elif isinstance(msg, SetBaseMsg):
base = Path(msg.value) base = Path(msg.value)
seq_list = [f.name for f in base.glob('*')] seq_list = [f.name for f in base.glob('*')]

View File

@ -6,6 +6,7 @@ from enum import Enum, auto
from pathlib import Path from pathlib import Path
from PyQt6 import QtCore from PyQt6 import QtCore
from PyQt6 import QtGui
from PyQt6.QtCore import QByteArray from PyQt6.QtCore import QByteArray
from PyQt6.QtWidgets import QMainWindow, QApplication, QFrame, QMessageBox, QFileDialog from PyQt6.QtWidgets import QMainWindow, QApplication, QFrame, QMessageBox, QFileDialog
@ -13,7 +14,7 @@ from Main import Ui_MainWindow
from ZMQReceiver import ZMQReceiver from ZMQReceiver import ZMQReceiver
from config import DS, SOFTWARE_CONFIG from config import DS, SOFTWARE_CONFIG
from nodes.Node import Node from nodes.Node import Node
from utils.Msg import KillMsg, Msg, ImageArgMsg, SelectSeqMsg, SeqIdMinMax, MoveAxisMsg, SeqListMsg, SetBaseMsg, \ from utils.Msg import KillMsg, Msg, ImageArgMsg, SeqIdMinMax, MoveAxisMsg, SeqListMsg, SetBaseMsg, \
SetSeqMetaMsg, SetPlayMode, DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, SetDeviceEnabledMsg, \ SetSeqMetaMsg, SetPlayMode, DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, SetDeviceEnabledMsg, \
SetDeviceConnectedMsg, DeviceConfigListMsg, SetDeviceConfigMsg, SetRecordMsg, RobotRtsiMsg, RecordFrameMsg, \ SetDeviceConnectedMsg, DeviceConfigListMsg, SetDeviceConfigMsg, SetRecordMsg, RobotRtsiMsg, RecordFrameMsg, \
SeqIdList, SetWindowVisibleMsg, SetSidMsg SeqIdList, SetWindowVisibleMsg, SetSidMsg
@ -59,7 +60,8 @@ class Adv(QMainWindow, Ui_MainWindow):
self.s_t_start.valueChanged.connect(self.on_t_start) self.s_t_start.valueChanged.connect(self.on_t_start)
self.s_t_end.valueChanged.connect(self.on_t_end) self.s_t_end.valueChanged.connect(self.on_t_end)
self.c_playback_seq_name.currentIndexChanged.connect(self.on_select_plyayback_seq_name) self.c_playback_seq_name.currentIndexChanged.connect(self.on_select_plyayback_seq_name)
self.s_sid.valueChanged.connect(self.c_sid) self.s_sid.valueChanged.connect(self.on_s_sid)
self.sp_sid.valueChanged.connect(self.on_sp_sid)
self.arg = ImageArgMsg('ui', t_start=0, t_end=1499) self.arg = ImageArgMsg('ui', t_start=0, t_end=1499)
self.b_base.clicked.connect(self.on_base_open) self.b_base.clicked.connect(self.on_base_open)
self.seq_meta: RfSequenceMeta | None = None self.seq_meta: RfSequenceMeta | None = None
@ -73,6 +75,10 @@ class Adv(QMainWindow, Ui_MainWindow):
# self.b_device_connected.clicked.connect(lambda: self.p.send(SetDeviceConnectedMsg(not self.device_connected))) # self.b_device_connected.clicked.connect(lambda: self.p.send(SetDeviceConnectedMsg(not self.device_connected)))
self.c_live_seq_name.currentIndexChanged.connect(self.on_seq_meta) self.c_live_seq_name.currentIndexChanged.connect(self.on_seq_meta)
self.l_base.setText(SOFTWARE_CONFIG.base_dir.__str__()) self.l_base.setText(SOFTWARE_CONFIG.base_dir.__str__())
self.l_base.textChanged.connect(lambda e:
self.l_base.setStyleSheet("")
if Path(e).exists() else
self.l_base.setStyleSheet("background-color: pink;"))
self.b1, self.b2 = False, False self.b1, self.b2 = False, False
self.b3, self.b4 = False, False self.b3, self.b4 = False, False
@ -250,7 +256,7 @@ class Adv(QMainWindow, Ui_MainWindow):
if msg.name == '': if msg.name == '':
self.close() self.close()
elif isinstance(msg, ImageArgMsg): elif isinstance(msg, ImageArgMsg):
self.s_t_end.setValue(msg.t_start) self.s_t_start.setValue(msg.t_start)
self.s_t_end.setValue(msg.t_end) self.s_t_end.setValue(msg.t_end)
elif isinstance(msg, MoveAxisMsg): elif isinstance(msg, MoveAxisMsg):
match msg.axis: match msg.axis:
@ -260,6 +266,7 @@ class Adv(QMainWindow, Ui_MainWindow):
# self.l_seq_current.setText(str(self.seq_id_list[msg.value])) # self.l_seq_current.setText(str(self.seq_id_list[msg.value]))
elif isinstance(msg, SetSidMsg): elif isinstance(msg, SetSidMsg):
self.s_sid.setValue(msg.value) self.s_sid.setValue(msg.value)
self.sp_sid.setValue(msg.value)
self.l_seq_current.setText(str(self.seq_id_list[msg.value])) self.l_seq_current.setText(str(self.seq_id_list[msg.value]))
elif isinstance(msg, SeqIdList): elif isinstance(msg, SeqIdList):
self.seq_id_list = msg.li self.seq_id_list = msg.li
@ -274,13 +281,14 @@ class Adv(QMainWindow, Ui_MainWindow):
for name in msg.value: for name in msg.value:
self.c_playback_seq_name.addItem(name) self.c_playback_seq_name.addItem(name)
if msg.value.__len__() > 0: if msg.value.__len__() > 0:
self.p.send( self.p.send(SetSeqMetaMsg('playback', self.c_playback_seq_name.itemText(
SelectSeqMsg(self.c_playback_seq_name.itemText(self.c_playback_seq_name.currentIndex()))) self.c_playback_seq_name.currentIndex())))
self.b_play_playback.setEnabled(True) self.b_play_playback.setEnabled(True)
elif isinstance(msg, SetSeqMetaMsg): elif isinstance(msg, SetSeqMetaMsg):
self.seq_meta = RfSequenceMeta.from_name(msg.name) self.seq_meta = RfSequenceMeta.from_name(msg.name)
self.s_t_start.setMaximum(max(self.seq_meta.shape)) mmax_shape0 = max(self.seq_meta.shape)
self.s_t_end.setMaximum(max(self.seq_meta.shape)) self.s_t_start.setMaximum(mmax_shape0)
self.s_t_end.setMaximum(mmax_shape0)
elif isinstance(msg, DeviceConnectedMsg): elif isinstance(msg, DeviceConnectedMsg):
if msg.value: if msg.value:
self.set_device_connection(LinkStatus.GREEN) self.set_device_connection(LinkStatus.GREEN)
@ -345,14 +353,17 @@ class Adv(QMainWindow, Ui_MainWindow):
@QtCore.pyqtSlot(int) @QtCore.pyqtSlot(int)
def on_select_plyayback_seq_name(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): 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))) self.p.send(SetSeqMetaMsg('playback', self.c_playback_seq_name.itemText(v)))
@QtCore.pyqtSlot(int) @QtCore.pyqtSlot(int)
def c_sid(self, v): def on_s_sid(self, v):
if self.s_sid.sender() is None: if self.s_sid.sender() is None:
self.sp_sid.setValue(v)
self.p.send(SetSidMsg(v)) self.p.send(SetSidMsg(v))
# self.p.send(MoveAxisMsg('ui', 'S', v))
@QtCore.pyqtSlot(int)
def on_sp_sid(self, v):
if self.sp_sid.sender() is None:
self.p.send(SetSidMsg(v))
@QtCore.pyqtSlot(int) @QtCore.pyqtSlot(int)
def on_seq_meta(self, v): def on_seq_meta(self, v):
@ -377,9 +388,14 @@ class MainUI(Node):
def loop(self): def loop(self):
try: try:
app = QApplication(sys.argv) app = QApplication(sys.argv)
app.setDesktopFileName('TestTest')
if platform.system() == 'Windows': if platform.system() == 'Windows':
app.setStyle('windowsvista') app.setStyle('windowsvista')
MainWindow = Adv(self) MainWindow = Adv(self)
# icon = QtGui.QIcon()
# icon.addPixmap(QtGui.QPixmap("remilia3.png"),
# QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
# MainWindow.setApp(icon)
# MainWindow.move(int(px), int(py)) # MainWindow.move(int(px), int(py))
# MainWindow.resize(int(sx), int(sy)) # MainWindow.resize(int(sx), int(sy))
MainWindow.show() MainWindow.show()

View File

@ -370,7 +370,7 @@ class Ui_MainWindow(object):
def retranslateUi(self, MainWindow): def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate _translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) MainWindow.setWindowTitle(_translate("MainWindow", "Scarlet Flandre Control Panel"))
self.label_20.setText(_translate("MainWindow", "DeviceConfig")) self.label_20.setText(_translate("MainWindow", "DeviceConfig"))
self.c_live_seq_name.setItemText(0, _translate("MainWindow", "Empty")) self.c_live_seq_name.setItemText(0, _translate("MainWindow", "Empty"))
self.b_device_enable.setText(_translate("MainWindow", "Disconnect")) self.b_device_enable.setText(_translate("MainWindow", "Disconnect"))

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>MainWindow</string> <string>Scarlet Flandre Control Panel</string>
</property> </property>
<widget class="QWidget" name="centralwidget"> <widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0"> <layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0">

View File

@ -13,7 +13,6 @@ class BG(Enum):
StrMsg = auto() StrMsg = auto()
MoveAxisMsg = auto() MoveAxisMsg = auto()
ImageArgMsg = auto() ImageArgMsg = auto()
SelectSeqMsg = auto()
SetSeqMetaMsg = auto() SetSeqMetaMsg = auto()
SeqIdMinMax = auto() SeqIdMinMax = auto()
SetBaseMsg = auto() SetBaseMsg = auto()
@ -143,9 +142,6 @@ class SeqListMsg(Msg):
value: list[str] value: list[str]
class SelectSeqMsg(StrMsg):
pass
class SetPlayMode(StrMsg): class SetPlayMode(StrMsg):
pass pass