DYTSrouce/src/ui/WorkSpace/AddTableFileDlg.cpp

135 lines
4.0 KiB
C++
Raw Normal View History

2025-10-22 17:40:44 +00:00
#include "AddTableFileDlg.h"
#include <QMessageBox>
#include <QFileInfo>
#include <QFileDialog>
#include "app/Application.h"
#include "common/SpdLogger.h"
#include "ui_AddTableFileDlg.h"
AddTableFileDlg::AddTableFileDlg(QWidget* parent)
: BaseAddFileDlg(FileEntryType::Table, parent)
, ui(new Ui::AddTableFileDlg) {
ui->setupUi(this);
SetTitle(getDialogTitle());
setupSpecificUI();
setupConnections();
}
AddTableFileDlg::~AddTableFileDlg() {
delete ui;
}
void AddTableFileDlg::setupSpecificUI() {
// UI is already set up in constructor
}
void AddTableFileDlg::setupConnections() {
// Connect file selection
connect(ui->selectFileBtn, &QToolButton::clicked, this, &AddTableFileDlg::onSelectFileClicked);
connect(ui->filePathEdit, &QLineEdit::textChanged, this, &AddTableFileDlg::onFilePathChanged);
connect(ui->separatorComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, &AddTableFileDlg::onDelimiterChanged);
connect(ui->hasHeaderCheckBox, &QCheckBox::toggled, this, &AddTableFileDlg::onHeaderToggled);
connect(ui->addBtn, &QPushButton::clicked, this, [this]() { OnSure(); });
connect(ui->cancelBtn, &QPushButton::clicked, this, &QDialog::reject);
}
void AddTableFileDlg::onSelectFileClicked() {
const QString workspacePath = Application::GetWorkSpacePath();
QString filePath = QFileDialog::getOpenFileName(
this,
QStringLiteral("Select Table File"),
workspacePath,
getFileFilter()
);
if (!filePath.isEmpty()) {
ui->filePathEdit->setText(filePath);
}
}
void AddTableFileDlg::onFilePathChanged(const QString& filePath) {
updateFileInfo(filePath);
}
void AddTableFileDlg::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);
}
void AddTableFileDlg::onDelimiterChanged() {
// Handle delimiter change if needed
}
void AddTableFileDlg::onHeaderToggled(bool hasHeader) {
// Handle header toggle if needed
}
bool AddTableFileDlg::validateSpecificParams() {
if (ui->filePathEdit->text().isEmpty()) {
QMessageBox::warning(this, QStringLiteral("Warning"),
QStringLiteral("Please select a table file first."));
return false;
}
QFileInfo fileInfo(ui->filePathEdit->text());
if (!fileInfo.exists()) {
QMessageBox::warning(this, QStringLiteral("Warning"),
QStringLiteral("Selected file does not exist."));
return false;
}
return true;
}
QString AddTableFileDlg::getFileFilter() const {
return QStringLiteral("Table Files (*.txt *.csv *.tsv *.dat);;All Files (*.*)");
}
QString AddTableFileDlg::getDialogTitle() const {
return QStringLiteral("Add Table Data File");
}
QString AddTableFileDlg::getSelectedFilePath() const {
return ui->filePathEdit->text();
}
QString AddTableFileDlg::getDescription() const {
return ui->descriptionEdit->toPlainText().trimmed();
}
AddTableFileDlg::TableParams AddTableFileDlg::getTableParams() const {
TableParams params;
// 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;
}
params.hasHeader = ui->hasHeaderCheckBox->isChecked();
params.xColumn = 1; // Default values
params.yColumn = 2;
params.description = ui->descriptionEdit->toPlainText().trimmed();
return params;
}