GrabBag/AppUtils/UICommon/Src/NetworkConfigWidget.cpp

236 lines
8.0 KiB
C++

#include "NetworkConfigWidget.h"
#include "ui_NetworkConfigWidget.h"
#include <QFont>
#include <QList>
NetworkConfigWidget::NetworkConfigWidget(bool showPlcConfig, bool showTcpConfig, QWidget* parent)
: QWidget(parent)
, ui(new Ui::NetworkConfigWidget)
{
setupUI(showPlcConfig, showTcpConfig);
}
NetworkConfigWidget::~NetworkConfigWidget()
{
delete ui;
}
void NetworkConfigWidget::setupUI(bool showPlcConfig, bool showTcpConfig)
{
ui->setupUi(this);
QFont font;
font.setPointSize(16);
setStyleSheet(
"QLabel { color: rgb(221, 225, 233); background-color: transparent; }"
"QLineEdit, QComboBox { color: rgb(221, 225, 233); background-color: rgb(47, 48, 52); "
"border: 1px solid rgb(70, 72, 78); padding: 4px; }"
"QComboBox QAbstractItemView { color: rgb(221, 225, 233); background-color: rgb(47, 48, 52); "
"selection-background-color: rgb(70, 100, 150); }"
"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; }");
const QList<QWidget*> widgets = findChildren<QWidget*>();
for (QWidget* widget : widgets) {
widget->setFont(font);
}
m_comboEulerOrder = ui->comboEulerOrder;
m_comboOutputEulerOrder = ui->comboOutputEulerOrder;
m_comboPoseOutputOrder = ui->comboPoseOutputOrder;
m_comboByteOrder = ui->comboByteOrder;
m_labelEulerOrder = ui->labelEulerOrder;
m_labelOutputEulerOrder = ui->labelOutputEulerOrder;
m_labelPoseOutputOrder = ui->labelPoseOutputOrder;
m_groupPlc = ui->groupPlc;
m_editPlcIp = ui->editPlcIp;
m_editPlcPort = ui->editPlcPort;
m_editAddrPhotoRequest = ui->editAddrPhotoRequest;
m_editAddrDataComplete = ui->editAddrDataComplete;
m_editAddrCoordDataStart = ui->editAddrCoordDataStart;
m_groupTcp = ui->groupTcp;
m_editTcpPort = ui->editTcpPort;
initEulerOrderComboBox();
initOutputEulerOrderComboBox();
initPoseOutputOrderComboBox();
initByteOrderComboBox();
m_groupPlc->setVisible(showPlcConfig);
m_groupTcp->setVisible(showTcpConfig);
}
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::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::setConfig(const NetworkConfigData& config)
{
m_configCache = 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_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 = m_configCache;
config.eulerOrder = m_comboEulerOrder->currentData().toInt();
config.outputEulerOrder = m_comboOutputEulerOrder->currentData().toInt();
config.poseOutputOrder = m_comboPoseOutputOrder->currentData().toInt();
config.byteOrder = m_comboByteOrder->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_configCache.dirVectorInvert;
}
int NetworkConfigWidget::byteOrder() const
{
return m_comboByteOrder->currentData().toInt();
}
int NetworkConfigWidget::longAxisDir() const
{
return m_configCache.longAxisDir;
}
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_labelPoseOutputOrder);
applyVisibility(m_comboPoseOutputOrder);
}
void NetworkConfigWidget::setPoseOutputOrderVisible(bool visible)
{
if (m_labelPoseOutputOrder) {
m_labelPoseOutputOrder->setVisible(visible);
}
if (m_comboPoseOutputOrder) {
m_comboPoseOutputOrder->setVisible(visible);
}
}