From 39b741f7f51b3ea6bd8bd052e830b4fb791b4025 Mon Sep 17 00:00:00 2001 From: briha Date: Sun, 31 Mar 2024 15:58:53 +0200 Subject: [PATCH] Added UI to select ISO 8601 date parsing --- .../DataLoadCSV/dataload_csv.cpp | 35 +++++++++++++++---- .../DataLoadCSV/dataload_csv.ui | 17 +++++++++ 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/plotjuggler_plugins/DataLoadCSV/dataload_csv.cpp b/plotjuggler_plugins/DataLoadCSV/dataload_csv.cpp index 6c059a3b9..72e9e727d 100644 --- a/plotjuggler_plugins/DataLoadCSV/dataload_csv.cpp +++ b/plotjuggler_plugins/DataLoadCSV/dataload_csv.cpp @@ -119,7 +119,19 @@ DataLoadCSV::DataLoadCSV() [this]() { emit _ui->buttonBox->accepted(); }); connect(_ui->checkBoxDateFormat, &QCheckBox::toggled, this, - [this](bool checked) { _ui->lineEditDateFormat->setEnabled(checked); }); + [this](bool checked) { + _ui->radioCustomDate->setEnabled(checked); + _ui->radioIso8601Date->setEnabled(checked); + _ui->lineEditDateFormat->setEnabled(_ui->radioCustomDate->isChecked()); + }); + + connect(_ui->radioCustomDate, &QRadioButton::clicked, this, [this](bool checked){ + _ui->lineEditDateFormat->setEnabled(checked); + }); + + connect(_ui->radioIso8601Date, &QRadioButton::clicked, this, [this](bool checked){ + _ui->lineEditDateFormat->setEnabled(!checked); + }); connect(_ui->dateTimeHelpButton, &QPushButton::clicked, this, [this]() { _dateTime_dialog->show(); }); @@ -490,6 +502,7 @@ bool DataLoadCSV::readDataFromFile(FileLoadInfo* info, PlotDataMapRef& plot_data double prev_time = std::numeric_limits::lowest(); bool parse_date_format = _ui->checkBoxDateFormat->isChecked(); QString format_string = _ui->lineEditDateFormat->text(); + bool parse_iso_8601 = _ui->radioIso8601Date->isChecked(); auto ParseTimestamp = [&](QString str, bool& is_number) { QString str_trimmed = str.trimmed(); @@ -530,9 +543,9 @@ bool DataLoadCSV::readDataFromFile(FileLoadInfo* info, PlotDataMapRef& plot_data static QLocale locale_with_comma(QLocale::German); val = locale_with_comma.toDouble(str_trimmed, &is_number); } - if (!is_number && parse_date_format) + if (!is_number && parse_date_format && (!format_string.isEmpty() || parse_iso_8601)) { - QDateTime ts = !format_string.isEmpty() ? QDateTime::fromString(str_trimmed, format_string) : QDateTime::fromString(str_trimmed, Qt::ISODateWithMs); + QDateTime ts = parse_iso_8601 ? QDateTime::fromString(str_trimmed, Qt::ISODateWithMs) : QDateTime::fromString(str_trimmed, format_string); is_number = ts.isValid(); if (is_number) { @@ -551,9 +564,9 @@ bool DataLoadCSV::readDataFromFile(FileLoadInfo* info, PlotDataMapRef& plot_data static QLocale locale_with_comma(QLocale::German); val = locale_with_comma.toDouble(str_trimmed, &is_number); } - if (!is_number && parse_date_format && !format_string.isEmpty()) + if (!is_number && parse_date_format && (!format_string.isEmpty() || parse_iso_8601)) { - QDateTime ts = QDateTime::fromString(str_trimmed, format_string); + QDateTime ts = parse_iso_8601 ? QDateTime::fromString(str_trimmed, Qt::ISODateWithMs) : QDateTime::fromString(str_trimmed, format_string); is_number = ts.isValid(); if (is_number) { @@ -779,12 +792,16 @@ bool DataLoadCSV::xmlSaveState(QDomDocument& doc, QDomElement& parent_element) c elem.setAttribute("time_axis", _default_time_axis.c_str()); elem.setAttribute("delimiter", _ui->comboBox->currentIndex()); - QString date_format; if (_ui->checkBoxDateFormat->isChecked()) { elem.setAttribute("date_format", _ui->lineEditDateFormat->text()); } + if (_ui->radioIso8601Date->isChecked()) + { + elem.setAttribute("date_format_iso", "ISO8601"); + } + parent_element.appendChild(elem); return true; } @@ -822,5 +839,11 @@ bool DataLoadCSV::xmlLoadState(const QDomElement& parent_element) _ui->checkBoxDateFormat->setChecked(true); _ui->lineEditDateFormat->setText(elem.attribute("date_format")); } + if (elem.hasAttribute("date_format_iso")) + { + _ui->radioIso8601Date->setChecked(true); + } else { + _ui->radioCustomDate->setChecked(true); + } return true; } diff --git a/plotjuggler_plugins/DataLoadCSV/dataload_csv.ui b/plotjuggler_plugins/DataLoadCSV/dataload_csv.ui index ea88253b1..d602740ce 100644 --- a/plotjuggler_plugins/DataLoadCSV/dataload_csv.ui +++ b/plotjuggler_plugins/DataLoadCSV/dataload_csv.ui @@ -131,6 +131,23 @@ + + + + ISO 8601 + + + true + + + + + + + Custom + + +