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>
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>
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>
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>
centerOnDiveSiteUUID() is a helper to center the map on a dive_site
UUID instead of a dive_site pointer.
Make it call centerOnDiveSite().
Make both this function and reloadMapLocations() Q_INVOKABLE
as these are going to be called from QML.
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Add the following includes in the header -
<QVariant> and <QGeoCoordinate> otherwise the
mobile build fails.
It is unclear how the desktop build does not complain
about this.
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Since all qt-helpers are defined in qthelper.cpp, there seems to be
no reason to have two include files. By unifying the two files,
duplication and inconsistencies are removed. The C++-only part is
simply compiled away with #ifdefs.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
In commit f3d978b8a5 the QtQuick version was upgraded
to 2.6 (from 2.0 for the mapwidget). This is, apparently,
too agressive, as there are still mainstream distributions
that are still on Qt 5.5.1 for which 2.6 of QtQuick is too
new. And as a sidenote: Qt 5.5.1 was released in October
2015.
So partially revert commit f3d978b8a5.
Fixes: #978
Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
Icon aliases were complete mess.
Some icons had alias some didn't.
Named with underscores vs. hyphens vs. camelCase.
Lower vs. upper case.
"ICON" prefix vs. suffix vs. nothing.
With vs. without filename suffix.
Some didn't make sence. Eg. mapwidget-marker-gray
(I can see, it's grey, but what does it represent?)
Some were duplicated, eg warning vs. warning-icon.
Some were name after widget, which is wrong.
Do not reinvent wheel. Use widely used naming scheme
close to Freedesktop Icon Naming Specification. This
will enable usage of common icons from current set in
the future. Thus Subsurface will fit nicely to GUI.
This changes icon aliases to one, easy grep-able style.
Signed-off-by: Martin Měřinský <mermar@centrum.cz>
Icon aliases were inconsistent mess. Underscores vs. hyphens vs. camelCase.
With vs. without filename suffix. Lower vs. upper case. "icon" suffix vs.
prefix vs. nothing. Some were duplicated, eg warning vs. warning-icon. Some
icons didn't have alias at all.
This changes all icon aliases to one, easy grep-able style which complies
to Freedesktop Icon Naming Specification (Guidelines).
Signed-off-by: Martin Měřinský <mermar@centrum.cz>
The centerOn*() functions can just return early
for invalid input, instead of branching the conditions.
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
- Add the helper coordIsValid() and use it in centerOnCoordinate().
This checks for NaN coordinates and prevents an infinite while() loop.
- Use '-= 1.0' instead of '--' to be more clear that the decremented
variable is a float
- Store the current center with 'centerStored' in
centerOnCoordinate(). Fixes a possible zoom out glitch.
- use Math.floor() to convert 'zoomLevel' to integer when estimating
zoomOut in centerOn*()
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
The zoom out function is no longer used as we don't zoom
out when a dive doesn't have dive site coordinates.
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
There was a problem with the current different duration
for pan and zoom. Ideally the pan should before the zoom:
Map zooms out -> pan to new center starts -> zoom in
The problem with this is that if the map pans out too much it
loses it's center and the above scheme would not work.
To solve the problem, make the duration of pan and zoom
the same this is not idea, but prevents the case where
the map would not zoom-in at the correct center.
Also remove the easing function.
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
When the map is performing zoom/pan animation and the
user performs an action that would trigger a new zoom/pan
animation, but some glitches can occurs. An example
would be when one clicks a dive in the dive list -
the zoom/pan animation will trigger, so that the map
is centered on the dive site, but if the user clicks the
[+] button to zoom-in, while the animation is running
the map will glitch.
This patch prevents such glitches by stopping
all running animations in progress when the user:
- single clicks the map
- uses the mouse-wheel to zoom
- presses the [+] / [-] buttons
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Avoid using qvariant_cast() with getRole() in favor of
MapLocation::coordinate() in MapWidgetHelper::reloadMapLocations().
This makes the code more readble.
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Once the user starts editing a dive site, make sure to pass
coordinates of either the current map center (if a new MapLocation
is being added) or the coordinates of the existing MapLocation.
The "Dive site management" coordinates text field would receive
these new coordinates after the displayed_dive_site struct
is updated and the coordinatesChanged() signal is emitted.
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Once the user starts editing the coordinates by hand
(from the "Dive site management" UI) make sure to
update the map to center on those user entered
coordinates.
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Upgrade QtQuick to 2.6. Seeing a small artifact in the application
header, lets see what happens when upgrading more includes.
Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
This patch allows updating the location of map markers
while editing a dive site and updating the text in the
LocationInformationWidget in real-time.
Currently it is only possible to see the marker changes by
clicking 'Apply'.
The modification required the following changes:
- add the MapWidget::updateCurrentDiveSiteCoordinatesToMap() slot
and call it each time the GPS text updates
- separate the updateCurrentDiveSiteCoordinates(FromMap/ToMap) logic
by having the FromMap/ToMap suffix to method names
- make MapWidgetHelper::updateCurrentDiveSiteCoordinatesToMap()
call a new MapLocationModel::updateMapLocationCoordinates()
method, which updates selected location coordinates and the model
- add MapLocation::setCoordinateNoEmit() that does not emit
a signal when updating a coordinate
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
When starting to edit a new dive location, create
a marker at the current map center instead of zooming
out and centering on the 0,0 coordinate.
This will help (and speed up) a lot the edition,
if the user needs to add numerous dive markers
at a specific location close to each other.
refs #754
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Move all the map widget platform agnostic files to the
<subsurface-root>/map-widget folder.
This avoids the confusion about the desktop version of subsurface
using mobile components. The map widget is planned as a shared
component between the mobile and desktop versions.
desktop-widgets/mapwidget[.h/.cpp] still remain as those are specific
to the desktop version.
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>