#include "AddSurfaceFileDlg.h" #include #include #include #include "app/Application.h" #include "common/SpdLogger.h" #include "ui_AddSurfaceFileDlg.h" AddSurfaceFileDlg::AddSurfaceFileDlg(QWidget* parent) : BaseAddFileDlg(FileEntryType::Surface, parent) , ui_(new Ui::AddSurfaceFileDlg) { ui_->setupUi(this); SetTitle(getDialogTitle()); setupConnections(); } AddSurfaceFileDlg::~AddSurfaceFileDlg() { delete ui_; } void AddSurfaceFileDlg::setupConnections() { connect(ui_->selectFileBtn, &QToolButton::clicked, this, &AddSurfaceFileDlg::onSelectFileClicked); connect(ui_->filePathEdit, &QLineEdit::textChanged, this, &AddSurfaceFileDlg::onFilePathChanged); connect(ui_->addBtn, &QPushButton::clicked, this, [this]() { OnSure(); }); connect(ui_->cancelBtn, &QPushButton::clicked, this, &QDialog::reject); } void AddSurfaceFileDlg::onSelectFileClicked() { const QString workspacePath = Application::GetWorkSpacePath(); QString filePath = QFileDialog::getOpenFileName( this, QStringLiteral("Select Surface Data File"), workspacePath, getFileFilter() ); if (filePath.isEmpty()) { return; } ui_->filePathEdit->setText(filePath); updateFileInfo(filePath); LOG_INFO("Selected surface file: {}", filePath.toStdString()); } void AddSurfaceFileDlg::onFilePathChanged() { QString filePath = ui_->filePathEdit->text(); if (!filePath.isEmpty()) { updateFileInfo(filePath); } } void AddSurfaceFileDlg::updateFileInfo(const QString& filePath) { QFileInfo fileInfo(filePath); ui_->fileNameValue->setText(fileInfo.fileName()); qint64 size = fileInfo.size(); QString sizeText; if (size < 1024) { sizeText = QString("%1 B").arg(size); } else if (size < 1024 * 1024) { sizeText = QString("%1 KB").arg(size / 1024.0, 0, 'f', 1); } else { sizeText = QString("%1 MB").arg(size / (1024.0 * 1024.0), 0, 'f', 1); } ui_->fileSizeValue->setText(sizeText); } bool AddSurfaceFileDlg::validateSpecificParams() { if (ui_->filePathEdit->text().isEmpty()) { QMessageBox::warning(this, QStringLiteral("Warning"), QStringLiteral("Please select a surface data file.")); return false; } QFileInfo fileInfo(ui_->filePathEdit->text()); if (!fileInfo.exists()) { QMessageBox::warning(this, QStringLiteral("Warning"), QStringLiteral("The selected file does not exist.")); return false; } if (ui_->xColumnSpinBox->value() == ui_->yColumnSpinBox->value() || ui_->xColumnSpinBox->value() == ui_->zColumnSpinBox->value() || ui_->yColumnSpinBox->value() == ui_->zColumnSpinBox->value()) { QMessageBox::warning(this, QStringLiteral("Warning"), QStringLiteral("X, Y, and Z columns must be different.")); return false; } return true; } QString AddSurfaceFileDlg::getFileFilter() const { return QStringLiteral("Surface Data Files (*.txt *.csv *.dat *.xyz);;All Files (*.*)"); } QString AddSurfaceFileDlg::getDialogTitle() const { return QStringLiteral("Add Surface Data File"); } QString AddSurfaceFileDlg::getSelectedFilePath() const { return ui_->filePathEdit->text(); } QString AddSurfaceFileDlg::getDescription() const { return ui_->descriptionEdit->toPlainText().trimmed(); } AddSurfaceFileDlg::SurfaceParams AddSurfaceFileDlg::getSurfaceParams() const { SurfaceParams params; params.xColumn = ui_->xColumnSpinBox->value(); params.yColumn = ui_->yColumnSpinBox->value(); params.zColumn = ui_->zColumnSpinBox->value(); params.xGridSize = ui_->xGridSizeSpinBox->value(); params.yGridSize = ui_->yGridSizeSpinBox->value(); params.hasHeader = ui_->hasHeaderCheckBox->isChecked(); params.description = ui_->descriptionEdit->toPlainText().trimmed(); // Get delimiter from combo box int index = ui_->separatorComboBox->currentIndex(); switch (index) { case 0: params.delimiter = ","; break; case 1: params.delimiter = "\t"; break; case 2: params.delimiter = " "; break; case 3: params.delimiter = ";"; break; default: params.delimiter = ","; break; } return params; }