diff --git a/src/app/tape/tmainwindow.cpp b/src/app/tape/tmainwindow.cpp index 193829fad..2a684d327 100644 --- a/src/app/tape/tmainwindow.cpp +++ b/src/app/tape/tmainwindow.cpp @@ -981,6 +981,7 @@ void TMainWindow::ImportDataFromCSV() dialog.SetWithHeader(qApp->Settings()->GetCSVWithHeader()); dialog.SetSelectedMib(qApp->Settings()->GetCSVCodec()); dialog.SetSeparator(qApp->Settings()->GetCSVSeparator()); + dialog.ShowFilePreview(fileName); if (dialog.exec() == QDialog::Accepted) { @@ -3159,17 +3160,24 @@ void TMainWindow::ImportIndividualMeasurements(const QxtCsvModel &csv) { try { + const QString name = csv.text(i, 0).simplified(); + if (name.isEmpty()) + { + ShowError(tr("Error in row %1. Measurement name is empty.").arg(i)); + continue; + } + IndividualMeasurement measurement; - measurement.name = CheckMName(qApp->TrVars()->MFromUser(csv.text(i, 0).simplified())); + measurement.name = CheckMName(qApp->TrVars()->MFromUser(name)); measurement.value = VTranslateVars::TryFormulaFromUser(csv.text(i, 1), qApp->Settings()->GetOsSeparator()); const bool custom = csv.text(i, 0).simplified().startsWith(CustomMSign); - if (columns >= 3 && not custom) + if (columns > 2 && custom) { measurement.fullName = csv.text(i, 2).simplified(); } - if (columns >= 4 && not custom) + if (columns > 3 && custom) { measurement.description = csv.text(i, 3).simplified(); } @@ -3251,8 +3259,15 @@ void TMainWindow::ImportMultisizeMeasurements(const QxtCsvModel &csv) { try { + const QString name = csv.text(i, 0).simplified(); + if (name.isEmpty()) + { + ShowError(tr("Error in row %1. Measurement name is empty.").arg(i)); + continue; + } + MultisizeMeasurement measurement; - measurement.name = CheckMName(qApp->TrVars()->MFromUser(csv.text(i, 0).simplified())); + measurement.name = CheckMName(qApp->TrVars()->MFromUser(name)); measurement.base = ConverToDouble(csv.text(i, 1), tr("Cannot convert base size value to double in column 2.")); @@ -3264,12 +3279,12 @@ void TMainWindow::ImportMultisizeMeasurements(const QxtCsvModel &csv) tr("Cannot convert size increase value to double in column 4.")); const bool custom = csv.text(i, 0).simplified().startsWith(CustomMSign); - if (columns >= 5 && not custom) + if (columns > 4 && custom) { measurement.fullName = csv.text(i, 4).simplified(); } - if (columns >= 6 && not custom) + if (columns > 5 && custom) { measurement.description = csv.text(i, 5).simplified(); } diff --git a/src/libs/vmisc/dialogs/dialogexporttocsv.cpp b/src/libs/vmisc/dialogs/dialogexporttocsv.cpp index a90f84b3c..0aa143f51 100644 --- a/src/libs/vmisc/dialogs/dialogexporttocsv.cpp +++ b/src/libs/vmisc/dialogs/dialogexporttocsv.cpp @@ -29,7 +29,8 @@ #include "dialogexporttocsv.h" #include "ui_dialogexporttocsv.h" -#include "../vmisc/vcommonsettings.h" +#include "../vcommonsettings.h" +#include "../qxtcsvmodel.h" #include "../vabstractapplication.h" #include @@ -40,7 +41,8 @@ DialogExportToCSV::DialogExportToCSV(QWidget *parent) : QDialog(parent), ui(new Ui::DialogExportToCSV), - isInitialized(false) + isInitialized(false), + m_fileName() { ui->setupUi(this); @@ -57,11 +59,27 @@ DialogExportToCSV::DialogExportToCSV(QWidget *parent) SCASSERT(bDefaults != nullptr) connect(bDefaults, &QPushButton::clicked, this, [this]() { + ui->comboBoxCodec->blockSignals(true); + ui->checkBoxWithHeader->blockSignals(true); + ui->buttonGroup->blockSignals(true); + ui->checkBoxWithHeader->setChecked(qApp->Settings()->GetDefCSVWithHeader()); ui->comboBoxCodec->setCurrentIndex(ui->comboBoxCodec->findData(VCommonSettings::GetDefCSVCodec())); SetSeparator(VCommonSettings::GetDefCSVSeparator()); + + ui->comboBoxCodec->blockSignals(false); + ui->checkBoxWithHeader->blockSignals(false); + ui->buttonGroup->blockSignals(false); + + ShowPreview(); }); + + ui->groupBoxPreview->setVisible(false); + + connect(ui->comboBoxCodec, QOverload::of(&QComboBox::currentIndexChanged), this, [this](){ShowPreview();}); + connect(ui->checkBoxWithHeader, &QCheckBox::stateChanged, this, [this](){ShowPreview();}); + connect(ui->buttonGroup, QOverload::of(&QButtonGroup::buttonClicked), this, [this](){ShowPreview();}); } //--------------------------------------------------------------------------------------------------------------------- @@ -158,12 +176,71 @@ void DialogExportToCSV::showEvent(QShowEvent *event) } // do your init stuff here - setMaximumSize(size()); - setMinimumSize(size()); + resize(1, 1); + adjustSize(); + if (not m_fileName.isEmpty()) + { + ShowPreview(); + } + else + { + setMaximumSize(size()); + setMinimumSize(size()); + } isInitialized = true;//first show windows are held } +//--------------------------------------------------------------------------------------------------------------------- +void DialogExportToCSV::ShowPreview() +{ + if (m_fileName.isEmpty()) + { + return; + } + + ui->groupBoxPreview->setVisible(true); + + QxtCsvModel csv(m_fileName, nullptr, IsWithHeader(), GetSeparator(), QTextCodec::codecForMib(GetSelectedMib())); + + const int columns = csv.columnCount(); + const int rows = csv.rowCount(); + + ui->tableWidget->clear(); + ui->tableWidget->setColumnCount(columns); + ui->tableWidget->setRowCount(rows); + + ui->tableWidget->horizontalHeader()->setVisible(IsWithHeader()); + if (IsWithHeader()) + { + for(int column=0; columntableWidget->setHorizontalHeaderItem(column, header); + } + ui->tableWidget->horizontalHeader()->setStretchLastSection(true); + } + + for (int row=0; row < rows; ++row) + { + for(int column=0; columnsetToolTip(csv.text(row, column)); + + // set the item non-editable (view only), and non-selectable + Qt::ItemFlags flags = item->flags(); + flags &= ~(Qt::ItemIsEditable); // reset/clear the flag + item->setFlags(flags); + + ui->tableWidget->setItem(row, column, item); + } + } + + ui->tableWidget->resizeColumnsToContents(); + ui->tableWidget->resizeRowsToContents(); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogExportToCSV::SetSeparator(const QChar &separator) { @@ -185,6 +262,12 @@ void DialogExportToCSV::SetSeparator(const QChar &separator) } } +//--------------------------------------------------------------------------------------------------------------------- +void DialogExportToCSV::ShowFilePreview(const QString &fileName) +{ + m_fileName = fileName; +} + //--------------------------------------------------------------------------------------------------------------------- QString DialogExportToCSV::MakeHelpCodecsList() { diff --git a/src/libs/vmisc/dialogs/dialogexporttocsv.h b/src/libs/vmisc/dialogs/dialogexporttocsv.h index 90c1aa82d..baa993d58 100644 --- a/src/libs/vmisc/dialogs/dialogexporttocsv.h +++ b/src/libs/vmisc/dialogs/dialogexporttocsv.h @@ -53,6 +53,8 @@ public: QChar GetSeparator() const; void SetSeparator(const QChar &separator); + void ShowFilePreview(const QString &fileName); + static QString MakeHelpCodecsList(); static QString MakeHelpSeparatorList(); @@ -64,6 +66,9 @@ private: Q_DISABLE_COPY(DialogExportToCSV) Ui::DialogExportToCSV *ui; bool isInitialized; + QString m_fileName; + + void ShowPreview(); }; #endif // DIALOGEXPORTTOCSV_H diff --git a/src/libs/vmisc/dialogs/dialogexporttocsv.ui b/src/libs/vmisc/dialogs/dialogexporttocsv.ui index c91663e38..726d0dae3 100644 --- a/src/libs/vmisc/dialogs/dialogexporttocsv.ui +++ b/src/libs/vmisc/dialogs/dialogexporttocsv.ui @@ -9,25 +9,25 @@ 0 0 - 333 - 292 + 326 + 383 - Export options + Options - + :/tapeicon/64x64/logo.png:/tapeicon/64x64/logo.png true - + - + - Export + Global @@ -53,7 +53,27 @@ - + + + + 0 + 0 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + @@ -62,12 +82,36 @@ + + + 0 + 0 + + Separator - - + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + QFormLayout::ExpandingFieldsGrow + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + Qt::AlignHCenter|Qt::AlignTop + + + + + 0 + 0 + + Tab @@ -76,8 +120,30 @@ - + + + + + 0 + 0 + + + + Semicolon + + + buttonGroup + + + + + + + 0 + 0 + + Comma @@ -89,23 +155,53 @@ - - + + + + + 0 + 0 + + - Semicolon + Space buttonGroup + + + + + + + Preview + + - - - Space + + + QAbstractItemView::NoEditTriggers - - buttonGroup + + false + + + false + + + false + + + true + + + QAbstractItemView::NoSelection + + + false @@ -125,7 +221,7 @@ - +