GrabBag/AppUtils/UICommon/Src/NetworkConfigWidget.cpp
2026-04-17 10:18:03 +08:00

302 lines
11 KiB
C++

#include "NetworkConfigWidget.h"
#include <QFont>
#include <QFormLayout>
#include <QVBoxLayout>
NetworkConfigWidget::NetworkConfigWidget(bool showPlcConfig, bool showTcpConfig, QWidget* parent)
: QWidget(parent)
{
setupUI(showPlcConfig, showTcpConfig);
}
NetworkConfigWidget::~NetworkConfigWidget()
{
}
void NetworkConfigWidget::setupUI(bool showPlcConfig, bool showTcpConfig)
{
QVBoxLayout* mainLayout = new QVBoxLayout(this);
mainLayout->setContentsMargins(0, 0, 0, 0);
mainLayout->setSpacing(10);
const QString labelStyle = "color: rgb(221, 225, 233); background-color: transparent;";
const QString editStyle = "color: rgb(221, 225, 233); background-color: rgb(47, 48, 52); border: 1px solid rgb(70, 72, 78); padding: 4px;";
const QString comboStyle = editStyle;
const QString groupStyle = "QGroupBox { color: rgb(221, 225, 233); border: 1px solid rgb(100, 100, 100); border-radius: 4px; margin-top: 12px; padding-top: 8px; } QGroupBox::title { subcontrol-origin: margin; left: 10px; padding: 0 3px 0 3px; }";
QFont font;
font.setPointSize(14);
QGroupBox* groupCommon = new QGroupBox(QStringLiteral("通信参数"), this);
groupCommon->setFont(font);
groupCommon->setStyleSheet(groupStyle);
QFormLayout* commonForm = new QFormLayout(groupCommon);
commonForm->setSpacing(8);
m_comboEulerOrder = new QComboBox(this);
m_comboEulerOrder->setFont(font);
m_comboEulerOrder->setStyleSheet(comboStyle);
initEulerOrderComboBox();
QLabel* labelEuler = new QLabel(QStringLiteral("欧拉角旋转顺序:"), this);
labelEuler->setFont(font);
labelEuler->setStyleSheet(labelStyle);
commonForm->addRow(labelEuler, m_comboEulerOrder);
m_comboPoseOutputOrder = new QComboBox(this);
m_comboPoseOutputOrder->setFont(font);
m_comboPoseOutputOrder->setStyleSheet(comboStyle);
initPoseOutputOrderComboBox();
QLabel* labelPoseOutput = new QLabel(QStringLiteral("姿态输入/输出顺序:"), this);
labelPoseOutput->setFont(font);
labelPoseOutput->setStyleSheet(labelStyle);
commonForm->addRow(labelPoseOutput, m_comboPoseOutputOrder);
m_comboDirVectorInvert = new QComboBox(this);
m_comboDirVectorInvert->setFont(font);
m_comboDirVectorInvert->setStyleSheet(comboStyle);
initDirVectorInvertComboBox();
QLabel* labelDir = new QLabel(QStringLiteral("方向向量调整:"), this);
labelDir->setFont(font);
labelDir->setStyleSheet(labelStyle);
commonForm->addRow(labelDir, m_comboDirVectorInvert);
m_comboLongAxisDir = new QComboBox(this);
m_comboLongAxisDir->setFont(font);
m_comboLongAxisDir->setStyleSheet(comboStyle);
initLongAxisDirComboBox();
QLabel* labelLongAxis = new QLabel(QStringLiteral("长边对应轴:"), this);
labelLongAxis->setFont(font);
labelLongAxis->setStyleSheet(labelStyle);
commonForm->addRow(labelLongAxis, m_comboLongAxisDir);
m_comboByteOrder = new QComboBox(this);
m_comboByteOrder->setFont(font);
m_comboByteOrder->setStyleSheet(comboStyle);
initByteOrderComboBox();
QLabel* labelByte = new QLabel(QStringLiteral("数据字节序:"), this);
labelByte->setFont(font);
labelByte->setStyleSheet(labelStyle);
commonForm->addRow(labelByte, m_comboByteOrder);
mainLayout->addWidget(groupCommon);
if (showPlcConfig) {
m_groupPlc = new QGroupBox(QStringLiteral("PLC服务端配置"), this);
m_groupPlc->setFont(font);
m_groupPlc->setStyleSheet(groupStyle);
QFormLayout* plcForm = new QFormLayout(m_groupPlc);
plcForm->setSpacing(8);
m_editPlcIp = new QLineEdit(this);
m_editPlcIp->setFont(font);
m_editPlcIp->setStyleSheet(editStyle);
QLabel* l1 = new QLabel(QStringLiteral("PLC IP地址:"), this);
l1->setFont(font);
l1->setStyleSheet(labelStyle);
plcForm->addRow(l1, m_editPlcIp);
m_editPlcPort = new QLineEdit(this);
m_editPlcPort->setFont(font);
m_editPlcPort->setStyleSheet(editStyle);
QLabel* l2 = new QLabel(QStringLiteral("PLC端口:"), this);
l2->setFont(font);
l2->setStyleSheet(labelStyle);
plcForm->addRow(l2, m_editPlcPort);
m_editAddrPhotoRequest = new QLineEdit(this);
m_editAddrPhotoRequest->setFont(font);
m_editAddrPhotoRequest->setStyleSheet(editStyle);
QLabel* l3 = new QLabel(QStringLiteral("拍照请求地址:"), this);
l3->setFont(font);
l3->setStyleSheet(labelStyle);
plcForm->addRow(l3, m_editAddrPhotoRequest);
m_editAddrDataComplete = new QLineEdit(this);
m_editAddrDataComplete->setFont(font);
m_editAddrDataComplete->setStyleSheet(editStyle);
QLabel* l4 = new QLabel(QStringLiteral("数据完成地址:"), this);
l4->setFont(font);
l4->setStyleSheet(labelStyle);
plcForm->addRow(l4, m_editAddrDataComplete);
m_editAddrCoordDataStart = new QLineEdit(this);
m_editAddrCoordDataStart->setFont(font);
m_editAddrCoordDataStart->setStyleSheet(editStyle);
QLabel* l5 = new QLabel(QStringLiteral("坐标数据起始地址:"), this);
l5->setFont(font);
l5->setStyleSheet(labelStyle);
plcForm->addRow(l5, m_editAddrCoordDataStart);
mainLayout->addWidget(m_groupPlc);
}
if (showTcpConfig) {
m_groupTcp = new QGroupBox(QStringLiteral("TCP服务端配置"), this);
m_groupTcp->setFont(font);
m_groupTcp->setStyleSheet(groupStyle);
QFormLayout* tcpForm = new QFormLayout(m_groupTcp);
tcpForm->setSpacing(8);
m_editTcpPort = new QLineEdit(this);
m_editTcpPort->setFont(font);
m_editTcpPort->setStyleSheet(editStyle);
QLabel* l6 = new QLabel(QStringLiteral("TCP端口:"), this);
l6->setFont(font);
l6->setStyleSheet(labelStyle);
tcpForm->addRow(l6, m_editTcpPort);
mainLayout->addWidget(m_groupTcp);
}
mainLayout->addStretch();
}
void NetworkConfigWidget::initEulerOrderComboBox()
{
m_comboEulerOrder->addItem(QStringLiteral("RZ-RY-RX (外旋ZYX)"), EULER_ORDER_ZYX);
m_comboEulerOrder->addItem(QStringLiteral("RX-RY-RZ (外旋XYZ)"), EULER_ORDER_XYZ);
m_comboEulerOrder->addItem(QStringLiteral("RZ-RX-RY (外旋ZXY)"), EULER_ORDER_ZXY);
m_comboEulerOrder->addItem(QStringLiteral("RY-RX-RZ (外旋YXZ)"), EULER_ORDER_YXZ);
m_comboEulerOrder->addItem(QStringLiteral("RY-RZ-RX (外旋YZX)"), EULER_ORDER_YZX);
m_comboEulerOrder->addItem(QStringLiteral("RX-RZ-RY (外旋XZY)"), EULER_ORDER_XZY);
m_comboEulerOrder->setCurrentIndex(0);
}
void NetworkConfigWidget::initPoseOutputOrderComboBox()
{
m_comboPoseOutputOrder->addItem(QStringLiteral("RX-RY-RZ"), NET_POSE_OUTPUT_RX_RY_RZ);
m_comboPoseOutputOrder->addItem(QStringLiteral("RX-RZ-RY"), NET_POSE_OUTPUT_RX_RZ_RY);
m_comboPoseOutputOrder->addItem(QStringLiteral("RY-RX-RZ"), NET_POSE_OUTPUT_RY_RX_RZ);
m_comboPoseOutputOrder->addItem(QStringLiteral("RY-RZ-RX"), NET_POSE_OUTPUT_RY_RZ_RX);
m_comboPoseOutputOrder->addItem(QStringLiteral("RZ-RX-RY"), NET_POSE_OUTPUT_RZ_RX_RY);
m_comboPoseOutputOrder->addItem(QStringLiteral("RZ-RY-RX"), NET_POSE_OUTPUT_RZ_RY_RX);
m_comboPoseOutputOrder->setCurrentIndex(0);
}
void NetworkConfigWidget::initDirVectorInvertComboBox()
{
m_comboDirVectorInvert->addItem(QStringLiteral("不调整"), NET_DIR_INVERT_NONE);
m_comboDirVectorInvert->addItem(QStringLiteral("XY反向"), NET_DIR_INVERT_XY);
m_comboDirVectorInvert->addItem(QStringLiteral("XZ反向"), NET_DIR_INVERT_XZ);
m_comboDirVectorInvert->addItem(QStringLiteral("YZ反向"), NET_DIR_INVERT_YZ);
m_comboDirVectorInvert->setCurrentIndex(0);
}
void NetworkConfigWidget::initByteOrderComboBox()
{
m_comboByteOrder->addItem(QStringLiteral("大端序 (ABCD)"), NET_BYTE_ORDER_BIG);
m_comboByteOrder->addItem(QStringLiteral("小端序 (DCBA)"), NET_BYTE_ORDER_LITTLE);
m_comboByteOrder->setCurrentIndex(0);
}
void NetworkConfigWidget::initLongAxisDirComboBox()
{
m_comboLongAxisDir->addItem(QStringLiteral("X轴"), 0);
m_comboLongAxisDir->addItem(QStringLiteral("Y轴"), 1);
m_comboLongAxisDir->setCurrentIndex(0);
}
void NetworkConfigWidget::setConfig(const NetworkConfigData& config)
{
int idx = m_comboEulerOrder->findData(config.eulerOrder);
if (idx >= 0) {
m_comboEulerOrder->setCurrentIndex(idx);
}
idx = m_comboPoseOutputOrder->findData(config.poseOutputOrder);
if (idx >= 0) {
m_comboPoseOutputOrder->setCurrentIndex(idx);
}
idx = m_comboDirVectorInvert->findData(config.dirVectorInvert);
if (idx >= 0) {
m_comboDirVectorInvert->setCurrentIndex(idx);
}
idx = m_comboLongAxisDir->findData(config.longAxisDir);
if (idx >= 0) {
m_comboLongAxisDir->setCurrentIndex(idx);
}
idx = m_comboByteOrder->findData(config.byteOrder);
if (idx >= 0) {
m_comboByteOrder->setCurrentIndex(idx);
}
if (m_editPlcIp) {
m_editPlcIp->setText(config.plcServerIp);
}
if (m_editPlcPort) {
m_editPlcPort->setText(QString::number(config.plcServerPort));
}
if (m_editAddrPhotoRequest) {
m_editAddrPhotoRequest->setText(QString::number(config.addrPhotoRequest));
}
if (m_editAddrDataComplete) {
m_editAddrDataComplete->setText(QString::number(config.addrDataComplete));
}
if (m_editAddrCoordDataStart) {
m_editAddrCoordDataStart->setText(QString::number(config.addrCoordDataStart));
}
if (m_editTcpPort) {
m_editTcpPort->setText(QString::number(config.tcpServerPort));
}
}
NetworkConfigData NetworkConfigWidget::getConfig() const
{
NetworkConfigData config;
config.eulerOrder = m_comboEulerOrder->currentData().toInt();
config.poseOutputOrder = m_comboPoseOutputOrder->currentData().toInt();
config.dirVectorInvert = m_comboDirVectorInvert->currentData().toInt();
config.byteOrder = m_comboByteOrder->currentData().toInt();
config.longAxisDir = m_comboLongAxisDir->currentData().toInt();
if (m_editPlcIp) {
config.plcServerIp = m_editPlcIp->text().trimmed();
}
if (m_editPlcPort) {
config.plcServerPort = m_editPlcPort->text().toInt();
}
if (m_editAddrPhotoRequest) {
config.addrPhotoRequest = m_editAddrPhotoRequest->text().toInt();
}
if (m_editAddrDataComplete) {
config.addrDataComplete = m_editAddrDataComplete->text().toInt();
}
if (m_editAddrCoordDataStart) {
config.addrCoordDataStart = m_editAddrCoordDataStart->text().toInt();
}
if (m_editTcpPort) {
config.tcpServerPort = m_editTcpPort->text().toInt();
}
return config;
}
int NetworkConfigWidget::eulerOrder() const
{
return m_comboEulerOrder->currentData().toInt();
}
int NetworkConfigWidget::poseOutputOrder() const
{
return m_comboPoseOutputOrder->currentData().toInt();
}
int NetworkConfigWidget::dirVectorInvert() const
{
return m_comboDirVectorInvert->currentData().toInt();
}
int NetworkConfigWidget::byteOrder() const
{
return m_comboByteOrder->currentData().toInt();
}
int NetworkConfigWidget::longAxisDir() const
{
return m_comboLongAxisDir->currentData().toInt();
}