summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dive.c1
-rw-r--r--dive.h1
-rw-r--r--qt-ui/globe.cpp10
-rw-r--r--qt-ui/mainwindow.cpp9
-rw-r--r--qt-ui/simplewidgets.cpp35
-rw-r--r--qt-ui/simplewidgets.h1
6 files changed, 44 insertions, 13 deletions
diff --git a/dive.c b/dive.c
index 3b682ee5f..758368615 100644
--- a/dive.c
+++ b/dive.c
@@ -13,6 +13,7 @@
* it's used in the UI, but it seems to make the most sense to have it
* here */
struct dive displayed_dive;
+struct dive_site displayed_dive_site;
struct tag_entry *g_tag_list = NULL;
diff --git a/dive.h b/dive.h
index 533a193b6..8247a5f50 100644
--- a/dive.h
+++ b/dive.h
@@ -474,6 +474,7 @@ struct dive_table {
extern struct dive_table dive_table;
extern struct dive displayed_dive;
+extern struct dive_site displayed_dive_site;
extern int selected_dive;
extern unsigned int dc_number;
#define current_dive (get_dive(selected_dive))
diff --git a/qt-ui/globe.cpp b/qt-ui/globe.cpp
index 256eff175..91bb4e858 100644
--- a/qt-ui/globe.cpp
+++ b/qt-ui/globe.cpp
@@ -206,7 +206,10 @@ void GlobeGPS::repopulateLabels()
// don't show that flag, it's either already shown as displayed_dive
// or it's the one that we are moving right now...
continue;
- ds = get_dive_site_for_dive(dive);
+ if (idx == -1)
+ ds = &displayed_dive_site;
+ else
+ ds = get_dive_site_for_dive(dive);
if (dive_site_has_gps_location(ds)) {
GeoDataPlacemark *place = new GeoDataPlacemark(ds->name);
place->setCoordinate(ds->longitude.udeg / 1000000.0, ds->latitude.udeg / 1000000.0, 0, GeoDataCoordinates::Degree);
@@ -329,9 +332,8 @@ void GlobeGPS::changeDiveGeoPosition(qreal lon, qreal lat, GeoDataCoordinates::U
centerOn(lon, lat, true);
// change the location of the displayed_dive and put the UI in edit mode
- ds = get_dive_site_for_dive(&displayed_dive);
- ds->latitude.udeg = lrint(lat * 1000000.0);
- ds->longitude.udeg = lrint(lon * 1000000.0);
+ displayed_dive_site.latitude.udeg = lrint(lat * 1000000.0);
+ displayed_dive_site.longitude.udeg = lrint(lon * 1000000.0);
emit(coordinatesChanged());
repopulateLabels();
editingDiveLocation = false;
diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index 7776f312e..6a67befa1 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -113,6 +113,8 @@ MainWindow::MainWindow() : QMainWindow(),
connect(plannerDetails->printPlan(), SIGNAL(pressed()), divePlannerWidget(), SLOT(printDecoPlan()));
connect(mainTab, SIGNAL(requestDiveSiteEdit(uint32_t)), this, SLOT(enableDiveSiteEdit(uint32_t)));
connect(locationInformation, SIGNAL(informationManagementEnded()), this, SLOT(setDefaultState()));
+ connect(locationInformation, SIGNAL(informationManagementEnded()), this, SLOT(refreshDisplay()));
+
#ifdef NO_PRINTING
ui.printPlan->hide();
ui.menuFile->removeAction(ui.actionPrint);
@@ -133,10 +135,7 @@ MainWindow::MainWindow() : QMainWindow(),
#ifdef NO_MARBLE
ui.menuView->removeAction(ui.actionViewGlobe);
#else
- // FIXME
- // TODO
- // we need this on the dive sites
- //connect(globe(), SIGNAL(coordinatesChanged()), information(), SLOT(updateGpsCoordinates()));
+ connect(globe(), SIGNAL(coordinatesChanged()), locationInformation, SLOT(updateGpsCoordinates()));
#endif
#ifdef NO_USERMANUAL
ui.menuHelp->removeAction(ui.actionUserManual);
@@ -218,7 +217,6 @@ LocationInformationWidget *MainWindow::locationInformationWidget() {
}
void MainWindow::enableDiveSiteEdit(uint32_t id) {
- locationInformationWidget()->setLocationId(id);
setApplicationState("EditDiveSite");
}
@@ -276,6 +274,7 @@ void MainWindow::current_dive_changed(int divenr)
}
graphics()->plotDive();
information()->updateDiveInfo();
+ locationInformationWidget()->setLocationId(displayed_dive.dive_site_uuid);
}
void MainWindow::on_actionNew_triggered()
diff --git a/qt-ui/simplewidgets.cpp b/qt-ui/simplewidgets.cpp
index 97b39ee61..00f749780 100644
--- a/qt-ui/simplewidgets.cpp
+++ b/qt-ui/simplewidgets.cpp
@@ -666,19 +666,46 @@ LocationInformationWidget::LocationInformationWidget(QWidget *parent) : QGroupBo
void LocationInformationWidget::setLocationId(uint32_t uuid)
{
currentDs = get_dive_site_by_uuid(uuid);
- ui.diveSiteName->setText(currentDs->name);
- ui.diveSiteDescription->setText(currentDs->description);
- ui.diveSiteNotes->setPlainText(currentDs->notes);
- ui.diveSiteCoordinates->setText(printGPSCoords(currentDs->latitude.udeg, currentDs->longitude.udeg));
+ displayed_dive_site = *currentDs;
+ ui.diveSiteName->setText(displayed_dive_site.name);
+ ui.diveSiteDescription->setText(displayed_dive_site.description);
+ ui.diveSiteNotes->setPlainText(displayed_dive_site.notes);
+ ui.diveSiteCoordinates->setText(printGPSCoords(displayed_dive_site.latitude.udeg, displayed_dive_site.longitude.udeg));
+}
+
+void LocationInformationWidget::updateGpsCoordinates()
+{
+ ui.diveSiteCoordinates->setText(printGPSCoords(displayed_dive_site.latitude.udeg, displayed_dive_site.longitude.udeg));
+ MainWindow::instance()->setApplicationState("EditDiveSite");
}
void LocationInformationWidget::acceptChanges()
{
+ char *uiString;
+ currentDs->latitude = displayed_dive_site.latitude;
+ currentDs->longitude = displayed_dive_site.longitude;
+ uiString = ui.diveSiteName->text().toUtf8().data();
+ if (!same_string(uiString, currentDs->name)) {
+ free(currentDs->name);
+ currentDs->name = copy_string(uiString);
+ }
+ uiString = ui.diveSiteDescription->text().toUtf8().data();
+ if (!same_string(uiString, currentDs->description)) {
+ free(currentDs->description);
+ currentDs->description = copy_string(uiString);
+ }
+ uiString = ui.diveSiteNotes->document()->toPlainText().toUtf8().data();
+ if (!same_string(uiString, currentDs->notes)) {
+ free(currentDs->notes);
+ currentDs->notes = copy_string(uiString);
+ }
+ mark_divelist_changed(true);
emit informationManagementEnded();
}
void LocationInformationWidget::rejectChanges()
{
+ setLocationId(currentDs->uuid);
emit informationManagementEnded();
}
diff --git a/qt-ui/simplewidgets.h b/qt-ui/simplewidgets.h
index 9cedb8ad5..d0cb60508 100644
--- a/qt-ui/simplewidgets.h
+++ b/qt-ui/simplewidgets.h
@@ -229,6 +229,7 @@ public slots:
void showEvent(QShowEvent *);
void setLocationId(uint32_t uuid);
+ void updateGpsCoordinates(void);
signals:
void informationManagementEnded();