aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2013-09-22 22:24:28 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-09-22 22:24:28 -0700
commitdba16202c498d4432bc20181b0084f54b7abdba1 (patch)
tree1d7153e619313453e7f57142620ad3f1fa454284
parent6ce5704435a761aeb7a8b7cb7bc9049ed3ee4ac9 (diff)
downloadsubsurface-dba16202c498d4432bc20181b0084f54b7abdba1.tar.gz
Correctly handle empty dive list after delete
Things need to be cleared out and disabled. But fixing this bug leaves another issue - while the newly selected dive after a delete acts as if it was selected, it doesn't show up as selected in the dive list. Reported-by: Henrik Brautaset Aronsen <subsurface@henrik.synth.no> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--qt-ui/divelistview.cpp15
-rw-r--r--qt-ui/mainwindow.cpp25
-rw-r--r--qt-ui/mainwindow.h1
3 files changed, 28 insertions, 13 deletions
diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp
index 2e40678ad..639e988fd 100644
--- a/qt-ui/divelistview.cpp
+++ b/qt-ui/divelistview.cpp
@@ -7,6 +7,7 @@
#include "divelistview.h"
#include "models.h"
#include "modeldelegates.h"
+#include "mainwindow.h"
#include "../display.h"
#include <QApplication>
#include <QHeaderView>
@@ -72,7 +73,7 @@ void DiveListView::selectDive(struct dive *dive, bool scrollto, bool toggle)
expand(parent);
flags = toggle ? QItemSelectionModel::Toggle : QItemSelectionModel::Select;
flags |= QItemSelectionModel::Rows;
- selectionModel()->select( idx, flags);
+ selectionModel()->select(idx, flags);
if (scrollto)
scrollTo(idx, PositionAtCenter);
}
@@ -330,9 +331,19 @@ void DiveListView::removeFromTrip()
void DiveListView::deleteDive()
{
+ int nr;
struct dive *d = (struct dive *) contextMenuIndex.data(DiveTripModel::DIVE_ROLE).value<void*>();
- if (d)
+ if (d) {
+ nr = get_divenr(d);
delete_single_dive(get_index_for_dive(d));
+ if (amount_selected == 0) {
+ if (nr > 0)
+ select_dive(nr - 1);
+ else
+ mainWindow()->cleanUpEmpty();
+ }
+ }
+ mainWindow()->refreshDisplay();
reload(currentLayout, false);
}
diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index 9fa4a35dc..cb65b3dd2 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -134,6 +134,19 @@ void MainWindow::on_actionSaveAs_triggered()
{
file_save_as();
}
+
+void MainWindow::cleanUpEmpty()
+{
+ ui->InfoWidget->clearStats();
+ ui->InfoWidget->clearInfo();
+ ui->InfoWidget->clearEquipment();
+ ui->InfoWidget->updateDiveInfo(-1);
+ ui->ProfileWidget->clear();
+ ui->ListWidget->reload(DiveTripModel::TREE);
+ ui->globe->reload();
+ setTitle(MWTF_DEFAULT);
+}
+
void MainWindow::on_actionClose_triggered()
{
if (unsaved_changes() && (askSaveChanges() == FALSE))
@@ -146,17 +159,7 @@ void MainWindow::on_actionClose_triggered()
/* clear the selection and the statistics */
selected_dive = -1;
- //WARNING: Port this to Qt.
- //process_selected_dives();
-
- ui->InfoWidget->clearStats();
- ui->InfoWidget->clearInfo();
- ui->InfoWidget->clearEquipment();
- ui->InfoWidget->updateDiveInfo(-1);
- ui->ProfileWidget->clear();
- ui->ListWidget->reload(DiveTripModel::TREE);
- ui->globe->reload();
- setTitle(MWTF_DEFAULT);
+ cleanUpEmpty();
mark_divelist_changed(FALSE);
clear_events();
diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h
index b30f10a03..3d5b9ab4a 100644
--- a/qt-ui/mainwindow.h
+++ b/qt-ui/mainwindow.h
@@ -52,6 +52,7 @@ public:
void enableDcShortcuts();
void loadFiles(const QStringList files);
void importFiles(const QStringList importFiles);
+ void cleanUpEmpty();
private slots:
/* file menu action */