mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Handle double clicks on globe during dive edit mode
When we are editing or adding a dive, the globe widget needs to act differently. Instead of directly changing the lat/lon of selected dives, it needs populate the coordinate text field as if this information was entered by the user (effectively all it is is a way to more conveniently enter coordinates). As a side effect, this also allows us to change the location once it has been added (you just need to go into dive edit mode to do so). There is one weird issue that occasionally (and I can't quite reproduce this) I get lat/lon very close to 0/0 (as if the globe widget was centered on 0/0 and not on whatever it is actually showing). That still needs to be addressed. Fixes #239 Fixes #131 Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
0877d93457
commit
7886719443
4 changed files with 26 additions and 1 deletions
|
@ -212,6 +212,16 @@ void GlobeGPS::prepareForGetDiveCoordinates(dive* dive)
|
|||
editingDiveCoords = dive;
|
||||
}
|
||||
|
||||
void GlobeGPS::diveEditMode()
|
||||
{
|
||||
if (messageWidget->isVisible())
|
||||
messageWidget->animatedHide();
|
||||
messageWidget->setMessageType(KMessageWidget::Warning);
|
||||
messageWidget->setText(QObject::tr("Editing dive - move the map and double-click to set the dive location"));
|
||||
messageWidget->setWordWrap(true);
|
||||
messageWidget->animatedShow();
|
||||
}
|
||||
|
||||
void GlobeGPS::changeDiveGeoPosition(qreal lon, qreal lat, GeoDataCoordinates::Unit unit)
|
||||
{
|
||||
// convert to degrees if in radian.
|
||||
|
@ -241,7 +251,12 @@ void GlobeGPS::changeDiveGeoPosition(qreal lon, qreal lat, GeoDataCoordinates::U
|
|||
void GlobeGPS::mousePressEvent(QMouseEvent* event)
|
||||
{
|
||||
qreal lat, lon;
|
||||
if (editingDiveCoords && geoCoordinates(event->pos().x(), event->pos().y(), lon, lat, GeoDataCoordinates::Degree)) {
|
||||
// there could be two scenarios that got us here; let's check if we are editing a dive
|
||||
if (mainWindow()->information()->isEditing() &&
|
||||
geoCoordinates(event->pos().x(), event->pos().y(), lon, lat, GeoDataCoordinates::Degree)) {
|
||||
mainWindow()->information()->updateCoordinatesText(lat, lon);
|
||||
} else if (editingDiveCoords &&
|
||||
geoCoordinates(event->pos().x(), event->pos().y(), lon, lat, GeoDataCoordinates::Degree)) {
|
||||
changeDiveGeoPosition(lon, lat, GeoDataCoordinates::Degree);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue