| 
									
										
										
										
											2013-10-16 22:05:19 +03:00
										 |  |  | #include <QtDebug>
 | 
					
						
							|  |  |  | #include <QFileDialog>
 | 
					
						
							| 
									
										
										
										
											2014-04-25 10:44:23 -07:00
										 |  |  | #include <QShortcut>
 | 
					
						
							| 
									
										
										
										
											2013-12-29 18:11:20 +02:00
										 |  |  | #include "divelogimportdialog.h"
 | 
					
						
							| 
									
										
										
										
											2013-10-16 22:05:19 +03:00
										 |  |  | #include "mainwindow.h"
 | 
					
						
							| 
									
										
										
										
											2013-12-29 18:11:20 +02:00
										 |  |  | #include "ui_divelogimportdialog.h"
 | 
					
						
							| 
									
										
										
										
											2013-10-16 22:05:19 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-29 18:11:20 +02:00
										 |  |  | const DiveLogImportDialog::CSVAppConfig DiveLogImportDialog::CSVApps[CSVAPPS] = { | 
					
						
							| 
									
										
										
										
											2014-07-10 20:54:18 +02:00
										 |  |  | 	// time, depth, temperature, po2, cns, ndl, tts, stopdepth, pressure
 | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 	{ "", }, | 
					
						
							| 
									
										
										
										
											2014-07-10 20:54:18 +02:00
										 |  |  | 	{ "APD Log Viewer", 1, 2, 16, 7, 18, -1, -1, 19, -1, "Tab" }, | 
					
						
							|  |  |  | 	{ "XP5", 1, 2, 10, -1, -1, -1, -1, -1, -1, "Tab" }, | 
					
						
							|  |  |  | 	{ "SensusCSV", 10, 11, -1, -1, -1, -1, -1, -1, -1, "," }, | 
					
						
							|  |  |  | 	{ "Seabear CSV", 1, 2, 6, -1, -1, 3, 4, 5, 7, ";" }, | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 	{ NULL, } | 
					
						
							| 
									
										
										
										
											2013-10-16 22:05:19 +03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | DiveLogImportDialog::DiveLogImportDialog(QStringList *fn, QWidget *parent) : QDialog(parent), | 
					
						
							| 
									
										
										
										
											2013-10-16 22:05:19 +03:00
										 |  |  | 	selector(true), | 
					
						
							| 
									
										
										
										
											2013-12-29 18:11:20 +02:00
										 |  |  | 	ui(new Ui::DiveLogImportDialog) | 
					
						
							| 
									
										
										
										
											2013-10-16 22:05:19 +03:00
										 |  |  | { | 
					
						
							|  |  |  | 	ui->setupUi(this); | 
					
						
							| 
									
										
										
										
											2014-01-07 22:01:28 +02:00
										 |  |  | 	fileNames = *fn; | 
					
						
							| 
									
										
										
										
											2013-10-16 22:05:19 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 22:50:16 +02:00
										 |  |  | 	/* Add indexes of XSLTs requiring special handling to the list */ | 
					
						
							|  |  |  | 	specialCSV << 3; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-16 22:05:19 +03:00
										 |  |  | 	for (int i = 0; !CSVApps[i].name.isNull(); ++i) | 
					
						
							|  |  |  | 		ui->knownImports->addItem(CSVApps[i].name); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	ui->CSVSeparator->addItem("Tab"); | 
					
						
							| 
									
										
										
										
											2013-12-04 15:19:28 -08:00
										 |  |  | 	ui->CSVSeparator->addItem(","); | 
					
						
							| 
									
										
										
										
											2014-01-13 22:11:14 -02:00
										 |  |  | 	ui->CSVSeparator->addItem(";"); | 
					
						
							| 
									
										
										
										
											2013-10-16 22:05:19 +03:00
										 |  |  | 	ui->knownImports->setCurrentIndex(1); | 
					
						
							| 
									
										
										
										
											2014-01-25 09:49:22 +02:00
										 |  |  | 	ui->ManualSeparator->addItem("Tab"); | 
					
						
							|  |  |  | 	ui->ManualSeparator->addItem(","); | 
					
						
							|  |  |  | 	ui->ManualSeparator->addItem(";"); | 
					
						
							|  |  |  | 	ui->knownImports->setCurrentIndex(1); | 
					
						
							| 
									
										
										
										
											2013-11-21 23:48:36 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-14 15:58:20 -02:00
										 |  |  | 	connect(ui->CSVDepth, SIGNAL(valueChanged(int)), this, SLOT(unknownImports())); | 
					
						
							|  |  |  | 	connect(ui->CSVTime, SIGNAL(valueChanged(int)), this, SLOT(unknownImports())); | 
					
						
							|  |  |  | 	connect(ui->CSVTemperature, SIGNAL(valueChanged(int)), this, SLOT(unknownImports())); | 
					
						
							|  |  |  | 	connect(ui->temperatureCheckBox, SIGNAL(clicked(bool)), this, SLOT(unknownImports())); | 
					
						
							|  |  |  | 	connect(ui->CSVpo2, SIGNAL(valueChanged(int)), this, SLOT(unknownImports())); | 
					
						
							|  |  |  | 	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())); | 
					
						
							| 
									
										
										
										
											2014-07-09 22:13:37 +02:00
										 |  |  | 	connect(ui->CSVndl, SIGNAL(valueChanged(int)), this, SLOT(unknownImports())); | 
					
						
							|  |  |  | 	connect(ui->ndlCheckBox, SIGNAL(clicked(bool)), this, SLOT(unknownImports())); | 
					
						
							| 
									
										
										
										
											2014-07-09 22:13:38 +02:00
										 |  |  | 	connect(ui->CSVtts, SIGNAL(valueChanged(int)), this, SLOT(unknownImports())); | 
					
						
							|  |  |  | 	connect(ui->ttsCheckBox, SIGNAL(clicked(bool)), this, SLOT(unknownImports())); | 
					
						
							| 
									
										
										
										
											2014-01-14 15:58:20 -02:00
										 |  |  | 	connect(ui->CSVstopdepth, SIGNAL(valueChanged(int)), this, SLOT(unknownImports())); | 
					
						
							|  |  |  | 	connect(ui->stopdepthCheckBox, SIGNAL(clicked(bool)), this, SLOT(unknownImports())); | 
					
						
							| 
									
										
										
										
											2014-07-10 20:54:18 +02:00
										 |  |  | 	connect(ui->CSVpressure, SIGNAL(valueChanged(int)), this, SLOT(unknownImports())); | 
					
						
							|  |  |  | 	connect(ui->pressureCheckBox, SIGNAL(clicked(bool)), this, SLOT(unknownImports())); | 
					
						
							| 
									
										
										
										
											2014-04-25 10:44:23 -07:00
										 |  |  | 	QShortcut *close = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), this); | 
					
						
							|  |  |  | 	connect(close, SIGNAL(activated()), this, SLOT(close())); | 
					
						
							|  |  |  | 	QShortcut *quit = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this); | 
					
						
							|  |  |  | 	connect(quit, SIGNAL(activated()), parent, SLOT(close())); | 
					
						
							| 
									
										
										
										
											2013-10-16 22:05:19 +03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-29 18:11:20 +02:00
										 |  |  | DiveLogImportDialog::~DiveLogImportDialog() | 
					
						
							| 
									
										
										
										
											2013-10-16 22:05:19 +03:00
										 |  |  | { | 
					
						
							|  |  |  | 	delete ui; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | #define VALUE_IF_CHECKED(x) (ui->x->isEnabled() ? ui->x->value() - 1 : -1)
 | 
					
						
							| 
									
										
										
										
											2013-12-29 18:11:20 +02:00
										 |  |  | void DiveLogImportDialog::on_buttonBox_accepted() | 
					
						
							| 
									
										
										
										
											2013-10-16 22:05:19 +03:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2014-01-25 09:49:22 +02:00
										 |  |  | 	if (ui->tabWidget->currentIndex() == 0) { | 
					
						
							|  |  |  | 		for (int i = 0; i < fileNames.size(); ++i) { | 
					
						
							| 
									
										
										
										
											2014-10-28 11:14:00 +02:00
										 |  |  | 			if (ui->knownImports->currentText() == QString("Seabear CSV")) { | 
					
						
							|  |  |  | 				parse_seabear_csv_file(fileNames[i].toUtf8().data(), ui->CSVTime->value() - 1, | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 				       ui->CSVDepth->value() - 1, VALUE_IF_CHECKED(CSVTemperature), | 
					
						
							|  |  |  | 				       VALUE_IF_CHECKED(CSVpo2), | 
					
						
							|  |  |  | 				       VALUE_IF_CHECKED(CSVcns), | 
					
						
							| 
									
										
										
										
											2014-07-09 22:13:37 +02:00
										 |  |  | 				       VALUE_IF_CHECKED(CSVndl), | 
					
						
							| 
									
										
										
										
											2014-07-09 22:13:38 +02:00
										 |  |  | 				       VALUE_IF_CHECKED(CSVtts), | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 				       VALUE_IF_CHECKED(CSVstopdepth), | 
					
						
							| 
									
										
										
										
											2014-07-10 20:54:18 +02:00
										 |  |  | 				       VALUE_IF_CHECKED(CSVpressure), | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 				       ui->CSVSeparator->currentIndex(), | 
					
						
							|  |  |  | 				       specialCSV.contains(ui->knownImports->currentIndex()) ? CSVApps[ui->knownImports->currentIndex()].name.toUtf8().data() : "csv", | 
					
						
							| 
									
										
										
										
											2014-03-14 11:26:07 -07:00
										 |  |  | 				       ui->CSVUnits->currentIndex()); | 
					
						
							| 
									
										
										
										
											2014-10-28 11:14:00 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				/* Seabear CSV stores NDL and TTS in Minutes, not seconds */ | 
					
						
							|  |  |  | 				struct dive *dive = dive_table.dives[dive_table.nr - 1]; | 
					
						
							|  |  |  | 				for(int s_nr = 0 ; s_nr <= dive->dc.samples ; s_nr++) { | 
					
						
							|  |  |  | 					struct sample *sample = dive->dc.sample + s_nr; | 
					
						
							|  |  |  | 					sample->ndl.seconds *= 60; | 
					
						
							|  |  |  | 					sample->tts.seconds *= 60; | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} else | 
					
						
							|  |  |  | 				parse_csv_file(fileNames[i].toUtf8().data(), ui->CSVTime->value() - 1, | 
					
						
							|  |  |  | 						ui->CSVDepth->value() - 1, VALUE_IF_CHECKED(CSVTemperature), | 
					
						
							|  |  |  | 						VALUE_IF_CHECKED(CSVpo2), | 
					
						
							|  |  |  | 						VALUE_IF_CHECKED(CSVcns), | 
					
						
							|  |  |  | 						VALUE_IF_CHECKED(CSVndl), | 
					
						
							|  |  |  | 						VALUE_IF_CHECKED(CSVtts), | 
					
						
							|  |  |  | 						VALUE_IF_CHECKED(CSVstopdepth), | 
					
						
							|  |  |  | 						VALUE_IF_CHECKED(CSVpressure), | 
					
						
							|  |  |  | 						ui->CSVSeparator->currentIndex(), | 
					
						
							|  |  |  | 						specialCSV.contains(ui->knownImports->currentIndex()) ? CSVApps[ui->knownImports->currentIndex()].name.toUtf8().data() : "csv", | 
					
						
							|  |  |  | 						ui->CSVUnits->currentIndex()); | 
					
						
							| 
									
										
										
										
											2014-01-25 09:49:22 +02:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		for (int i = 0; i < fileNames.size(); ++i) { | 
					
						
							|  |  |  | 			parse_manual_file(fileNames[i].toUtf8().data(), | 
					
						
							| 
									
										
										
										
											2014-02-27 20:09:57 -08:00
										 |  |  | 					  ui->ManualSeparator->currentIndex(), | 
					
						
							|  |  |  | 					  ui->Units->currentIndex(), | 
					
						
							|  |  |  | 					  VALUE_IF_CHECKED(DiveNumber), | 
					
						
							|  |  |  | 					  VALUE_IF_CHECKED(Date), VALUE_IF_CHECKED(Time), | 
					
						
							|  |  |  | 					  VALUE_IF_CHECKED(Duration), VALUE_IF_CHECKED(Location), | 
					
						
							|  |  |  | 					  VALUE_IF_CHECKED(Gps), VALUE_IF_CHECKED(MaxDepth), | 
					
						
							|  |  |  | 					  VALUE_IF_CHECKED(MeanDepth), VALUE_IF_CHECKED(Buddy), | 
					
						
							|  |  |  | 					  VALUE_IF_CHECKED(Notes), VALUE_IF_CHECKED(Weight), | 
					
						
							| 
									
										
										
										
											2014-03-14 11:26:07 -07:00
										 |  |  | 					  VALUE_IF_CHECKED(Tags)); | 
					
						
							| 
									
										
										
										
											2013-12-29 18:11:19 +02:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-10-16 22:05:19 +03:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-07-09 22:13:39 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-15 09:30:42 +01:00
										 |  |  | 	process_dives(true, false); | 
					
						
							| 
									
										
										
										
											2013-10-16 22:05:19 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-12 15:22:54 +01:00
										 |  |  | 	MainWindow::instance()->refreshDisplay(); | 
					
						
							| 
									
										
										
										
											2013-10-16 22:05:19 +03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-21 23:48:37 +01:00
										 |  |  | #define SET_VALUE_AND_CHECKBOX(CSV, BOX, VAL) ({\
 | 
					
						
							|  |  |  | 		ui->CSV->blockSignals(true);\ | 
					
						
							|  |  |  | 		ui->CSV->setValue(VAL);\ | 
					
						
							|  |  |  | 		ui->CSV->setEnabled(VAL >= 0);\ | 
					
						
							|  |  |  | 		ui->BOX->setChecked(VAL >= 0);\ | 
					
						
							| 
									
										
										
										
											2014-03-03 13:25:55 -08:00
										 |  |  | 		ui->CSV->blockSignals(false); }) | 
					
						
							| 
									
										
										
										
											2013-12-29 18:11:20 +02:00
										 |  |  | void DiveLogImportDialog::on_knownImports_currentIndexChanged(int index) | 
					
						
							| 
									
										
										
										
											2013-10-16 22:05:19 +03:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2014-01-16 22:50:16 +02:00
										 |  |  | 	if (specialCSV.contains(index)) { | 
					
						
							|  |  |  | 		ui->groupBox_3->setEnabled(false); | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		ui->groupBox_3->setEnabled(true); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-10-16 22:05:19 +03:00
										 |  |  | 	if (index == 0) | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	ui->CSVTime->blockSignals(true); | 
					
						
							|  |  |  | 	ui->CSVDepth->blockSignals(true); | 
					
						
							|  |  |  | 	ui->CSVTime->setValue(CSVApps[index].time); | 
					
						
							|  |  |  | 	ui->CSVDepth->setValue(CSVApps[index].depth); | 
					
						
							|  |  |  | 	ui->CSVTime->blockSignals(false); | 
					
						
							|  |  |  | 	ui->CSVDepth->blockSignals(false); | 
					
						
							| 
									
										
										
										
											2013-11-21 23:48:37 +01:00
										 |  |  | 	SET_VALUE_AND_CHECKBOX(CSVTemperature, temperatureCheckBox, CSVApps[index].temperature); | 
					
						
							| 
									
										
										
										
											2013-11-21 23:48:40 +01:00
										 |  |  | 	SET_VALUE_AND_CHECKBOX(CSVpo2, po2CheckBox, CSVApps[index].po2); | 
					
						
							| 
									
										
										
										
											2013-11-21 23:48:41 +01:00
										 |  |  | 	SET_VALUE_AND_CHECKBOX(CSVcns, cnsCheckBox, CSVApps[index].cns); | 
					
						
							| 
									
										
										
										
											2014-07-09 22:13:37 +02:00
										 |  |  | 	SET_VALUE_AND_CHECKBOX(CSVndl, ndlCheckBox, CSVApps[index].ndl); | 
					
						
							| 
									
										
										
										
											2014-07-09 22:13:38 +02:00
										 |  |  | 	SET_VALUE_AND_CHECKBOX(CSVtts, ttsCheckBox, CSVApps[index].tts); | 
					
						
							| 
									
										
										
										
											2013-11-21 23:48:42 +01:00
										 |  |  | 	SET_VALUE_AND_CHECKBOX(CSVstopdepth, stopdepthCheckBox, CSVApps[index].stopdepth); | 
					
						
							| 
									
										
										
										
											2014-07-10 20:54:18 +02:00
										 |  |  | 	SET_VALUE_AND_CHECKBOX(CSVpressure, pressureCheckBox, CSVApps[index].pressure); | 
					
						
							| 
									
										
										
										
											2014-01-13 22:11:14 -02:00
										 |  |  | 	ui->CSVSeparator->blockSignals(true); | 
					
						
							|  |  |  | 	int separator_index = ui->CSVSeparator->findText(CSVApps[index].separator); | 
					
						
							|  |  |  | 	if (separator_index != -1) | 
					
						
							|  |  |  | 		ui->CSVSeparator->setCurrentIndex(separator_index); | 
					
						
							|  |  |  | 	ui->CSVSeparator->blockSignals(false); | 
					
						
							| 
									
										
										
										
											2013-11-21 23:48:37 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-29 18:11:20 +02:00
										 |  |  | void DiveLogImportDialog::unknownImports() | 
					
						
							| 
									
										
										
										
											2013-10-16 22:05:19 +03:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2014-01-16 22:50:16 +02:00
										 |  |  | 	if (!specialCSV.contains(ui->knownImports->currentIndex())) | 
					
						
							|  |  |  | 		ui->knownImports->setCurrentIndex(0); | 
					
						
							| 
									
										
										
										
											2013-10-16 22:05:19 +03:00
										 |  |  | } |