Commit graph

13907 commits

Author SHA1 Message Date
Berthold Stoeger
d9b502f0c7 Dive pictures: Don't read whole file for parsing EXIF data
This is a preparation for video support. We don't want to read a whole
potentially multi-GB file into memory just to detect that it isn't a
JPEG. Especially since at the moment EXIF metadata are parsed twice,
once for GPS, once for timestamp.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2018-03-19 13:14:36 -07:00
Dirk Hohndel
0c91a1b8d2 Android build: switch to Qt 5.10.1
That's what we now use for the official binaries as well.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2018-03-19 12:08:06 -07:00
Dirk Hohndel
6c3cd24ef8 Android/iOS build: get libxml2 and libxslt from GitHub
The xmlsoft.org links sometimes time out. Sadly, GitHub API gives us an
oddly named top level directory in the tar file, so lets strip that and
replace it with the "usual" name.

Also, for the "raw" tar files from GitHub we need to run autoreconf
ourselves.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2018-03-19 12:03:22 -07:00
Joakim Bygdell
01e4ec47be QML UI: Fix checkbox color
The background color in our own checkbox should match the page background.
Also includes some whitespace cleanup.

Signed-off-by: Joakim Bygdell <j.bygdell@gmail.com>
2018-03-19 12:03:06 -07:00
Joakim Bygdell
ab99703b02 QML UI: drop focus when selecting a location
Make sure to drop focus both for typing and when selecting
an entry from the list.

Signed-off-by: Joakim Bygdell <j.bygdell@gmail.com>
2018-03-19 12:01:14 -07:00
Joakim Bygdell
94e0ec8dc9 Mobile: change location combobox id
Change the id of the location combobox to math the naming scheme
of the other comboboxes.

Signed-off-by: Joakim Bygdell <j.bygdell@gmail.com>
2018-03-19 12:01:14 -07:00
Joakim Bygdell
07fb1db3ad Mobile: Fix location combobox
In the initial move to comboboxes the correct location model
was not used. This uses the correct model and makes it behave
like the other comboboxes.

Signed-off-by: Joakim Bygdell <j.bygdell@gmail.com>
2018-03-19 12:01:14 -07:00
Joakim Bygdell
93ba8f1a05 Mobile: for multiple buddies pick index of first
When a dive has multiple buddies, pick the index of the first
to prevent the user from hanving to scroll through the entire
list when editing.

Signed-off-by: Joakim Bygdell <j.bygdell@gmail.com>
2018-03-19 12:01:14 -07:00
Joakim Bygdell
6badba2bae QML UI: drop focus on edit
Drop focus on editable comboboxes when pressing enter.

Signed-off-by: Joakim Bygdell <j.bygdell@gmail.com>
2018-03-19 12:01:14 -07:00
Joakim Bygdell
477d1a3533 Moblie: remove comparison when saving
Removing the comparison of currentText vs editText when saving buddies
fixes the issue of data loss when dive has more than one buddy.

Signed-off-by: Joakim Bygdell <j.bygdell@gmail.com>
2018-03-19 12:01:14 -07:00
Dirk Hohndel
7feb9a3b6e QML UI: drop focus when ComboBox element is picked
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2018-03-19 12:01:14 -07:00
Dirk Hohndel
9145ea209f QML UI: cylinders aren't editable
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2018-03-19 12:01:14 -07:00
Joakim Bygdell
9755650b3c QML UI: switch editing back to comboBox
The HintsTextEdit just doesn't feel natural and intuitive.

Edit, fixed rebase issues.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Signed-off-by: Joakim Bygdell <j.bygdell@gmail.com>
2018-03-19 12:01:14 -07:00
Stefan Fuchs
a2111a4198 CSV export: CHANGELOG entry
Signed-off-by: Stefan Fuchs <sfuchs@gmx.de>
2018-03-19 11:59:58 -07:00
Stefan Fuchs
2f1d6867df CSV export: Remove erroneous printed dive site notes from export
Remove erroneous printed dive site notes from dive profile export.

Signed-off-by: Stefan Fuchs <sfuchs@gmx.de>
2018-03-19 11:59:58 -07:00
Stefan Fuchs
5c9345976c CSV import/export: Sort parameter list and add comment
Signed-off-by: Stefan Fuchs <sfuchs@gmx.de>
2018-03-19 11:59:58 -07:00
Stefan Fuchs
46f1fea1b6 CSV export: Correct numeric format for depth
Add two missing format-number functions for mean depth in dive list
export and depth in dive profile export.

Signed-off-by: Stefan Fuchs <sfuchs@gmx.de>
2018-03-19 11:59:58 -07:00
Stefan Fuchs
fc01045680 CSV export: Modify format of dive list and dive profile export
In dive list CSV export:
- Move unit "min" from duration field to header
- Move unit "%" from O2 and He fields to header

In dive profile CSV export:
- Add "min" to sample time header
- Add column for sample heart rate

Signed-off-by: Stefan Fuchs <sfuchs@gmx.de>
2018-03-19 11:59:58 -07:00
Berthold Stoeger
8180e49427 Cleanup: Initialize variable MainTab::lastSelectedDive
This variable was read before being set.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-03-19 08:54:31 -07:00
Lubomir I. Ivanov
8c0dfe4483 CHANGELOG.md: add latest map-widget changes
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2018-03-15 23:27:18 +02:00
Lubomir I. Ivanov
e1c81560b9 MapWidgetContextMenu.qml: improve the action text
The first 3 actions in the map widget context menu
are about the current map widget center and not about the
selected dive site / marker.

Avoid using the word "location" for these, use "coordinates"
for the second and third entry.

Suggested-by: Willem Ferguson <willemferguson@zoology.up.ac.za>
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2018-03-15 23:27:18 +02:00
Lubomir I. Ivanov
64e2247aa7 MapWidget.qml: try to preserve zoom when opening Google Maps
Extend openLocationInGoogleMaps() so that the current
map widget zoom level is roughly mapped to the Google Maps
zoom level.

The two zoom scales are quite different. Google Maps uses meters
directly, while the QML map uses a scale from ~1 - 21.

The approximation is done via exponential regression over
a small data set gathered from experiment.

Add a console.log() call so that the URL is logged.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2018-03-15 23:27:18 +02:00
Lubomir I. Ivanov
16b3892f22 MapWidget.qml: use a new URL format for Google Maps
Make the map widget use a new URL format for Google Maps
in openLocationInGoogleMaps(). The new URL format does
not show a marker once the location is open in Google Maps
as this might confuse some users.

Suggested-by: Willem Ferguson <willemferguson@zoology.up.ac.za>
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2018-03-15 23:27:18 +02:00
Berthold Stoeger
2105d3c7d0 Cleanup: consistently use toUtf8() instead of toLocal8Bit()
These do the same, since the text-codex is set to UTF-8 on startup.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-03-14 13:55:36 +02:00
Berthold Stoeger
d1572a8d95 Cleanup: introduce copy_qstring() function
strdup(qPrintable(s)) and copy_string(qPrintable(s)) were such common
occurrences that they seem worthy of a short helper-function.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-03-14 13:55:36 +02:00
Berthold Stoeger
b72cc1f317 Cleanup: consistently use qPrintable()
Replace constructs of the kind
  s.toUtf8().data(),
  s.toUtf8().constData(),
  s.toLocal8Bit().data(),
  s.toLocal8Bit.constData() or
  qUtf8Printable(s)
by
  qPrintable(s).

This is concise, consistent and - in principle - more performant than
the .data() versions.

Sadly, owing to a suboptimal implementation, qPrintable(s) currently
is a pessimization compared to s.toUtf8().data(). A fix is scheduled for
new Qt versions: https://codereview.qt-project.org/#/c/221331/

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-03-14 13:55:36 +02:00
Berthold Stoeger
4e44fe7598 Cleanup: constify string arguments in core/dive.c
Make arguments to set_informational_units(), set_git_prefs(),
set_userid(), dive_remove_picture() and update_event_name()
"const char *" for consistency with the rest of core/dive.c.

This will allow replacing toUtf8().data() with the constData()
version in a subsequent commit.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-03-14 13:55:36 +02:00
Berthold Stoeger
6f2169488a Cleanup: Set text encoding to UTF-8 for all platforms.
This was only done explicitly for Windows. Other platforms were
implicitly supposed to be UTF-8.

Suggested-by: Lubomir I. Ivanov <neolit123@gmail.com>

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-03-14 13:55:36 +02:00
Dirk Hohndel
f799c9ca3f Subsurface-mobile: Add OSTC 2 TR as support dive computer
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2018-03-14 01:03:31 -07:00
Dirk Hohndel
c951eadfb8 Update translation source strings
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2018-03-14 00:58:47 -07:00
Dirk Hohndel
c20faf907a Remove now obsolete script
With the removal of the transport tags from our libdivecomputer branch,
we can no longer automate the table creation that way.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2018-03-13 22:39:34 -07:00
Dirk Hohndel
10221f9993 Update libdivecomputer submodule
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2018-03-13 22:36:39 -07:00
Linus Torvalds
f5e2a17e7d Subsurface update for upstream libdivecomputer changes
So because I merged with upstream libdivecomputer, and it no longer does
the "halfduplex emulation" thing in the IO layer, and instead does it in
the only Suunto backend that needed it, that also affected our custom IO
layer in subsurface.

Sure, I could have left a dummy interface and left subsurface with some
ugly dead code, but it's really better to just get rid of the code.

So when Dirk pulls in the libdivecomputer updates from

    https://github.com/torvalds/libdc-for-dirk.git Subsurface-branch

this patch to remove the halfduplex code in subsurface is also needed.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Stefan Fuchs <sfuchs@gmx.de>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2018-03-13 22:34:57 -07:00
Anton Lundin
8de887c8ee Treat a PSCR dive with sensors more like a CCR dive
PSCR dives with o2 sensors are more like CCR dives. The math is exactly
the same, its just a different diluent and a different po2.

Signed-off-by: Anton Lundin <glance@acc.umu.se>
2018-03-13 18:54:16 +02:00
Anton Lundin
b48eb47178 Fix up CCR/PSCR dives with sensors values without no_o2sensors
This introduces a fixup function that walks all the samples and
populates the no_o2sensors if its zero and supposed to be something
else.

There is a bug somewhere which Willem hit, causing this to never be set.

Reported-by: Willem Ferguson <willemferguson@zoology.up.ac.za>
Signed-off-by: Anton Lundin <glance@acc.umu.se>
2018-03-13 18:54:16 +02:00
Anton Lundin
15b6953438 Use the current dive mode instead of constant
In the if case above, we already conclude its a OC dive, but its cleaner
to actually pass the current mode instead of a hard coded value.

This also makes the code less prune to future bugs.

Signed-off-by: Anton Lundin <glance@acc.umu.se>
2018-03-13 18:54:16 +02:00
Berthold Stoeger
7da214a8c4 Mobile: pass QString as value to registerError()
registerError() may be called from a different thread context. Passing
the message as a const-reference may lead to a dangling reference.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-03-12 15:18:13 +02:00
Lubomir I. Ivanov
cdba35530b android/build.sh: build the googlemaps plugin
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2018-03-11 11:40:12 -07:00
Lubomir I. Ivanov
c52df79cf1 CHANGELOG.md: add note about the map widget changes
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2018-03-11 11:40:12 -07:00
Lubomir I. Ivanov
9a6cd451e2 cmake: update CMake to build the map components on mobile
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2018-03-11 11:40:12 -07:00
Lubomir I. Ivanov
a02ef84bb5 subsurface-mobile-helper: register map related types
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2018-03-11 11:40:12 -07:00
Lubomir I. Ivanov
49f566d6d8 main.qml: handle mapPage in pageStack.onCurrentItemChanged()
When the slot pageStack.onCurrentItemChanged() is reached
make sure that the stackView becomes non-interactive.
This prevents swiping left on the map to "go back".

Also, always reload the map markers when the map becomes visible.
This is not optimal and instead something in the lines of:
  DiveList.model.onChanged()
is a much better solution.

Ideally the map reload should happen on dive removal, dive addition,
dive edits and sync from cloud.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2018-03-11 11:40:12 -07:00
Lubomir I. Ivanov
fe9c3d4c95 main.qml: add a drawer action for the map
This action uses the Breeze icon "map-globe.svg" and calls
showMap().

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2018-03-11 11:40:12 -07:00
Lubomir I. Ivanov
68da4de643 main.qml: modify showMap() to not accept location
showMap() uses a location to open Google Maps in a browser.
Make showMap() a generic function to push the mapPage on the view
stack.

Update the calls to this function from child widgets and pages.
Also either call mapPage.centerOnLocation()
or mapPage.centerOnDiveSiteUUID() depending if the caller
wants the map to center on a dive site or on map coordinates.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2018-03-11 11:40:12 -07:00
Lubomir I. Ivanov
61c90efc6b main.qml: create an instance of MapPage
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2018-03-11 11:40:12 -07:00
Lubomir I. Ivanov
392a3e5910 mobile-resources.qrc: add the map related resources for mobile
1) QML files
2) Map widget specific icons
3) The Breeze map-globe.svg icon

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2018-03-11 11:40:12 -07:00
Lubomir I. Ivanov
27ad58aa78 mappage.qml: add a Kirigami page for the map widget
The Page object has the following functionality:
- reloadMap(): reload all map markers.
- centerOnDiveSiteUUID(): center the map on a dive site uuid.
- centerOnLocation(): the map on a latitude, longitude in decimal.
- Select a dive list entry based on a marker selected on the map via
diveList.setCurrentDiveListIndex()

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2018-03-11 11:40:12 -07:00
Lubomir I. Ivanov
8b43633c7d mapwidget.qml: emit a signal when the marker changed
The signal to emit is selectedDivesChanged() and it accepts
a list if diveIds. The 'nSelectedDives' counter is redundant.

Also expose the 'map' and 'mapHelper' objects as aliases.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2018-03-11 11:40:12 -07:00
Lubomir I. Ivanov
d3607e0b77 divelist.qml: add the setCurrentDiveListIndex() helper
Add the setCurrentDiveListIndex() wrapper for:
  diveListView.currentIndex = idx
wich also makes it possible to disable the scroll animation when
selecting dive list indexes which are too far apart.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2018-03-11 11:40:12 -07:00
Lubomir I. Ivanov
fbbb6ba4fb qmapwidgethelper: make adjustmets for the mobile version
The mobile version is limited as it does not support dive list
selection of multiple dives and editing multiple dives.

Also the dive list on mobile does not follow the same indexing as
the desktop version dive list.

Use the SUBSURFACE_MOBILE macro and for:
- centerOnDiveSite() either deselect map markers or center on
a single one (never on a rectangle like the desktop version)
- selectedLocationChanged() and selectVisibleLocations() return
a list of single dive ID

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2018-03-11 11:40:12 -07:00