aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Anton Lundin <glance@acc.umu.se>2013-11-21 23:48:41 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-11-21 15:54:21 -0800
commit5eccd73a306298616da122ba4e653d4c8f391df8 (patch)
tree61e85992f9863bdd2f4913dd8c840c99cd88c5a9
parent8dde12fa35e0e53f93efef8a99a7fe2e625e901c (diff)
downloadsubsurface-5eccd73a306298616da122ba4e653d4c8f391df8.tar.gz
Add optional support for cns import from csv files
Signed-off-by: Anton Lundin <glance@acc.umu.se> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--dive.h2
-rw-r--r--file.c10
-rw-r--r--qt-ui/csvimportdialog.cpp8
-rw-r--r--qt-ui/csvimportdialog.h1
-rw-r--r--qt-ui/csvimportdialog.ui25
-rw-r--r--xslt/csv2xml.xslt12
6 files changed, 52 insertions, 6 deletions
diff --git a/dive.h b/dive.h
index 924bab7f3..d6490fdf7 100644
--- a/dive.h
+++ b/dive.h
@@ -626,7 +626,7 @@ extern void set_filename(const char *filename, bool force);
extern int parse_dm4_buffer(const char *url, const char *buf, int size, struct dive_table *table, char **error);
extern void parse_file(const char *filename, char **error);
-extern void parse_csv_file(const char *filename, int time, int depth, int temp, int po2f, char **error);
+extern void parse_csv_file(const char *filename, int time, int depth, int temp, int po2f, int cnsf, char **error);
extern void save_dives(const char *filename);
extern void save_dives_logic(const char *filename, bool select_only);
diff --git a/file.c b/file.c
index e985dbb83..47bc1d5b3 100644
--- a/file.c
+++ b/file.c
@@ -327,21 +327,22 @@ void parse_file(const char *filename, char **error)
#define MAXCOLDIGITS 3
#define MAXCOLS 100
-void parse_csv_file(const char *filename, int timef, int depthf, int tempf, int po2f, char **error)
+void parse_csv_file(const char *filename, int timef, int depthf, int tempf, int po2f, int cnsf, char **error)
{
struct memblock mem;
int pnr=0;
- char *params[13];
+ char *params[15];
char timebuf[MAXCOLDIGITS];
char depthbuf[MAXCOLDIGITS];
char tempbuf[MAXCOLDIGITS];
char po2buf[MAXCOLDIGITS];
+ char cnsbuf[MAXCOLDIGITS];
time_t now;
struct tm *timep;
char curdate[9];
char curtime[6];
- if (timef >= MAXCOLS || depthf >= MAXCOLS || tempf >= MAXCOLS || po2f >= MAXCOLS) {
+ if (timef >= MAXCOLS || depthf >= MAXCOLS || tempf >= MAXCOLS || po2f >= MAXCOLS || cnsf >= MAXCOLS) {
int len = strlen(translate("gettextFromC", "Maximum number of supported columns on CSV import is %d")) + MAXCOLDIGITS;
*error = malloc(len);
snprintf(*error, len, translate("gettextFromC", "Maximum number of supported columns on CSV import is %d"), MAXCOLS);
@@ -352,6 +353,7 @@ void parse_csv_file(const char *filename, int timef, int depthf, int tempf, int
snprintf(depthbuf, MAXCOLDIGITS, "%d", depthf);
snprintf(tempbuf, MAXCOLDIGITS, "%d", tempf);
snprintf(po2buf, MAXCOLDIGITS, "%d", po2f);
+ snprintf(cnsbuf, MAXCOLDIGITS, "%d", cnsf);
time(&now);
timep = localtime(&now);
strftime(curdate, sizeof(curdate), "%Y%m%d", timep);
@@ -368,6 +370,8 @@ void parse_csv_file(const char *filename, int timef, int depthf, int tempf, int
params[pnr++] = tempbuf;
params[pnr++] = "po2Field";
params[pnr++] = po2buf;
+ params[pnr++] = "cnsField";
+ params[pnr++] = cnsbuf;
params[pnr++] = "date";
params[pnr++] = curdate;
params[pnr++] = "time";
diff --git a/qt-ui/csvimportdialog.cpp b/qt-ui/csvimportdialog.cpp
index 8a213e055..281aa66f6 100644
--- a/qt-ui/csvimportdialog.cpp
+++ b/qt-ui/csvimportdialog.cpp
@@ -6,8 +6,8 @@
const CSVImportDialog::CSVAppConfig CSVImportDialog::CSVApps[CSVAPPS] = {
{"", },
- {"APD Log Viewer", 0, 1, 15, 6, "Tab"},
- {"XP5", 0, 1, 9, -1, "Tab"},
+ {"APD Log Viewer", 0, 1, 15, 6, 17, "Tab"},
+ {"XP5", 0, 1, 9, -1, -1, "Tab"},
{NULL,}
};
@@ -31,6 +31,8 @@ CSVImportDialog::CSVImportDialog(QWidget *parent) :
connect(ui->temperatureCheckBox, SIGNAL(clicked(bool)), this, SLOT(unknownImports(bool)));
connect(ui->CSVpo2, SIGNAL(valueChanged(int)), this, SLOT(unknownImports(int)));
connect(ui->po2CheckBox, SIGNAL(clicked(bool)), this, SLOT(unknownImports(bool)));
+ connect(ui->CSVcns, SIGNAL(valueChanged(int)), this, SLOT(unknownImports(int)));
+ connect(ui->cnsCheckBox, SIGNAL(clicked(bool)), this, SLOT(unknownImports(bool)));
}
CSVImportDialog::~CSVImportDialog()
@@ -46,6 +48,7 @@ void CSVImportDialog::on_buttonBox_accepted()
parse_csv_file(ui->CSVFile->text().toUtf8().data(), ui->CSVTime->value(),
ui->CSVDepth->value(), VALUE_IF_CHECKED(CSVTemperature),
VALUE_IF_CHECKED(CSVpo2),
+ VALUE_IF_CHECKED(CSVcns),
&error);
if (error != NULL) {
@@ -88,6 +91,7 @@ void CSVImportDialog::on_knownImports_currentIndexChanged(int index)
ui->CSVDepth->blockSignals(false);
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);
}
void CSVImportDialog::unknownImports(bool arg1)
diff --git a/qt-ui/csvimportdialog.h b/qt-ui/csvimportdialog.h
index b76882744..ec2f02347 100644
--- a/qt-ui/csvimportdialog.h
+++ b/qt-ui/csvimportdialog.h
@@ -38,6 +38,7 @@ private:
int depth;
int temperature;
int po2;
+ int cns;
QString separator;
};
diff --git a/qt-ui/csvimportdialog.ui b/qt-ui/csvimportdialog.ui
index fe70a075c..3b1167066 100644
--- a/qt-ui/csvimportdialog.ui
+++ b/qt-ui/csvimportdialog.ui
@@ -166,6 +166,23 @@
</property>
</widget>
</item>
+ <item row="4" column="1">
+ <widget class="QSpinBox" name="CSVcns">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="value">
+ <number>0</number>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0">
+ <widget class="QCheckBox" name="cnsCheckBox">
+ <property name="text">
+ <string>Cns</string>
+ </property>
+ </widget>
+ </item>
</layout>
<zorder>label</zorder>
<zorder>label_2</zorder>
@@ -175,6 +192,8 @@
<zorder>CSVTemperature</zorder>
<zorder>po2CheckBox</zorder>
<zorder>CSVpo2</zorder>
+ <zorder>cnsCheckBox</zorder>
+ <zorder>CSVcns</zorder>
</widget>
<widget class="QGroupBox" name="groupBox_4">
<property name="geometry">
@@ -249,5 +268,11 @@
<receiver>CSVpo2</receiver>
<slot>setEnabled(bool)</slot>
</connection>
+ <connection>
+ <sender>cnsCheckBox</sender>
+ <signal>clicked(bool)</signal>
+ <receiver>CSVcns</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
</connections>
</ui>
diff --git a/xslt/csv2xml.xslt b/xslt/csv2xml.xslt
index 6a72ffa17..382bb2be6 100644
--- a/xslt/csv2xml.xslt
+++ b/xslt/csv2xml.xslt
@@ -6,6 +6,7 @@
<xsl:param name="depthField" select="depthField"/>
<xsl:param name="tempField" select="tempField"/>
<xsl:param name="po2Field" select="po2Field"/>
+ <xsl:param name="cnsField" select="cnsField"/>
<xsl:param name="date" select="date"/>
<xsl:param name="time" select="time"/>
<xsl:output method="xml" indent="yes"/>
@@ -117,6 +118,17 @@
</xsl:when>
</xsl:choose>
</xsl:attribute>
+
+ <xsl:attribute name="cns">
+ <xsl:choose>
+ <xsl:when test="$cnsField >= 0">
+ <xsl:call-template name="getFieldByIndex">
+ <xsl:with-param name="index" select="$cnsField"/>
+ <xsl:with-param name="line" select="$line"/>
+ </xsl:call-template>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:attribute>
</sample>
</xsl:if>
</xsl:template>