mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	mapwidget-mobile: do not animate the first selection
centerOnLocationHard() is added in MapPage.qml so that on `firstRun` the map is hard panned to the desired location without animation. This affects the selection of a new "Dive details" -> "Map it" or when opening a GPS location in the map. The idea behind this change is to avoid starting the map animation from an arbitrary location such as [0,0] or London. Also, to not start the map zoomed out completely and then zoom in on a selected dive. For this change to work, add the helper getCoordinatesForUUID() to qmlmapwidgethelper.cpp/.h and use it to obtain the QGeoCoordinates for a dive site UUID. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
This commit is contained in:
		
							parent
							
								
									2700f02dcd
								
							
						
					
					
						commit
						48c032bb8e
					
				
					 3 changed files with 28 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -23,6 +23,15 @@ MapWidgetHelper::MapWidgetHelper(QObject *parent) : QObject(parent)
 | 
			
		|||
	        this, SLOT(selectedLocationChanged(MapLocation *)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QGeoCoordinate MapWidgetHelper::getCoordinatesForUUID(QVariant dive_site_uuid)
 | 
			
		||||
{
 | 
			
		||||
	const uint32_t uuid = qvariant_cast<uint32_t>(dive_site_uuid);
 | 
			
		||||
	struct dive_site *ds = get_dive_site_by_uuid(uuid);
 | 
			
		||||
	if (!ds || !dive_site_has_gps_location(ds))
 | 
			
		||||
		return QGeoCoordinate(0.0, 0.0);
 | 
			
		||||
	return QGeoCoordinate(ds->latitude.udeg * 0.000001, ds->longitude.udeg * 0.000001);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MapWidgetHelper::centerOnDiveSiteUUID(QVariant dive_site_uuid)
 | 
			
		||||
{
 | 
			
		||||
	const uint32_t uuid = qvariant_cast<uint32_t>(dive_site_uuid);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,6 +22,7 @@ public:
 | 
			
		|||
	explicit MapWidgetHelper(QObject *parent = NULL);
 | 
			
		||||
 | 
			
		||||
	void centerOnDiveSite(struct dive_site *);
 | 
			
		||||
	Q_INVOKABLE QGeoCoordinate getCoordinatesForUUID(QVariant dive_site_uuid);
 | 
			
		||||
	Q_INVOKABLE void centerOnDiveSiteUUID(QVariant dive_site_uuid);
 | 
			
		||||
	Q_INVOKABLE void reloadMapLocations();
 | 
			
		||||
	Q_INVOKABLE void copyToClipboardCoordinates(QGeoCoordinate coord, bool formatTraditional);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,6 +12,7 @@ Kirigami.Page {
 | 
			
		|||
	topPadding: 0
 | 
			
		||||
	rightPadding: 0
 | 
			
		||||
	bottomPadding: 0
 | 
			
		||||
	property bool firstRun: true
 | 
			
		||||
 | 
			
		||||
	MapWidget {
 | 
			
		||||
		id: mapWidget
 | 
			
		||||
| 
						 | 
				
			
			@ -40,10 +41,27 @@ Kirigami.Page {
 | 
			
		|||
			console.warn("main.qml: centerOnDiveSiteUUI(): uuid is undefined!")
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		// on firstRun, hard pan/center the map to the desired location so that
 | 
			
		||||
		// we don't start at an arbitrary location such as [0,0] or London.
 | 
			
		||||
		if (firstRun) {
 | 
			
		||||
			var coord = mapWidget.mapHelper.getCoordinatesForUUID(uuid)
 | 
			
		||||
			centerOnLocationHard(coord.latitude, coord.longitude)
 | 
			
		||||
			firstRun = false
 | 
			
		||||
		} // continue here as centerOnDiveSiteUUID() also does marker selection.
 | 
			
		||||
		mapWidget.mapHelper.centerOnDiveSiteUUID(uuid)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function centerOnLocation(lat, lon) {
 | 
			
		||||
		if (firstRun) {
 | 
			
		||||
			centerOnLocationHard(lat, lon)
 | 
			
		||||
			firstRun = false
 | 
			
		||||
			return // no need to animate via centerOnCoordinate().
 | 
			
		||||
		}
 | 
			
		||||
		mapWidget.map.centerOnCoordinate(QtPositioning.coordinate(lat, lon))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function centerOnLocationHard(lat, lon) {
 | 
			
		||||
		mapWidget.map.zoomLevel = mapWidget.map.defaultZoomIn
 | 
			
		||||
		mapWidget.map.center = QtPositioning.coordinate(lat, lon)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue