DYTSrouce/src/ui/WorkSpace/AddSurfaceFileDlg.cpp

135 lines
4.3 KiB
C++
Raw Normal View History

2025-10-22 17:40:44 +00:00
#include "AddSurfaceFileDlg.h"
#include <QMessageBox>
#include <QFileInfo>
#include <QFileDialog>
#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;
}