summaryrefslogtreecommitdiffstats
path: root/qt-ui/divelogexportdialog.cpp
diff options
context:
space:
mode:
authorGravatar Robert C. Helling <helling@atdotde.de>2014-09-28 23:47:41 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2014-10-10 08:03:45 -0400
commit2282035a4d07548cb1677b16c5df97c7f98ea498 (patch)
tree71a5614d3db3ccc9a5540d0f28dd23bda0b4ef9d /qt-ui/divelogexportdialog.cpp
parentd7150818dc9cb4f58b5bc8039b18eef9dbb22d2c (diff)
downloadsubsurface-2282035a4d07548cb1677b16c5df97c7f98ea498.tar.gz
Add export for depths of images taken
This adds an option to the export dialog to write an ascii file containing filenames of image files a tab and the depth at the time of the image taken. [Dirk Hohndel: whitespace cleanup] Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-ui/divelogexportdialog.cpp')
-rw-r--r--qt-ui/divelogexportdialog.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/qt-ui/divelogexportdialog.cpp b/qt-ui/divelogexportdialog.cpp
index 67803eeee..3f9373a4f 100644
--- a/qt-ui/divelogexportdialog.cpp
+++ b/qt-ui/divelogexportdialog.cpp
@@ -74,6 +74,8 @@ void DiveLogExportDialog::showExplanation()
ui->description->setText(tr("HTML export of the dive locations, visualized on a world map."));
} else if (ui->exportSubsurfaceXML->isChecked()) {
ui->description->setText(tr("Subsurface native XML format."));
+ } else if (ui->exportImageDepths->isChecked()) {
+ ui->description->setText(tr("Write depths of images to file."));
}
}
@@ -257,6 +259,10 @@ void DiveLogExportDialog::on_buttonBox_accepted()
QByteArray bt = QFile::encodeName(filename);
save_dives_logic(bt.data(), ui->exportSelected->isChecked());
}
+ } else if (ui->exportImageDepths->isChecked()) {
+ filename = QFileDialog::getSaveFileName(this, tr("Save image depths"), lastDir);
+ if (!filename.isNull() && !filename.isEmpty())
+ export_depths(filename.toUtf8().data(), ui->exportSelected->isChecked());
}
break;
case 1:
@@ -278,3 +284,39 @@ void DiveLogExportDialog::on_buttonBox_accepted()
export_dives_xslt(filename.toUtf8(), ui->exportSelected->isChecked(), stylesheet.toUtf8());
}
}
+
+void DiveLogExportDialog::export_depths(const char *filename, const bool selected_only)
+{
+ FILE *f;
+ struct dive *dive;
+ depth_t depth;
+ int i;
+ const char **unit;
+
+ struct membuffer buf = { 0 };
+
+ for_each_dive (i, dive) {
+ if (selected_only && !dive->selected)
+ continue;
+
+ FOR_EACH_PICTURE (dive) {
+ int n = dive->dc.samples;
+ struct sample *s = dive->dc.sample;
+ depth.mm = 0;
+ while (--n >= 0 && s->time.seconds <= picture->offset.seconds) {
+ depth.mm = s->depth.mm;
+ s++;
+ }
+ put_format(&buf, "%s\t%.1f%s\n", picture->filename, get_depth_units(depth.mm, NULL, unit), *unit);
+ }
+ }
+
+ f = subsurface_fopen(filename, "w+");
+ if (!f) {
+ report_error(tr("Can't open file %s").toUtf8().data(), filename);
+ } else {
+ flush_buffer(&buf, f); /*check for writing errors? */
+ fclose(f);
+ }
+ free_buffer(&buf);
+}