summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2015-02-13 12:38:56 -0800
committerGravatar Dirk Hohndel <dirk@hohndel.org>2015-02-13 14:27:35 -0800
commit32ad046f5681ad02e3f9842075447e880145267d (patch)
tree4679bac9d6f20acbecebb20a8a05a634534c1808
parent06e578424e272b1c500c2a9e79b4367465fb4ac8 (diff)
downloadsubsurface-32ad046f5681ad02e3f9842075447e880145267d.tar.gz
Allow editing of dive sites
And hook things up when double clicking the globe. The user experience isn't consistent with what we do on the main tab (i.e., no coloring of fields that are changed), but it seems to work. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-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();