summaryrefslogtreecommitdiffstats
path: root/qt-ui/divelistview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qt-ui/divelistview.cpp')
-rw-r--r--qt-ui/divelistview.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp
index 378c8ba83..af2ff12b8 100644
--- a/qt-ui/divelistview.cpp
+++ b/qt-ui/divelistview.cpp
@@ -210,6 +210,70 @@ void DiveListView::selectDive(int i, bool scrollto, bool toggle)
if (scrollto)
scrollTo(idx, PositionAtCenter);
}
+
+void DiveListView::selectDives(const QList< int >& newDiveSelection)
+{
+ if(!newDiveSelection.count())
+ return;
+
+ disconnect(selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
+ this, SLOT(selectionChanged(QItemSelection,QItemSelection)));
+ disconnect(selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
+ this, SLOT(currentChanged(QModelIndex,QModelIndex)));
+
+ setAnimated(false);
+ collapseAll();
+ QSortFilterProxyModel *m = qobject_cast<QSortFilterProxyModel*>(model());
+ QItemSelectionModel::SelectionFlags flags = QItemSelectionModel::Select | QItemSelectionModel::Rows;
+
+ QItemSelection newDeselected = selectionModel()->selection();
+ QModelIndexList diveList;
+ QModelIndexList tripList;
+
+ int firstSelectedDive = -1;
+ /* context for temp. variables. */{
+ int i = 0;
+ struct dive *dive;
+ for_each_dive(i, dive){
+ dive->selected = newDiveSelection.contains(i) == true;
+ if(firstSelectedDive == -1 && dive->selected ){
+ firstSelectedDive = i;
+ }
+ }
+ }
+ select_dive(firstSelectedDive);
+ Q_FOREACH(int i, newDiveSelection){
+ diveList.append(m->match(m->index(0,0), DiveTripModel::DIVE_IDX,
+ i, 2, Qt::MatchRecursive).first());
+ }
+
+ Q_FOREACH(const QModelIndex& idx, diveList){
+ selectionModel()->select(idx, flags);
+ if(idx.parent().isValid()){
+ if(tripList.contains(idx.parent()))
+ continue;
+ tripList.append(idx.parent());
+ }
+ }
+
+ Q_FOREACH(const QModelIndex& idx, tripList){
+ if(!isExpanded(idx)){
+ expand(idx);
+ }
+ }
+ setAnimated(true);
+
+ QTreeView::selectionChanged(selectionModel()->selection(), newDeselected);
+ connect(selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
+ this, SLOT(selectionChanged(QItemSelection,QItemSelection)));
+ connect(selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
+ this, SLOT(currentChanged(QModelIndex,QModelIndex)));
+
+ Q_EMIT currentDiveChanged(selected_dive);
+ const QModelIndex& idx = m->match(m->index(0,0), DiveTripModel::DIVE_IDX,selected_dive, 2, Qt::MatchRecursive).first();
+ scrollTo(idx);
+}
+
void DiveListView::showSearchEdit()
{
searchBox->show();