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