diff options
Diffstat (limited to 'desktop-widgets/divelogimportdialog.cpp')
-rw-r--r-- | desktop-widgets/divelogimportdialog.cpp | 45 |
1 files changed, 38 insertions, 7 deletions
diff --git a/desktop-widgets/divelogimportdialog.cpp b/desktop-widgets/divelogimportdialog.cpp index 757cad59e..ecc2d24fb 100644 --- a/desktop-widgets/divelogimportdialog.cpp +++ b/desktop-widgets/divelogimportdialog.cpp @@ -17,6 +17,7 @@ const DiveLogImportDialog::CSVAppConfig DiveLogImportDialog::CSVApps[CSVAPPS] = { "Manual import", SILENCE_WARNING }, { "APD Log Viewer - DC1", 0, 1, 15, 6, 3, 4, 5, 17, -1, -1, 18, -1, 2, "Tab" }, { "APD Log Viewer - DC2", 0, 1, 15, 6, 7, 8, 9, 17, -1, -1, 18, -1, 2, "Tab" }, + { "DL7", 1, 2, -1, -1, -1, -1, -1, -1, -1, 8, -1, 10, -1, "|" }, { "XP5", 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Tab" }, { "SensusCSV", 9, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "," }, { "Seabear CSV", 0, 1, 5, -1, -1, -1, -1, -1, 2, 3, 4, 6, -1, ";" }, @@ -28,6 +29,7 @@ enum Known { MANUAL, APD, APD2, + DL7, XP5, SENSUS, SEABEAR, @@ -343,11 +345,12 @@ DiveLogImportDialog::DiveLogImportDialog(QStringList fn, QWidget *parent) : QDia /* Add indexes of XSLTs requiring special handling to the list */ specialCSV << SENSUS; specialCSV << SUBSURFACE; + specialCSV << DL7; for (int i = 0; !CSVApps[i].name.isNull(); ++i) ui->knownImports->addItem(CSVApps[i].name); - ui->CSVSeparator->addItems( QStringList() << tr("Tab") << "," << ";"); + ui->CSVSeparator->addItems( QStringList() << tr("Tab") << "," << ";" << "|"); loadFileContents(-1, INITIAL); @@ -386,6 +389,7 @@ void DiveLogImportDialog::loadFileContents(int value, whatChanged triggeredBy) bool seabear = false; bool xp5 = false; bool apd = false; + bool dl7 = false; // reset everything ColumnNameProvider *provider = new ColumnNameProvider(this); @@ -467,6 +471,23 @@ void DiveLogImportDialog::loadFileContents(int value, whatChanged triggeredBy) blockSignals(true); ui->knownImports->setCurrentText("XP5"); blockSignals(false); + } else if (firstLine.contains("FSH")) { + QString units = "Metric"; + dl7 = true; + while ((firstLine = f.readLine().trimmed()).length() > 0 && !f.atEnd()) { + /* DL7 actually defines individual units (e.g. depth, temp, pressure, etc.) + * and there are quite a few other options as well, but let's use metric + * unless depth unit is clearly Imperial. */ + + if (firstLine.contains("ThFt")) { + units = "Imperial"; + } + } + firstLine = "|Sample time|Sample depth||||||Sample temperature||Sample pressure"; + blockSignals(true); + ui->knownImports->setCurrentText("DL7"); + ui->CSVUnits->setCurrentText(units); + blockSignals(false); } // Special handling for APD Log Viewer @@ -487,11 +508,14 @@ void DiveLogImportDialog::loadFileContents(int value, whatChanged triggeredBy) int tabs = firstLine.count('\t'); int commas = firstLine.count(','); int semis = firstLine.count(';'); - if (tabs > commas && tabs > semis) + int pipes = firstLine.count('|'); + if (tabs > commas && tabs > semis && tabs > pipes) separator = "\t"; - else if (commas > tabs && commas > semis) + else if (commas > tabs && commas > semis && commas > pipes) separator = ","; - else if (semis > tabs && semis > commas) + else if (pipes > tabs && pipes > commas && pipes > semis) + separator = "|"; + else if (semis > tabs && semis > commas && semis > pipes) separator = ";"; if (ui->CSVSeparator->currentText() != separator) { blockSignals(true); @@ -548,7 +572,7 @@ void DiveLogImportDialog::loadFileContents(int value, whatChanged triggeredBy) } if (matchedSome) { ui->dragInstructions->setText(tr("Some column headers were pre-populated; please drag and drop the headers so they match the column they are in.")); - if (triggeredBy != KNOWNTYPES && !seabear && !xp5 && !apd) { + if (triggeredBy != KNOWNTYPES && !seabear && !xp5 && !apd && !dl7) { blockSignals(true); ui->knownImports->setCurrentIndex(0); // <- that's "Manual import" blockSignals(false); @@ -662,6 +686,13 @@ void DiveLogImportDialog::loadFileContents(int value, whatChanged triggeredBy) * actual data. */ while (strlen(f.readLine()) > 3 && !f.atEnd()); + } else if (dl7) { + while ((firstLine = f.readLine().trimmed()).length() > 0 && !f.atEnd()) { + if (firstLine.contains("ZDP")) { + firstLine = f.readLine().trimmed(); + break; + } + } } while (rows < 10 && !f.atEnd()) { @@ -788,7 +819,7 @@ void DiveLogImportDialog::on_buttonBox_accepted() sample->tts.seconds *= 60; } } else { - char *params[37]; + char *params[39]; int pnr = 0; pnr = setup_csv_params(r, params, pnr); @@ -855,7 +886,7 @@ void DiveLogImportDialog::on_buttonBox_accepted() parse_manual_file(fileNames[i].toUtf8().data(), params, pnr - 1); } else { - char *params[37]; + char *params[39]; int pnr = 0; pnr = setup_csv_params(r, params, pnr); |