diff options
-rw-r--r-- | desktop-widgets/divelistview.cpp | 36 | ||||
-rw-r--r-- | desktop-widgets/divelistview.h | 3 | ||||
-rw-r--r-- | desktop-widgets/simplewidgets.cpp | 1 | ||||
-rw-r--r-- | qt-models/divetripmodel.cpp | 10 | ||||
-rw-r--r-- | qt-models/filtermodels.cpp | 1 |
5 files changed, 28 insertions, 23 deletions
diff --git a/desktop-widgets/divelistview.cpp b/desktop-widgets/divelistview.cpp index 8e6885ee1..a6268413f 100644 --- a/desktop-widgets/divelistview.cpp +++ b/desktop-widgets/divelistview.cpp @@ -39,7 +39,6 @@ DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelec DiveTripModel *tripModel = new DiveTripModel(this); model->setSourceModel(tripModel); setModel(model); - connect(model, SIGNAL(layoutChanged()), this, SLOT(fixMessyQtModelBehaviour())); setSortingEnabled(false); setContextMenuPolicy(Qt::DefaultContextMenu); @@ -160,12 +159,34 @@ void DiveListView::restoreExpandedRows() setExpanded(model()->index(i, 0), true); setAnimated(true); } -void DiveListView::fixMessyQtModelBehaviour() + +// If the model is reset, check which items are trip-items and expand the first column +void DiveListView::reset() { + // First, let the QTreeView do its thing. + QTreeView::reset(); + QAbstractItemModel *m = model(); - for (int i = 0; i < model()->rowCount(); i++) + for (int i = 0; i < m->rowCount(); ++i) { if (m->rowCount(m->index(i, 0)) != 0) setFirstColumnSpanned(i, QModelIndex(), true); + } +} + +// If rows are added, check which of these rows is a trip and expand the first column +void DiveListView::rowsInserted(const QModelIndex &parent, int start, int end) +{ + // First, let the QTreeView do its thing. + QTreeView::rowsInserted(parent, start, end); + + // Now check for each inserted row whether this is a trip and expand the first column + if (parent.isValid()) // Trips don't have a parent + return; + QAbstractItemModel *m = model(); + for (int i = start; i <= end; ++i) { + if (m->rowCount(m->index(i, 0)) != 0) + setFirstColumnSpanned(i, QModelIndex(), true); + } } // this only remembers dives that were selected, not trips @@ -435,9 +456,6 @@ void DiveListView::reload(DiveTripModel::Layout layout, bool forceSort) setAnimated(true); } } - if (currentLayout == DiveTripModel::TREE) { - fixMessyQtModelBehaviour(); - } } void DiveListView::reloadHeaderActions() @@ -627,7 +645,6 @@ void DiveListView::merge_trip(const QModelIndex &a, int offset) combine_trips(trip_a, trip_b); rememberSelection(); reload(currentLayout, false); - fixMessyQtModelBehaviour(); restoreSelection(); mark_divelist_changed(true); //TODO: emit a signal to signalize that the divelist changed? @@ -658,7 +675,6 @@ void DiveListView::removeFromTrip() rememberSelection(); reload(currentLayout, false); - fixMessyQtModelBehaviour(); restoreSelection(); mark_divelist_changed(true); } @@ -679,7 +695,6 @@ void DiveListView::newTripAbove() } trip->expanded = 1; reload(currentLayout, false); - fixMessyQtModelBehaviour(); mark_divelist_changed(true); restoreSelection(); } @@ -730,7 +745,6 @@ void DiveListView::addToTrip(int delta) reload(currentLayout, false); restoreSelection(); - fixMessyQtModelBehaviour(); } void DiveListView::markDiveInvalid() @@ -756,7 +770,6 @@ void DiveListView::markDiveInvalid() // select top dive that isn't marked invalid rememberSelection(); } - fixMessyQtModelBehaviour(); } void DiveListView::deleteDive() @@ -787,7 +800,6 @@ void DiveListView::deleteDive() selectDive(lastDiveNr); rememberSelection(); } - fixMessyQtModelBehaviour(); } void DiveListView::contextMenuEvent(QContextMenuEvent *event) diff --git a/desktop-widgets/divelistview.h b/desktop-widgets/divelistview.h index e70f96a72..69db31a9a 100644 --- a/desktop-widgets/divelistview.h +++ b/desktop-widgets/divelistview.h @@ -45,7 +45,8 @@ slots: void removeFromTrip(); void deleteDive(); void markDiveInvalid(); - void fixMessyQtModelBehaviour(); + void rowsInserted(const QModelIndex &parent, int start, int end) override; + void reset() override; void mergeTripAbove(); void mergeTripBelow(); void newTripAbove(); diff --git a/desktop-widgets/simplewidgets.cpp b/desktop-widgets/simplewidgets.cpp index f6b7a3fa1..4bc36daa7 100644 --- a/desktop-widgets/simplewidgets.cpp +++ b/desktop-widgets/simplewidgets.cpp @@ -174,7 +174,6 @@ void RenumberDialog::buttonClicked(QAbstractButton *button) UndoRenumberDives *undoCommand = new UndoRenumberDives(renumberedDives); MainWindow::instance()->undoStack->push(undoCommand); - MainWindow::instance()->dive_list()->fixMessyQtModelBehaviour(); mark_divelist_changed(true); MainWindow::instance()->dive_list()->restoreSelection(); } diff --git a/qt-models/divetripmodel.cpp b/qt-models/divetripmodel.cpp index fd8a2f08a..384da6b89 100644 --- a/qt-models/divetripmodel.cpp +++ b/qt-models/divetripmodel.cpp @@ -584,10 +584,7 @@ void DiveTripModel::setupModelData() { int i = dive_table.nr; - if (rowCount()) { - beginRemoveRows(QModelIndex(), 0, rowCount() - 1); - endRemoveRows(); - } + beginResetModel(); if (autogroup) autogroup_dives(); @@ -621,10 +618,7 @@ void DiveTripModel::setupModelData() tripItem->children.push_back(diveItem); } - if (rowCount()) { - beginInsertRows(QModelIndex(), 0, rowCount() - 1); - endInsertRows(); - } + endResetModel(); } DiveTripModel::Layout DiveTripModel::layout() const diff --git a/qt-models/filtermodels.cpp b/qt-models/filtermodels.cpp index 34345f381..12d755dc1 100644 --- a/qt-models/filtermodels.cpp +++ b/qt-models/filtermodels.cpp @@ -430,7 +430,6 @@ void MultiFilterSortModel::myInvalidate() divesDisplayed = 0; invalidateFilter(); - MainWindow::instance()->dive_list()->fixMessyQtModelBehaviour(); // first make sure the trips are no longer shown as selected // (but without updating the selection state of the dives... this just cleans |