mirror of
https://github.com/subsurface/subsurface.git
synced 2025-01-31 20:53:23 +00:00
Add optional support for po2 import from csv files
Signed-off-by: Anton Lundin <glance@acc.umu.se> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
907a22f37e
commit
8dde12fa35
6 changed files with 55 additions and 7 deletions
2
dive.h
2
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, char **error);
|
||||
extern void parse_csv_file(const char *filename, int time, int depth, int temp, int po2f, char **error);
|
||||
|
||||
extern void save_dives(const char *filename);
|
||||
extern void save_dives_logic(const char *filename, bool select_only);
|
||||
|
|
10
file.c
10
file.c
|
@ -327,20 +327,21 @@ 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, char **error)
|
||||
void parse_csv_file(const char *filename, int timef, int depthf, int tempf, int po2f, char **error)
|
||||
{
|
||||
struct memblock mem;
|
||||
int pnr=0;
|
||||
char *params[11];
|
||||
char *params[13];
|
||||
char timebuf[MAXCOLDIGITS];
|
||||
char depthbuf[MAXCOLDIGITS];
|
||||
char tempbuf[MAXCOLDIGITS];
|
||||
char po2buf[MAXCOLDIGITS];
|
||||
time_t now;
|
||||
struct tm *timep;
|
||||
char curdate[9];
|
||||
char curtime[6];
|
||||
|
||||
if (timef >= MAXCOLS || depthf >= MAXCOLS || tempf >= MAXCOLS) {
|
||||
if (timef >= MAXCOLS || depthf >= MAXCOLS || tempf >= MAXCOLS || po2f >= 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);
|
||||
|
@ -350,6 +351,7 @@ void parse_csv_file(const char *filename, int timef, int depthf, int tempf, char
|
|||
snprintf(timebuf, MAXCOLDIGITS, "%d", timef);
|
||||
snprintf(depthbuf, MAXCOLDIGITS, "%d", depthf);
|
||||
snprintf(tempbuf, MAXCOLDIGITS, "%d", tempf);
|
||||
snprintf(po2buf, MAXCOLDIGITS, "%d", po2f);
|
||||
time(&now);
|
||||
timep = localtime(&now);
|
||||
strftime(curdate, sizeof(curdate), "%Y%m%d", timep);
|
||||
|
@ -364,6 +366,8 @@ void parse_csv_file(const char *filename, int timef, int depthf, int tempf, char
|
|||
params[pnr++] = depthbuf;
|
||||
params[pnr++] = "tempField";
|
||||
params[pnr++] = tempbuf;
|
||||
params[pnr++] = "po2Field";
|
||||
params[pnr++] = po2buf;
|
||||
params[pnr++] = "date";
|
||||
params[pnr++] = curdate;
|
||||
params[pnr++] = "time";
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
|
||||
const CSVImportDialog::CSVAppConfig CSVImportDialog::CSVApps[CSVAPPS] = {
|
||||
{"", },
|
||||
{"APD Log Viewer", 0, 1, 15, "Tab"},
|
||||
{"XP5", 0, 1, 9, "Tab"},
|
||||
{"APD Log Viewer", 0, 1, 15, 6, "Tab"},
|
||||
{"XP5", 0, 1, 9, -1, "Tab"},
|
||||
{NULL,}
|
||||
};
|
||||
|
||||
|
@ -29,6 +29,8 @@ CSVImportDialog::CSVImportDialog(QWidget *parent) :
|
|||
connect(ui->CSVTime, SIGNAL(valueChanged(int)), this, SLOT(unknownImports(int)));
|
||||
connect(ui->CSVTemperature, SIGNAL(valueChanged(int)), this, SLOT(unknownImports(int)));
|
||||
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)));
|
||||
}
|
||||
|
||||
CSVImportDialog::~CSVImportDialog()
|
||||
|
@ -41,7 +43,10 @@ void CSVImportDialog::on_buttonBox_accepted()
|
|||
{
|
||||
char *error = NULL;
|
||||
|
||||
parse_csv_file(ui->CSVFile->text().toUtf8().data(), ui->CSVTime->value(), ui->CSVDepth->value(), VALUE_IF_CHECKED(CSVTemperature), &error);
|
||||
parse_csv_file(ui->CSVFile->text().toUtf8().data(), ui->CSVTime->value(),
|
||||
ui->CSVDepth->value(), VALUE_IF_CHECKED(CSVTemperature),
|
||||
VALUE_IF_CHECKED(CSVpo2),
|
||||
&error);
|
||||
if (error != NULL) {
|
||||
|
||||
mainWindow()->showError(error);
|
||||
|
@ -82,6 +87,7 @@ void CSVImportDialog::on_knownImports_currentIndexChanged(int index)
|
|||
ui->CSVTime->blockSignals(false);
|
||||
ui->CSVDepth->blockSignals(false);
|
||||
SET_VALUE_AND_CHECKBOX(CSVTemperature, temperatureCheckBox, CSVApps[index].temperature);
|
||||
SET_VALUE_AND_CHECKBOX(CSVpo2, po2CheckBox, CSVApps[index].po2);
|
||||
}
|
||||
|
||||
void CSVImportDialog::unknownImports(bool arg1)
|
||||
|
|
|
@ -37,6 +37,7 @@ private:
|
|||
int time;
|
||||
int depth;
|
||||
int temperature;
|
||||
int po2;
|
||||
QString separator;
|
||||
};
|
||||
|
||||
|
|
|
@ -149,6 +149,23 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QSpinBox" name="CSVpo2">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QCheckBox" name="po2CheckBox">
|
||||
<property name="text">
|
||||
<string>Po2</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
<zorder>label</zorder>
|
||||
<zorder>label_2</zorder>
|
||||
|
@ -156,6 +173,8 @@
|
|||
<zorder>CSVDepth</zorder>
|
||||
<zorder>temperatureCheckBox</zorder>
|
||||
<zorder>CSVTemperature</zorder>
|
||||
<zorder>po2CheckBox</zorder>
|
||||
<zorder>CSVpo2</zorder>
|
||||
</widget>
|
||||
<widget class="QGroupBox" name="groupBox_4">
|
||||
<property name="geometry">
|
||||
|
@ -224,5 +243,11 @@
|
|||
<receiver>CSVTemperature</receiver>
|
||||
<slot>setEnabled(bool)</slot>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>po2CheckBox</sender>
|
||||
<signal>clicked(bool)</signal>
|
||||
<receiver>CSVpo2</receiver>
|
||||
<slot>setEnabled(bool)</slot>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
<xsl:param name="timeField" select="timeField"/>
|
||||
<xsl:param name="depthField" select="depthField"/>
|
||||
<xsl:param name="tempField" select="tempField"/>
|
||||
<xsl:param name="po2Field" select="po2Field"/>
|
||||
<xsl:param name="date" select="date"/>
|
||||
<xsl:param name="time" select="time"/>
|
||||
<xsl:output method="xml" indent="yes"/>
|
||||
|
@ -105,6 +106,17 @@
|
|||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:attribute>
|
||||
|
||||
<xsl:attribute name="po2">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$po2Field >= 0">
|
||||
<xsl:call-template name="getFieldByIndex">
|
||||
<xsl:with-param name="index" select="$po2Field"/>
|
||||
<xsl:with-param name="line" select="$line"/>
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:attribute>
|
||||
</sample>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
|
Loading…
Add table
Reference in a new issue