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>
This commit is contained in:
Dirk Hohndel 2013-09-22 22:24:28 -07:00
parent 6ce5704435
commit dba16202c4
3 changed files with 28 additions and 13 deletions

View file

@ -7,6 +7,7 @@
#include "divelistview.h" #include "divelistview.h"
#include "models.h" #include "models.h"
#include "modeldelegates.h" #include "modeldelegates.h"
#include "mainwindow.h"
#include "../display.h" #include "../display.h"
#include <QApplication> #include <QApplication>
#include <QHeaderView> #include <QHeaderView>
@ -72,7 +73,7 @@ void DiveListView::selectDive(struct dive *dive, bool scrollto, bool toggle)
expand(parent); expand(parent);
flags = toggle ? QItemSelectionModel::Toggle : QItemSelectionModel::Select; flags = toggle ? QItemSelectionModel::Toggle : QItemSelectionModel::Select;
flags |= QItemSelectionModel::Rows; flags |= QItemSelectionModel::Rows;
selectionModel()->select( idx, flags); selectionModel()->select(idx, flags);
if (scrollto) if (scrollto)
scrollTo(idx, PositionAtCenter); scrollTo(idx, PositionAtCenter);
} }
@ -330,9 +331,19 @@ void DiveListView::removeFromTrip()
void DiveListView::deleteDive() void DiveListView::deleteDive()
{ {
int nr;
struct dive *d = (struct dive *) contextMenuIndex.data(DiveTripModel::DIVE_ROLE).value<void*>(); 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)); 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); reload(currentLayout, false);
} }

View file

@ -134,6 +134,19 @@ void MainWindow::on_actionSaveAs_triggered()
{ {
file_save_as(); 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() void MainWindow::on_actionClose_triggered()
{ {
if (unsaved_changes() && (askSaveChanges() == FALSE)) if (unsaved_changes() && (askSaveChanges() == FALSE))
@ -146,17 +159,7 @@ void MainWindow::on_actionClose_triggered()
/* clear the selection and the statistics */ /* clear the selection and the statistics */
selected_dive = -1; selected_dive = -1;
//WARNING: Port this to Qt. cleanUpEmpty();
//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);
mark_divelist_changed(FALSE); mark_divelist_changed(FALSE);
clear_events(); clear_events();

View file

@ -52,6 +52,7 @@ public:
void enableDcShortcuts(); void enableDcShortcuts();
void loadFiles(const QStringList files); void loadFiles(const QStringList files);
void importFiles(const QStringList importFiles); void importFiles(const QStringList importFiles);
void cleanUpEmpty();
private slots: private slots:
/* file menu action */ /* file menu action */