2026-02-11 00:53:51 +08:00

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();
}