diff --git a/davis_one/davis.cpp b/davis_one/davis.cpp index 62b1b83..f67fc81 100644 --- a/davis_one/davis.cpp +++ b/davis_one/davis.cpp @@ -43,6 +43,7 @@ namespace dvs { const char kHtmlModel[] = R"( + DAVIS %13 diff --git a/gui/davis_gui.cpp b/gui/davis_gui.cpp index 783c145..ca48565 100644 --- a/gui/davis_gui.cpp +++ b/gui/davis_gui.cpp @@ -392,6 +392,83 @@ Skins DavisGUI::checkSkin() { return skin; } +bool DavisGUI::getDateTimeData(const QStringList& lines, + QString& dates, + std::vector& values, + std::vector& force, + std::vector>& multicharts) { + QJsonArray jarr; + if (jsn::getJsonArrayFromFile("date_time_formats.json", jarr) == false) { + jsn::getJsonArrayFromFile(":/date_time_formats.json", jarr); + } + + for (int i = 0; i < lines.size(); ++i) { + QString test = lines[i]; + test.replace("'", ""); + for (int j = 0; j < jarr.size(); ++j) { + int template_time_stamp_size = jarr[j].toString().size(); + QString template_time_stamp = jarr[j].toString(); + if (test.size() < template_time_stamp_size + 1) { + continue; + } + QString separator = QString(test[template_time_stamp_size]); + QString substr = test.mid(0, template_time_stamp_size); + QDateTime dt = QDateTime::fromString(substr, template_time_stamp); + if (dt.isValid()) { + dates.append("'"); + dates.append(dt.toString("yyyy-MM-dd hh:mm:ss")); + dates.append("'"); + if (i < lines.size() - 1) { + dates.append(","); + } + auto values_list = test.split(separator); + //Clear empty values + for (int ch = 0; ch < values_list.size(); ++ch) { + if (values_list[ch].isEmpty()) { + values_list.removeAt(ch); + } + } + if (values_list.size() < 2) { + continue; + } + if (values_list.size() > 3) { + std::vector temp(values_list.size() - 1); + for (int j = 1; j < values_list.size(); ++j) { + temp[j - 1] = values_list[j].toDouble(); + } + multicharts.push_back(temp); + } + double value = values_list[1].toDouble(); + values.emplace_back(value); + if (values_list.size() == 3) { + double value = values_list[2].toDouble(); + force.emplace_back(value); + } + } + } + } + return true; +} + +QStringList DavisGUI::getLinesFromFile(const QString& pathToFile) { + QFile file(pathToFile); + QTextStream ts(&file); + ts.setCodec("UTF-8"); + if (file.open(QIODevice::ReadWrite) == false) { + return QStringList(); + }; + QString line; + QStringList str_lines; + while (ts.readLineInto(&line)) { + str_lines.append(line); + } + if (str_lines.empty()) { + return QStringList(); + } + file.close(); + return str_lines; +} + void DavisGUI::setMaxStyleWindow(int animDuration) { m_isMinStyleWindow = false; hideElementsDuringResize(); @@ -664,70 +741,12 @@ void DavisGUI::readPlotText(QStringList& str_lines, QString title) { bool DavisGUI::checkDateTimeVariant(const QStringList& lines) { - QJsonArray jarr; - if (jsn::getJsonArrayFromFile("date_time_formats.json", jarr) == false) { - jsn::getJsonArrayFromFile(":/date_time_formats.json", jarr); - } - qDebug() << jarr; + QString dates; std::vector values; std::vector force; std::vector> multicharts; - - for (int i = 0; i < lines.size(); ++i) { - QString test = lines[i]; - test.replace("'", ""); - for (int j = 0; j < jarr.size(); ++j) { - int template_time_stamp_size = jarr[j].toString().size(); - QString template_time_stamp = jarr[j].toString(); - if (test.size() < template_time_stamp_size + 1) { - continue; - } - QString separator = QString(test[template_time_stamp_size]); - QString substr = test.mid(0, template_time_stamp_size); - QDateTime dt = QDateTime::fromString(substr, template_time_stamp); - if (dt.isValid()) { - //2013-10-04 22:23:00 - //qDebug() << dt.toString("yyyy-MM-dd hh:mm:ss"); - dates.append("'"); - dates.append(dt.toString("yyyy-MM-dd hh:mm:ss")); - dates.append("'"); - if (i < lines.size() - 1) { - dates.append(","); - } - - auto values_list = test.split(separator); - //Clear empty values - for (int ch = 0; ch < values_list.size(); ++ch) { - if (values_list[ch].isEmpty()) { - values_list.removeAt(ch); - } - } - - - if (values_list.size() < 2) { - continue; - } - if (values_list.size() > 3) { - std::vector temp(values_list.size() - 1); - for (int j = 1; j < values_list.size(); ++j) { - temp[j - 1] = values_list[j].toDouble(); - } - multicharts.push_back(temp); - } - - double value = values_list[1].toDouble(); - //qDebug() << value; - values.emplace_back(value); - if (values_list.size() == 3) { - double value = values_list[2].toDouble(); - //qDebug() << value; - force.emplace_back(value); - } - - } - } - } + getDateTimeData(lines, dates, values, force, multicharts); if (multicharts.empty() == false) { dvs::transponeMatrix(multicharts); @@ -737,7 +756,6 @@ bool DavisGUI::checkDateTimeVariant(const QStringList& lines) { if (values.size() == 0) return false; - qDebug() << "check sizes: " << lines.size() << values.size(); if (force.empty() == false) { dvs::showCloudOfPointsChartStr(dates.toStdString(), values, force, action_fitPlotToAllWindow->isChecked()); @@ -746,7 +764,6 @@ bool DavisGUI::checkDateTimeVariant(const QStringList& lines) { dvs::showDateTimeChart(dates.toStdString(), values, action_fitPlotToAllWindow->isChecked()); return true; - } void DavisGUI::selectAndShowFiles() { @@ -765,21 +782,9 @@ void DavisGUI::selectAndShowFiles() { bool DavisGUI::isFileContainsSingleChart(const QString& pathToFile, std::vector& outX, std::vector& outY) { - QFile file(pathToFile); - QTextStream ts(&file); - ts.setCodec("UTF-8"); - if (file.open(QIODevice::ReadWrite) == false) { - return false; - }; - QString line; - QStringList str_lines; - while (ts.readLineInto(&line)) { - str_lines.append(line); - } - if (str_lines.empty()) { - return false; - } - file.close(); + + QStringList str_lines = getLinesFromFile(pathToFile); + std::vector> data; char separator; @@ -832,8 +837,6 @@ bool DavisGUI::isFileContainsSingleChart(const QString& pathToFile, } } - //qDebug() << outX; - //qDebug() << outY; return true; } @@ -895,24 +898,41 @@ void DavisGUI::visualizeFiles(const QStringList& file_list) { if (file_list.isEmpty()) { return; } - QString all_chart_blocks; - const QString trace_name = "trace%1"; - QString all_traces_names; + if (file_list.size() > 1) { - QStringList onlySingleChartList; - qDebug() << "file list size: " << file_list.size(); + QVector dates_list; + std::vector> all_values; + for (int i = 0; i < file_list.size(); ++i) { + QStringList lines; + QString dates; + std::vector values; + std::vector force; + std::vector> multicharts; + lines = getLinesFromFile(file_list[i]); + + getDateTimeData(lines, dates, values, force, multicharts); + if (dates.isEmpty() == false) { + dates_list.append(dates); + all_values.emplace_back(values); + } + } + if (dates_list.isEmpty() == false) { + dvs::showDateTimeMultichart(dates_list[0].toStdString(), all_values, true); + return; + } + + std::vector> data; std::vector x_values; for (int i = 0; i < file_list.size(); ++i) { std::vector outX, outY; - if(isFileContainsSingleChart(file_list[i], outX, outY)){ - //dv::show(outX,outY); - if(i==0)x_values = outX; - data.push_back(outY); + if (isFileContainsSingleChart(file_list[i], outX, outY)) { + if (i == 0) + x_values = outX; + data.push_back(outY); }; - } - dvs::showDateTimeMultichart(dvs::vectorToString(x_values),data,true); + dvs::showDateTimeMultichart(dvs::vectorToString(x_values), data, true); return; } QString filePath = file_list.first(); diff --git a/gui/davis_gui.h b/gui/davis_gui.h index ed5a0b0..6eeae62 100644 --- a/gui/davis_gui.h +++ b/gui/davis_gui.h @@ -51,8 +51,8 @@ class DavisGUI : public QMainWindow { void selectAndShowFiles(); bool checkDateTimeVariant(const QStringList& lines); bool isFileContainsSingleChart(const QString& pathToFile, - std::vector &outX, - std::vector &outY); + std::vector& outX, + std::vector& outY); void visualizeFiles(const QStringList& file_list); void hideElementsDuringResize(); void saveSettings(const QString& fileName); @@ -62,6 +62,13 @@ class DavisGUI : public QMainWindow { void matrixAnalyzer(std::vector>& matrix, const bool isRow); Skins checkSkin(); + bool getDateTimeData(const QStringList& lines, + QString& dates, + std::vector& values, + std::vector& force, + std::vector>& multicharts); + + QStringList getLinesFromFile(const QString& pathToFile); private slots: diff --git a/plotly_maker/html_parts.cpp b/plotly_maker/html_parts.cpp index de4cf8f..cbfccec 100644 --- a/plotly_maker/html_parts.cpp +++ b/plotly_maker/html_parts.cpp @@ -6,6 +6,7 @@ namespace dvs { const char kHtmlModel[] = R"( + DAVIS %13