Dive list: split reload() in reload() and setSortOrder()

The DiveListView code had a very fundamental problem with its
header: Each had its own idea of who is responsible for sorting.
Since we can't easily change QHeaderView, accept QHeaderView
as the authority on sort-column and order.

To make this possible, split the reload() function in two
distinct functions:
 - reload() reloads the model and sorts according to the
   current sort criterion.
 - setSortOrder() tells the header to display a certain
   sort criterion. If this is a new criterion, it will then
   emit a signal. In this signal, resort according to that
   criterion.

Thus, the actual sorting code has to be moved from the
headerClicked() to a new sortIndicatorChanged() slot.
Morover, the sorting of the QHeaderView has to be used.

Reported-by: Stefan Fuchs <sfuchs@gmx.de>
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2018-11-04 17:54:38 +01:00 committed by Dirk Hohndel
parent 236373b6ba
commit f2f18b4e16
4 changed files with 22 additions and 25 deletions

View file

@ -245,7 +245,7 @@ MainWindow::MainWindow() : QMainWindow(),
graphics->setEmptyState();
initialUiSetup();
readSettings();
diveList->reload(DiveTripModel::TREE);
diveList->reload();
diveList->reloadHeaderActions();
diveList->setFocus();
MapWidget::instance()->reload();
@ -494,7 +494,7 @@ void MainWindow::refreshDisplay(bool doRecreateDiveList)
void MainWindow::recreateDiveList()
{
diveList->reload(DiveTripModel::CURRENT);
diveList->reload();
TagFilterModel::instance()->repopulate();
BuddyFilterModel::instance()->repopulate();
LocationFilterModel::instance()->repopulate();
@ -704,7 +704,8 @@ void MainWindow::cleanUpEmpty()
mainTab->clearTabs();
mainTab->updateDiveInfo(true);
graphics->setEmptyState();
diveList->reload(DiveTripModel::TREE);
diveList->reload();
diveList->setSortOrder(DiveTripModel::NR, Qt::AscendingOrder);
MapWidget::instance()->reload();
if (!existing_filename)
setTitle();