]> git.sur5r.net Git - minitube/commitdiff
fixing wrong item positions when moving more than one item down or up
authorLevente Polyak <levente@leventepolyak.de>
Fri, 28 May 2010 10:24:26 +0000 (12:24 +0200)
committerLevente Polyak <levente@leventepolyak.de>
Fri, 28 May 2010 10:24:26 +0000 (12:24 +0200)
- need to sort keys before moving, else we may end up with same result then before
- if moving items down respect the single static item 'search more'
- after moving set selected index to something human intuitive
- do not move items beyond boundary, just leave them where they are

src/ListModel.cpp
src/MediaView.cpp

index e7592ecbf096e3e17369554b3a5af7ba7bdfa7dc..2b0d12f0f10070d52868655faa2b1016cbeb9858 100755 (executable)
@@ -377,7 +377,6 @@ QModelIndex ListModel::indexForVideo(Video* video) {
 }
 
 void ListModel::move(QModelIndexList &indexes, bool up) {
-
     QList<Video*> movedVideos;
 
     foreach (QModelIndex index, indexes) {
@@ -387,10 +386,11 @@ void ListModel::move(QModelIndexList &indexes, bool up) {
         movedVideos << video;
     }
 
-    int counter = 1;
+    int end=up ? -1 : rowCount()-1, mod=up ? -1 : 1;
     foreach (Video *video, movedVideos) {
 
         int row = rowForVideo(video);
+        if (row+mod==end) { end=row; continue; }
         // qDebug() << "video row" << row;
         removeRows(row, 1, QModelIndex());
 
@@ -401,7 +401,6 @@ void ListModel::move(QModelIndexList &indexes, bool up) {
         videos.insert(row, video);
         endInsertRows();
 
-        counter++;
     }
 
     emit needSelectionFor(movedVideos);
index 8735f8aaae1ee59ca8f7c952c5bb0224551b0b2f..a33c23d6d3602390c79fbd52381d641758c51f9f 100644 (file)
@@ -375,14 +375,26 @@ void MediaView::selectionChanged(const QItemSelection & /*selected*/, const QIte
 
 void MediaView::moveUpSelected() {
     if (!listView->selectionModel()->hasSelection()) return;
+
     QModelIndexList indexes = listView->selectionModel()->selectedIndexes();
+    qStableSort(indexes.begin(), indexes.end());
     listModel->move(indexes, true);
+
+    // set current index after row moves to something more intuitive
+    int row = indexes.first().row();
+    listView->selectionModel()->setCurrentIndex(listModel->index(row>1?row:1), QItemSelectionModel::NoUpdate);
 }
 
 void MediaView::moveDownSelected() {
     if (!listView->selectionModel()->hasSelection()) return;
+
     QModelIndexList indexes = listView->selectionModel()->selectedIndexes();
+    qStableSort(indexes.begin(), indexes.end(), qGreater<QModelIndex>());
     listModel->move(indexes, false);
+
+    // set current index after row moves to something more intuitive (respect 1 static item on bottom)
+    int row = indexes.first().row()+1, max = listModel->rowCount() - 2;
+    listView->selectionModel()->setCurrentIndex(listModel->index(row>max?max:row), QItemSelectionModel::NoUpdate);
 }
 
 void MediaView::showVideoContextMenu(QPoint point) {