@@ -237,6 +237,7 @@ def __init__(self, parent):
237237 self .mousePressed = False
238238 self .shiftPressed = False
239239 self .ctrlPressed = False
240+ self .keySelectAll = False
240241 self .trackingCol = 0
241242 self ._rows_selection = {}
242243 # first and last row selected with shift pressed
@@ -278,7 +279,7 @@ def getRowCells(self, row):
278279 return cols
279280
280281 def clear (self ):
281- pass
282+ self . keySelectAll = False
282283
283284 def refresh (self ):
284285 self .calculateRowsInViewport ()
@@ -330,11 +331,11 @@ def mouseMoveEvent(self, event):
330331 row = self .rowAt (pos .y ())
331332 item = self .indexAt (pos )
332333
333- if item == None :
334+ if item is None :
334335 return
335336
336337 clickedItem = self .model ().index (row , self .trackingCol )
337- if clickedItem .data () == None :
338+ if clickedItem .data () is None :
338339 return
339340 self .handleMouseMoveEvent (row , clickedItem , self .selectionModel ().isRowSelected (row , QModelIndex ()))
340341
@@ -344,22 +345,26 @@ def mouseMoveEvent(self, event):
344345
345346 # save the selected index, to preserve selection when moving around.
346347 def mousePressEvent (self , event ):
347- # we need to call upper class to paint selections properly
348- super ().mousePressEvent (event )
349348 rightBtnPressed = event .button () != Qt .MouseButton .LeftButton
349+ # if selectAll has been pressed, do not discard selection
350+ if self .keySelectAll and rightBtnPressed :
351+ return
350352
353+ # we need to call upper class to paint selections properly
354+ super ().mousePressEvent (event )
355+ self .keySelectAll = False
351356 if not self .shiftPressed :
352357 self ._first_row_selected = None
353358 self ._last_row_selected = None
354359
355360 pos = event .pos ()
356361 item = self .indexAt (pos )
357362 row = self .rowAt (pos .y ())
358- if item == None :
363+ if item is None :
359364 return
360365
361366 clickedItem = self .model ().index (row , self .trackingCol )
362- if clickedItem .data () == None :
367+ if clickedItem .data () is None :
363368 return
364369
365370 self .mousePressed = not rightBtnPressed
@@ -439,11 +444,11 @@ def handleMouseMoveEvent(self, row, clickedItem, selected):
439444 # handle scrolling the view while dragging the mouse.
440445 if self .mousePressed :
441446 scrollPos = self .scrollViewport (row )
442- if scrollPos == None :
447+ if scrollPos is None :
443448 return
444449
445450 nextItem = self .model ().index (scrollPos , self .trackingCol )
446- if nextItem == None or nextItem .data () == None :
451+ if nextItem is None or nextItem .data () is None :
447452 return
448453 if clickedItem .data () not in self ._rows_selection .keys ():
449454 self ._rows_selection [nextItem .data ()] = self .getRowCells (nextItem .row ())
@@ -481,10 +486,14 @@ def onRowCountChanged(self):
481486 self .model ().refreshViewport (self .vScrollBar .value (), self .maxRowsInViewport , force = self .forceViewRefresh ())
482487
483488 def clearSelection (self ):
489+ self .keySelectAll = False
484490 self .selectionModel ().reset ()
485491 self .selectionModel ().clearCurrentIndex ()
486492
487493 def selectedRows (self , limit = "" ):
494+ if self .keySelectAll :
495+ return self .model ().dumpRows (nolimits = True )
496+
488497 model = self .selectionModel ()
489498 curModel = self .model ()
490499 selection = model .selectedRows ()
@@ -595,6 +604,8 @@ def eventFilter(self, obj, event):
595604 self .shiftPressed = False
596605 if event .key () == Qt .Key .Key_Control :
597606 self .ctrlPressed = False
607+ if event .key () == Qt .Key .Key_A :
608+ self .keySelectAll = True if self .ctrlPressed else False
598609
599610 elif event .type () == QEvent .Type .KeyPress :
600611 # FIXME: setValue() does not update the scrollbars correctly in
0 commit comments