[PATCH 6/7] Add optional support for cns import from csv files

Anton Lundin glance at acc.umu.se
Thu Nov 21 14:48:41 UTC 2013


Signed-off-by: Anton Lundin <glance at acc.umu.se>
---
 dive.h                    |  2 +-
 file.c                    | 10 +++++++---
 qt-ui/csvimportdialog.cpp |  8 ++++++--
 qt-ui/csvimportdialog.h   |  1 +
 qt-ui/csvimportdialog.ui  | 25 +++++++++++++++++++++++++
 xslt/csv2xml.xslt         | 12 ++++++++++++
 6 files changed, 52 insertions(+), 6 deletions(-)

diff --git a/dive.h b/dive.h
index 924bab7..d6490fd 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 e985dbb..47bc1d5 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 8a213e0..281aa66 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 b768827..ec2f023 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 fe70a07..3b11670 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 6a72ffa..382bb2b 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>
-- 
1.8.3.2



More information about the subsurface mailing list