diff -r a081458cc57b -r 144a6b854f70 eric7/EricWidgets/EricListView.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/EricWidgets/EricListView.py Sat May 22 19:58:24 2021 +0200 @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing specialized list views. +""" + +from PyQt6.QtCore import Qt, QItemSelectionModel +from PyQt6.QtWidgets import QListView + + +class EricListView(QListView): + """ + Class implementing a list view supporting removal of entries. + """ + def keyPressEvent(self, evt): + """ + Protected method implementing special key handling. + + @param evt reference to the event (QKeyEvent) + """ + if ( + evt.key() in [Qt.Key.Key_Delete, Qt.Key.Key_Backspace] and + self.model() is not None + ): + self.removeSelected() + evt.setAccepted(True) + else: + super().keyPressEvent(evt) + + def removeSelected(self): + """ + Public method to remove the selected entries. + """ + if self.model() is None or self.selectionModel() is None: + # no models available + return + + row = 0 + selectedRows = self.selectionModel().selectedRows() + for selectedRow in reversed(selectedRows): + row = selectedRow.row() + self.model().removeRow(row, self.rootIndex()) + + idx = self.model().index(row, 0, self.rootIndex()) + if not idx.isValid(): + idx = self.model().index(row - 1, 0, self.rootIndex()) + self.selectionModel().select( + idx, + QItemSelectionModel.SelectionFlag.SelectCurrent | + QItemSelectionModel.SelectionFlag.Rows) + self.setCurrentIndex(idx) + + def removeAll(self): + """ + Public method to clear the view. + """ + if self.model() is not None: + self.model().removeRows(0, self.model().rowCount(self.rootIndex()), + self.rootIndex())