diff options
author | Tomaz Canabrava <tomaz.canabrava@intel.com> | 2014-05-28 19:03:10 -0300 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2014-05-28 17:03:47 -0700 |
commit | c3306c39f13519441ba2ebd1bbe068fc910e0592 (patch) | |
tree | ec686280ff65e29639a3f5b9992ea3029b0cdb9a | |
parent | 86d7f6ace06adf13fe5045a217c4f264356a01df (diff) | |
download | subsurface-c3306c39f13519441ba2ebd1bbe068fc910e0592.tar.gz |
Fix crash on adding / removing a dives from add menu
This patch removes some inconsistencies that were happening on the add
dive / cancel actions. a bit of legacy code from the old system was still
in, which made things quite... EXPLOSIVE.
This fixes restoring the selection only if we have a selection and not
deleting the temporary dive twice.
Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | qt-ui/divelistview.cpp | 7 | ||||
-rw-r--r-- | qt-ui/divelistview.h | 1 | ||||
-rw-r--r-- | qt-ui/maintab.cpp | 35 |
3 files changed, 22 insertions, 21 deletions
diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp index a6cca47b6..8f5444804 100644 --- a/qt-ui/divelistview.cpp +++ b/qt-ui/divelistview.cpp @@ -29,7 +29,7 @@ #include "../qthelper.h" DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelection(false), sortColumn(0), - currentOrder(Qt::DescendingOrder), searchBox(this), dontEmitDiveChangedSignal(false) + currentOrder(Qt::DescendingOrder), searchBox(this), dontEmitDiveChangedSignal(false), selectionSaved(false) { setItemDelegate(new DiveListDelegate(this)); setUniformRowHeights(true); @@ -147,10 +147,15 @@ void DiveListView::rememberSelection() if (d) selectedDives.insert(d->divetrip, get_divenr(d)); } + selectionSaved = true; } void DiveListView::restoreSelection() { + if (!selectionSaved) + return; + + selectionSaved = false; unselectDives(); Q_FOREACH (dive_trip_t *trip, selectedDives.keys()) { QList<int> divesOnTrip = getDivesInTrip(trip); diff --git a/qt-ui/divelistview.h b/qt-ui/divelistview.h index 23ca1cc42..320bf954f 100644 --- a/qt-ui/divelistview.h +++ b/qt-ui/divelistview.h @@ -65,6 +65,7 @@ private: QLineEdit searchBox; QModelIndex contextMenuIndex; bool dontEmitDiveChangedSignal; + bool selectionSaved; /* if dive_trip_t is null, there's no problem. */ QMultiHash<dive_trip_t *, int> selectedDives; diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index 850528192..ec3c38996 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -804,24 +804,27 @@ void MainTab::rejectChanges() if (lastMode == ADD) { // clean up DivePlannerPointsModel::instance()->cancelPlan(); + hideMessage(); + resetPallete(); + return; } else if (lastMode == MANUALLY_ADDED_DIVE) { // when we tried to edit a manually added dive, we destroyed // the dive we edited, so let's just restore it from backup DivePlannerPointsModel::instance()->restoreBackupDive(); } struct dive *curr = current_dive; - ui.notes->setText(notesBackup[curr].notes); - ui.location->setText(notesBackup[curr].location); - ui.buddy->setText(notesBackup[curr].buddy); - ui.suit->setText(notesBackup[curr].suit); - ui.divemaster->setText(notesBackup[curr].divemaster); - ui.rating->setCurrentStars(notesBackup[curr].rating); - ui.visibility->setCurrentStars(notesBackup[curr].visibility); - ui.airtemp->setText(notesBackup[curr].airtemp); - ui.watertemp->setText(notesBackup[curr].watertemp); - ui.tagWidget->setText(notesBackup[curr].tags); - // it's a little harder to do the right thing for the date time widget if (curr) { + ui.notes->setText(notesBackup[curr].notes); + ui.location->setText(notesBackup[curr].location); + ui.buddy->setText(notesBackup[curr].buddy); + ui.suit->setText(notesBackup[curr].suit); + ui.divemaster->setText(notesBackup[curr].divemaster); + ui.rating->setCurrentStars(notesBackup[curr].rating); + ui.visibility->setCurrentStars(notesBackup[curr].visibility); + ui.airtemp->setText(notesBackup[curr].airtemp); + ui.watertemp->setText(notesBackup[curr].watertemp); + ui.tagWidget->setText(notesBackup[curr].tags); + // it's a little harder to do the right thing for the date time widget ui.dateTimeEdit->setDateTime(QDateTime::fromString(notesBackup[curr].datetime)); } else { QLineEdit *le = ui.dateTimeEdit->findChild<QLineEdit *>(); @@ -854,12 +857,6 @@ void MainTab::rejectChanges() } } updateGpsCoordinates(curr); - if (lastMode == ADD) { - delete_single_dive(selected_dive); - MainWindow::instance()->dive_list()->reload(DiveTripModel::CURRENT); - MainWindow::instance()->dive_list()->restoreSelection(); - emit addDiveFinished(); - } if (selected_dive >= 0) { multiEditEquipmentPlaceholder = *get_dive(selected_dive); cylindersModel->setDive(&multiEditEquipmentPlaceholder); @@ -873,17 +870,15 @@ void MainTab::rejectChanges() hideMessage(); MainWindow::instance()->dive_list()->setEnabled(true); - notesBackup.clear(); resetPallete(); MainWindow::instance()->globe()->reload(); - if (lastMode == ADD || lastMode == MANUALLY_ADDED_DIVE) { + if (lastMode == MANUALLY_ADDED_DIVE) { // more clean up updateDiveInfo(selected_dive); MainWindow::instance()->showProfile(); // we already reloaded the divelist above, so don't recreate it or we'll lose the selection MainWindow::instance()->refreshDisplay(false); } - DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::NOTHING); MainWindow::instance()->dive_list()->setFocus(); // the user could have edited the location and then canceled the edit // let's get the correct location back in view |