109 lines
3.8 KiB
C++
109 lines
3.8 KiB
C++
#include "dialogdeviceconfig.h"
|
|
#include "ui_dialogdeviceconfig.h"
|
|
#include "BagThreadPositionPresenter.h"
|
|
#include "ConfigManager.h"
|
|
#include "PathManager.h"
|
|
#include "StyledMessageBox.h"
|
|
#include "VrLog.h"
|
|
|
|
DialogDeviceConfig::DialogDeviceConfig(QWidget *parent)
|
|
: QDialog(parent)
|
|
, ui(new Ui::DialogDeviceConfig)
|
|
, m_presenter(nullptr)
|
|
{
|
|
ui->setupUi(this);
|
|
|
|
// 初始化字节序下拉框选项
|
|
ui->comboEndian->addItem(QString::fromUtf8("大端"), true);
|
|
ui->comboEndian->addItem(QString::fromUtf8("小端"), false);
|
|
}
|
|
|
|
DialogDeviceConfig::~DialogDeviceConfig()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
void DialogDeviceConfig::SetPresenter(BagThreadPositionPresenter* presenter)
|
|
{
|
|
m_presenter = presenter;
|
|
loadConfig();
|
|
}
|
|
|
|
void DialogDeviceConfig::loadConfig()
|
|
{
|
|
if (!m_presenter || !m_presenter->GetConfigManager()) {
|
|
return;
|
|
}
|
|
|
|
ConfigResult configResult = m_presenter->GetConfigManager()->GetConfigResult();
|
|
|
|
// 相机配置
|
|
if (!configResult.cameraList.empty()) {
|
|
ui->editCameraIP->setText(QString::fromStdString(configResult.cameraList[0].ip));
|
|
ui->spinBaseDistance->setValue(configResult.cameraList[0].baseDistance);
|
|
}
|
|
|
|
// 协议配置
|
|
ui->editModbusIP->setText(QString::fromStdString(configResult.modbusIP));
|
|
ui->comboEndian->setCurrentIndex(configResult.modbusBigEndian ? 0 : 1);
|
|
}
|
|
|
|
void DialogDeviceConfig::on_btnSave_clicked()
|
|
{
|
|
if (!m_presenter || !m_presenter->GetConfigManager()) {
|
|
StyledMessageBox::warning(this, QString::fromUtf8("错误"), QString::fromUtf8("系统未初始化"));
|
|
return;
|
|
}
|
|
|
|
// 获取当前完整配置
|
|
SystemConfig systemConfig = m_presenter->GetConfigManager()->GetConfig();
|
|
|
|
// 更新相机配置
|
|
if (!systemConfig.configResult.cameraList.empty()) {
|
|
systemConfig.configResult.cameraList[0].ip = ui->editCameraIP->text().toStdString();
|
|
systemConfig.configResult.cameraList[0].baseDistance = ui->spinBaseDistance->value();
|
|
}
|
|
|
|
// 更新协议配置
|
|
systemConfig.configResult.modbusIP = ui->editModbusIP->text().toStdString();
|
|
systemConfig.configResult.modbusBigEndian = ui->comboEndian->currentData().toBool();
|
|
|
|
// 更新配置到ConfigManager
|
|
if (!m_presenter->GetConfigManager()->UpdateFullConfig(systemConfig)) {
|
|
StyledMessageBox::warning(this, QString::fromUtf8("错误"), QString::fromUtf8("更新配置失败"));
|
|
return;
|
|
}
|
|
|
|
// 保存到文件
|
|
QString configPath = PathManager::GetInstance().GetConfigFilePath();
|
|
if (!m_presenter->GetConfigManager()->SaveConfigToFile(configPath.toStdString())) {
|
|
StyledMessageBox::warning(this, QString::fromUtf8("错误"), QString::fromUtf8("保存配置文件失败"));
|
|
return;
|
|
}
|
|
|
|
// 实时应用基准距离
|
|
if (!systemConfig.configResult.cameraList.empty()) {
|
|
double baseDistance = systemConfig.configResult.cameraList[0].baseDistance;
|
|
int cameraIndex = systemConfig.configResult.cameraList[0].index;
|
|
m_presenter->ApplyBaseDistance(cameraIndex, baseDistance);
|
|
}
|
|
|
|
// 实时应用ModbusTCP配置
|
|
std::string modbusIP = systemConfig.configResult.modbusIP;
|
|
bool bigEndian = systemConfig.configResult.modbusBigEndian;
|
|
m_presenter->ApplyModbusConfig(modbusIP, bigEndian);
|
|
|
|
StyledMessageBox::information(this, QString::fromUtf8("提示"), QString::fromUtf8("配置保存成功"));
|
|
|
|
LOG_INFO("[DialogDeviceConfig] 配置已保存: 相机IP=%s, 基准距离=%.1f, ModbusIP=%s, 大端=%s\n",
|
|
ui->editCameraIP->text().toStdString().c_str(),
|
|
ui->spinBaseDistance->value(),
|
|
modbusIP.c_str(),
|
|
bigEndian ? "true" : "false");
|
|
}
|
|
|
|
void DialogDeviceConfig::on_btnCancel_clicked()
|
|
{
|
|
close();
|
|
}
|