135 lines
4.3 KiB
C++
135 lines
4.3 KiB
C++
|
|
#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;
|
||
|
|
}
|