summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2013-11-19 04:12:31 -0800
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-11-19 04:12:31 -0800
commit788671944346c75dcf3562e4703928bca9b26600 (patch)
tree4a4a127454d15ffb7f2710d6dda97f2eec8cfb9f
parent0877d9345761d037df4e9e9e980da8d5288e57b6 (diff)
downloadsubsurface-788671944346c75dcf3562e4703928bca9b26600.tar.gz
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>
-rw-r--r--qt-ui/globe.cpp17
-rw-r--r--qt-ui/globe.h1
-rw-r--r--qt-ui/maintab.cpp8
-rw-r--r--qt-ui/maintab.h1
4 files changed, 26 insertions, 1 deletions
diff --git a/qt-ui/globe.cpp b/qt-ui/globe.cpp
index 149f738e3..3ea01f0d8 100644
--- a/qt-ui/globe.cpp
+++ b/qt-ui/globe.cpp
@@ -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);
}
}
diff --git a/qt-ui/globe.h b/qt-ui/globe.h
index cab42cefc..b04ff9266 100644
--- a/qt-ui/globe.h
+++ b/qt-ui/globe.h
@@ -18,6 +18,7 @@ public:
GlobeGPS(QWidget *parent);
void reload();
void centerOn(struct dive* dive);
+ void diveEditMode();
protected:
/* reimp */ void resizeEvent(QResizeEvent *event);
diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp
index 7c94ab4c8..a1acfb52d 100644
--- a/qt-ui/maintab.cpp
+++ b/qt-ui/maintab.cpp
@@ -123,6 +123,7 @@ void MainTab::enableEdition(EditMode newEditMode)
return;
mainWindow()->dive_list()->setEnabled(false);
+ mainWindow()->globe()->diveEditMode();
// We may be editing one or more dives here. backup everything.
notesBackup.clear();
ui.notesButtonBox->show();
@@ -835,6 +836,13 @@ QString MainTab::printGPSCoords(int lat, int lon)
return result;
}
+void MainTab::updateCoordinatesText(qreal lat, qreal lon)
+{
+ int ulat = rint(lat * 1000000);
+ int ulon = rint(lon * 1000000);
+ ui.coordinates->setText(printGPSCoords(ulat, ulon));
+}
+
void MainTab::updateGpsCoordinates(const struct dive *dive)
{
if (dive) {
diff --git a/qt-ui/maintab.h b/qt-ui/maintab.h
index d2c96a972..6aee9fbfe 100644
--- a/qt-ui/maintab.h
+++ b/qt-ui/maintab.h
@@ -59,6 +59,7 @@ public:
void initialUiSetup();
void equipmentPlusUpdate();
bool isEditing();
+ void updateCoordinatesText(qreal lat, qreal lon);
public slots:
void addCylinder_clicked();
void addWeight_clicked();