5
5
from AnyQt .QtWidgets import QListView
6
6
from AnyQt .QtCore import (
7
7
Qt , QTimer , QSortFilterProxyModel , QItemSelection , QItemSelectionModel ,
8
- QMimeData
8
+ QMimeData , QAbstractItemModel
9
9
)
10
10
11
11
from Orange .widgets import gui , widget
@@ -411,12 +411,20 @@ def selected_rows(view):
411
411
rows = [model .mapToSource (r ) for r in rows ]
412
412
return [r .row () for r in rows ]
413
413
414
- def move_rows (self , view , rows , offset ):
415
- model = view .model ()
416
- newrows = [min (max (0 , row + offset ), len (model ) - 1 ) for row in rows ]
414
+ def move_rows (self , view : QListView , offset : int , roles = (Qt .EditRole ,)):
415
+ rows = [idx .row () for idx in view .selectionModel ().selectedRows ()]
416
+ model = view .model () # type: QAbstractItemModel
417
+ rowcount = model .rowCount ()
418
+ newrows = [min (max (0 , row + offset ), rowcount - 1 ) for row in rows ]
419
+
420
+ def itemData (index ):
421
+ return {role : model .data (index , role ) for role in roles }
417
422
418
423
for row , newrow in sorted (zip (rows , newrows ), reverse = offset > 0 ):
419
- model [row ], model [newrow ] = model [newrow ], model [row ]
424
+ d1 = itemData (model .index (row , 0 ))
425
+ d2 = itemData (model .index (newrow , 0 ))
426
+ model .setItemData (model .index (row , 0 ), d2 )
427
+ model .setItemData (model .index (newrow , 0 ), d1 )
420
428
421
429
selection = QItemSelection ()
422
430
for nrow in newrows :
@@ -427,13 +435,11 @@ def move_rows(self, view, rows, offset):
427
435
428
436
self .commit ()
429
437
430
- def move_up (self , view ):
431
- selected = self .selected_rows (view )
432
- self .move_rows (view , selected , - 1 )
438
+ def move_up (self , view : QListView ):
439
+ self .move_rows (view , - 1 )
433
440
434
- def move_down (self , view ):
435
- selected = self .selected_rows (view )
436
- self .move_rows (view , selected , 1 )
441
+ def move_down (self , view : QListView ):
442
+ self .move_rows (view , 1 )
437
443
438
444
def move_selected (self , view ):
439
445
if self .selected_rows (view ):
0 commit comments