setools/setoolsgui/listview.py
Chris PeBenito 8e082f70cf Replace license text in sources with SPDX license indentifiers.
Signed-off-by: Chris PeBenito <pebenito@ieee.org>
2021-11-20 14:12:15 -05:00

53 lines
1.6 KiB
Python

# Copyright 2016, Chris PeBenito <pebenito@ieee.org>
#
# SPDX-License-Identifier: LGPL-2.1-only
#
#
import logging
from collections import defaultdict
from PyQt5.QtCore import Qt, QItemSelectionModel
from PyQt5.QtGui import QKeySequence
from PyQt5.QtWidgets import QAbstractItemView, QListView
class SEToolsListView(QListView):
"""QListView class extended for SETools use."""
def __init__(self, parent):
super(SEToolsListView, self).__init__(parent)
self.log = logging.getLogger(__name__)
def invert(self):
"""Invert the selection."""
if self.selectionMode() != QAbstractItemView.ExtendedSelection and \
self.selectionMode() != QAbstractItemView.MultiSelection:
self.log.debug("Attempted to invert list {0} which doesn't have multiselect.".
format(self.objectName()))
return
selection_model = self.selectionModel()
model = self.model()
for row in range(model.rowCount()):
index = model.createIndex(row, 0)
selection_model.select(index, QItemSelectionModel.Toggle)
def selection(self, qt_role=Qt.UserRole):
"""
Generator which returns the selection.
Parameter:
qt_role The Qt model role. Default is Qt.UserRole.
Yield: tuple(row, data)
row The row number of the selection.
data The data for the row, for the specified Qt role.
"""
model = self.model()
for index in self.selectionModel().selectedIndexes():
yield index.row(), model.data(index, qt_role)