348 lines
13 KiB
C++
348 lines
13 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();
|
|
m_labelEulerOrder = new QLabel(QStringLiteral("欧拉角旋转顺序:"), this);
|
|
m_labelEulerOrder->setFont(font);
|
|
m_labelEulerOrder->setStyleSheet(labelStyle);
|
|
commonForm->addRow(m_labelEulerOrder, m_comboEulerOrder);
|
|
|
|
m_comboOutputEulerOrder = new QComboBox(this);
|
|
m_comboOutputEulerOrder->setFont(font);
|
|
m_comboOutputEulerOrder->setStyleSheet(comboStyle);
|
|
initOutputEulerOrderComboBox();
|
|
m_labelOutputEulerOrder = new QLabel(QStringLiteral("输出欧拉角顺序:"), this);
|
|
m_labelOutputEulerOrder->setFont(font);
|
|
m_labelOutputEulerOrder->setStyleSheet(labelStyle);
|
|
commonForm->addRow(m_labelOutputEulerOrder, m_comboOutputEulerOrder);
|
|
|
|
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();
|
|
m_labelDirVectorInvert = new QLabel(QStringLiteral("方向向量调整:"), this);
|
|
m_labelDirVectorInvert->setFont(font);
|
|
m_labelDirVectorInvert->setStyleSheet(labelStyle);
|
|
commonForm->addRow(m_labelDirVectorInvert, m_comboDirVectorInvert);
|
|
|
|
m_comboLongAxisDir = new QComboBox(this);
|
|
m_comboLongAxisDir->setFont(font);
|
|
m_comboLongAxisDir->setStyleSheet(comboStyle);
|
|
initLongAxisDirComboBox();
|
|
m_labelLongAxisDir = new QLabel(QStringLiteral("长边对应轴:"), this);
|
|
m_labelLongAxisDir->setFont(font);
|
|
m_labelLongAxisDir->setStyleSheet(labelStyle);
|
|
commonForm->addRow(m_labelLongAxisDir, 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::initOutputEulerOrderComboBox()
|
|
{
|
|
m_comboOutputEulerOrder->addItem(QStringLiteral("RZ-RY-RX (外旋ZYX)"), EULER_ORDER_ZYX);
|
|
m_comboOutputEulerOrder->addItem(QStringLiteral("RX-RY-RZ (外旋XYZ)"), EULER_ORDER_XYZ);
|
|
m_comboOutputEulerOrder->addItem(QStringLiteral("RZ-RX-RY (外旋ZXY)"), EULER_ORDER_ZXY);
|
|
m_comboOutputEulerOrder->addItem(QStringLiteral("RY-RX-RZ (外旋YXZ)"), EULER_ORDER_YXZ);
|
|
m_comboOutputEulerOrder->addItem(QStringLiteral("RY-RZ-RX (外旋YZX)"), EULER_ORDER_YZX);
|
|
m_comboOutputEulerOrder->addItem(QStringLiteral("RX-RZ-RY (外旋XZY)"), EULER_ORDER_XZY);
|
|
m_comboOutputEulerOrder->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_comboOutputEulerOrder->findData(config.outputEulerOrder);
|
|
if (idx >= 0) {
|
|
m_comboOutputEulerOrder->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.outputEulerOrder = m_comboOutputEulerOrder->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::outputEulerOrder() const
|
|
{
|
|
return m_comboOutputEulerOrder->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();
|
|
}
|
|
|
|
void NetworkConfigWidget::setExtrinsicControlsVisible(bool visible)
|
|
{
|
|
auto applyVisibility = [visible](QWidget* w) {
|
|
if (w) w->setVisible(visible);
|
|
};
|
|
applyVisibility(m_labelEulerOrder);
|
|
applyVisibility(m_comboEulerOrder);
|
|
applyVisibility(m_labelOutputEulerOrder);
|
|
applyVisibility(m_comboOutputEulerOrder);
|
|
applyVisibility(m_labelDirVectorInvert);
|
|
applyVisibility(m_comboDirVectorInvert);
|
|
applyVisibility(m_labelLongAxisDir);
|
|
applyVisibility(m_comboLongAxisDir);
|
|
}
|