From d5991800eed5af6d84e91706764817211876b03a Mon Sep 17 00:00:00 2001 From: Anton Lundin Date: Wed, 9 Jul 2014 22:13:37 +0200 Subject: [PATCH] Add support for importing NDL from CSV files Signed-off-by: Anton Lundin Signed-off-by: Dirk Hohndel --- dive.h | 2 +- file.c | 10 +++++++--- qt-ui/divelogimportdialog.cpp | 14 +++++++++----- qt-ui/divelogimportdialog.h | 1 + qt-ui/divelogimportdialog.ui | 28 +++++++++++++++++++++++++--- xslt/csv2xml.xslt | 10 ++++++++++ 6 files changed, 53 insertions(+), 12 deletions(-) diff --git a/dive.h b/dive.h index 6f0bb99f1..fc9e676b7 100644 --- a/dive.h +++ b/dive.h @@ -553,7 +553,7 @@ extern int parse_dm4_buffer(sqlite3 *handle, const char *url, const char *buf, i extern int parse_shearwater_buffer(sqlite3 *handle, const char *url, const char *buf, int size, struct dive_table *table); extern int parse_file(const char *filename); -extern int parse_csv_file(const char *filename, int time, int depth, int temp, int po2f, int cnsf, int stopdepthf, int sepidx, const char *csvtemplate, int units); +extern int parse_csv_file(const char *filename, int time, int depth, int temp, int po2f, int cnsf, int ndlf, int stopdepthf, int sepidx, const char *csvtemplate, int units); extern int parse_manual_file(const char *filename, int separator_index, int units, int number, int date, int time, int duration, int location, int gps, int maxdepth, int meandepth, int buddy, int notes, int weight, int tags); extern int save_dives(const char *filename); diff --git a/file.c b/file.c index 2c0b9f939..cb2c4f22a 100644 --- a/file.c +++ b/file.c @@ -384,16 +384,17 @@ int parse_file(const char *filename) #define MAXCOLDIGITS 3 #define MAXCOLS 100 -int parse_csv_file(const char *filename, int timef, int depthf, int tempf, int po2f, int cnsf, int stopdepthf, int sepidx, const char *csvtemplate, int unitidx) +int parse_csv_file(const char *filename, int timef, int depthf, int tempf, int po2f, int cnsf, int ndlf, int stopdepthf, int sepidx, const char *csvtemplate, int unitidx) { struct memblock mem; int pnr = 0; - char *params[21]; + char *params[23]; char timebuf[MAXCOLDIGITS]; char depthbuf[MAXCOLDIGITS]; char tempbuf[MAXCOLDIGITS]; char po2buf[MAXCOLDIGITS]; char cnsbuf[MAXCOLDIGITS]; + char ndlbuf[MAXCOLDIGITS]; char stopdepthbuf[MAXCOLDIGITS]; char unitbuf[MAXCOLDIGITS]; char separator_index[MAXCOLDIGITS]; @@ -402,7 +403,7 @@ int parse_csv_file(const char *filename, int timef, int depthf, int tempf, int p char curdate[9]; char curtime[6]; - if (timef >= MAXCOLS || depthf >= MAXCOLS || tempf >= MAXCOLS || po2f >= MAXCOLS || cnsf >= MAXCOLS || stopdepthf >= MAXCOLS) + if (timef >= MAXCOLS || depthf >= MAXCOLS || tempf >= MAXCOLS || po2f >= MAXCOLS || cnsf >= MAXCOLS || ndlf >= MAXCOLS || cnsf >= MAXCOLS || stopdepthf >= MAXCOLS) return report_error(translate("gettextFromC", "Maximum number of supported columns on CSV import is %d"), MAXCOLS); snprintf(timebuf, MAXCOLDIGITS, "%d", timef); @@ -410,6 +411,7 @@ int parse_csv_file(const char *filename, int timef, int depthf, int tempf, int p snprintf(tempbuf, MAXCOLDIGITS, "%d", tempf); snprintf(po2buf, MAXCOLDIGITS, "%d", po2f); snprintf(cnsbuf, MAXCOLDIGITS, "%d", cnsf); + snprintf(ndlbuf, MAXCOLDIGITS, "%d", ndlf); snprintf(stopdepthbuf, MAXCOLDIGITS, "%d", stopdepthf); snprintf(separator_index, MAXCOLDIGITS, "%d", sepidx); snprintf(unitbuf, MAXCOLDIGITS, "%d", unitidx); @@ -431,6 +433,8 @@ int parse_csv_file(const char *filename, int timef, int depthf, int tempf, int p params[pnr++] = po2buf; params[pnr++] = "cnsField"; params[pnr++] = cnsbuf; + params[pnr++] = "ndlField"; + params[pnr++] = ndlbuf; params[pnr++] = "stopdepthField"; params[pnr++] = stopdepthbuf; params[pnr++] = "date"; diff --git a/qt-ui/divelogimportdialog.cpp b/qt-ui/divelogimportdialog.cpp index 3eb17ef7e..8e53a998c 100644 --- a/qt-ui/divelogimportdialog.cpp +++ b/qt-ui/divelogimportdialog.cpp @@ -6,12 +6,12 @@ #include "ui_divelogimportdialog.h" const DiveLogImportDialog::CSVAppConfig DiveLogImportDialog::CSVApps[CSVAPPS] = { - // time, depth, temperature, po2, cns, stopdepth + // time, depth, temperature, po2, cns, ndl, stopdepth { "", }, - { "APD Log Viewer", 1, 2, 16, 7, 18, 19, "Tab" }, - { "XP5", 1, 2, 10, -1, -1, -1, "Tab" }, - { "SensusCSV", 10, 11, -1, -1, -1, -1, "," }, - { "Seabear CSV", 1, 2, 6, -1, -1, 5, ";" }, + { "APD Log Viewer", 1, 2, 16, 7, 18, -1, 19, "Tab" }, + { "XP5", 1, 2, 10, -1, -1, -1, -1, "Tab" }, + { "SensusCSV", 10, 11, -1, -1, -1, -1, -1, "," }, + { "Seabear CSV", 1, 2, 6, -1, -1, -1, 5, ";" }, { NULL, } }; @@ -45,6 +45,8 @@ DiveLogImportDialog::DiveLogImportDialog(QStringList *fn, QWidget *parent) : QDi connect(ui->po2CheckBox, SIGNAL(clicked(bool)), this, SLOT(unknownImports())); connect(ui->CSVcns, SIGNAL(valueChanged(int)), this, SLOT(unknownImports())); connect(ui->cnsCheckBox, SIGNAL(clicked(bool)), this, SLOT(unknownImports())); + connect(ui->CSVndl, SIGNAL(valueChanged(int)), this, SLOT(unknownImports())); + connect(ui->ndlCheckBox, SIGNAL(clicked(bool)), this, SLOT(unknownImports())); connect(ui->CSVstopdepth, SIGNAL(valueChanged(int)), this, SLOT(unknownImports())); connect(ui->stopdepthCheckBox, SIGNAL(clicked(bool)), this, SLOT(unknownImports())); QShortcut *close = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), this); @@ -67,6 +69,7 @@ void DiveLogImportDialog::on_buttonBox_accepted() ui->CSVDepth->value() - 1, VALUE_IF_CHECKED(CSVTemperature), VALUE_IF_CHECKED(CSVpo2), VALUE_IF_CHECKED(CSVcns), + VALUE_IF_CHECKED(CSVndl), VALUE_IF_CHECKED(CSVstopdepth), ui->CSVSeparator->currentIndex(), specialCSV.contains(ui->knownImports->currentIndex()) ? CSVApps[ui->knownImports->currentIndex()].name.toUtf8().data() : "csv", @@ -116,6 +119,7 @@ void DiveLogImportDialog::on_knownImports_currentIndexChanged(int index) SET_VALUE_AND_CHECKBOX(CSVTemperature, temperatureCheckBox, CSVApps[index].temperature); SET_VALUE_AND_CHECKBOX(CSVpo2, po2CheckBox, CSVApps[index].po2); SET_VALUE_AND_CHECKBOX(CSVcns, cnsCheckBox, CSVApps[index].cns); + SET_VALUE_AND_CHECKBOX(CSVndl, ndlCheckBox, CSVApps[index].ndl); SET_VALUE_AND_CHECKBOX(CSVstopdepth, stopdepthCheckBox, CSVApps[index].stopdepth); ui->CSVSeparator->blockSignals(true); int separator_index = ui->CSVSeparator->findText(CSVApps[index].separator); diff --git a/qt-ui/divelogimportdialog.h b/qt-ui/divelogimportdialog.h index f9df691db..ff81fe6da 100644 --- a/qt-ui/divelogimportdialog.h +++ b/qt-ui/divelogimportdialog.h @@ -36,6 +36,7 @@ private: int temperature; int po2; int cns; + int ndl; int stopdepth; QString separator; }; diff --git a/qt-ui/divelogimportdialog.ui b/qt-ui/divelogimportdialog.ui index d6d07ce7f..0fbb96b99 100644 --- a/qt-ui/divelogimportdialog.ui +++ b/qt-ui/divelogimportdialog.ui @@ -7,7 +7,7 @@ 0 0 522 - 352 + 385 @@ -75,7 +75,7 @@ - + false @@ -88,7 +88,7 @@ - + Stopdepth @@ -139,6 +139,26 @@ + + + + NDL + + + + + + + false + + + 1 + + + 1 + + + @@ -147,6 +167,8 @@ + ndlCheckBox + CSVndl label label_2 CSVTime diff --git a/xslt/csv2xml.xslt b/xslt/csv2xml.xslt index 5ae689a0b..034eb9319 100644 --- a/xslt/csv2xml.xslt +++ b/xslt/csv2xml.xslt @@ -8,6 +8,7 @@ + @@ -177,6 +178,15 @@ + + + + + + + + +