Merge pull request #758 from serg-z/serg-z/prioritize-dialog-multi-selections

Prioritize dialog: adding/removing multiple items, adding/removing on double clicking an item, drag-n-drop fix
This commit is contained in:
Andrew Senetar 2021-01-11 18:50:15 -06:00 committed by GitHub
commit 421a58a61c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 3 deletions

View File

@ -72,13 +72,15 @@ class PrioritizeDialog(GUIObject):
# Add selected criteria in criteria_list to prioritization_list. # Add selected criteria in criteria_list to prioritization_list.
if self.criteria_list.selected_index is None: if self.criteria_list.selected_index is None:
return return
crit = self.criteria[self.criteria_list.selected_index] for i in self.criteria_list.selected_indexes:
self.prioritizations.append(crit) crit = self.criteria[i]
del crit self.prioritizations.append(crit)
del crit
self.prioritization_list[:] = [crit.display for crit in self.prioritizations] self.prioritization_list[:] = [crit.display for crit in self.prioritizations]
def remove_selected(self): def remove_selected(self):
self.prioritization_list.remove_selected() self.prioritization_list.remove_selected()
self.prioritization_list.select([])
def perform_reprioritization(self): def perform_reprioritization(self):
self.app.reprioritize_groups(self._sort_key) self.app.reprioritize_groups(self._sort_key)

View File

@ -47,9 +47,16 @@ class PrioritizationList(ListviewModel):
# to know where the drop took place. # to know where the drop took place.
if parentIndex.isValid(): if parentIndex.isValid():
return False return False
# "When row and column are -1 it means that the dropped data should be considered as
# dropped directly on parent."
# Moving items to row -1 would put them before the last item. Fix the row to drop the
# dragged items after the last item.
if row < 0:
row = len(self.model) - 1
strMimeData = bytes(mimeData.data(MIME_INDEXES)).decode() strMimeData = bytes(mimeData.data(MIME_INDEXES)).decode()
indexes = list(map(int, strMimeData.split(","))) indexes = list(map(int, strMimeData.split(",")))
self.model.move_indexes(indexes, row) self.model.move_indexes(indexes, row)
self.view.selectionModel().clearSelection()
return True return True
def mimeData(self, indexes): def mimeData(self, indexes):
@ -84,7 +91,9 @@ class PrioritizeDialog(QDialog):
self.model.view = self self.model.view = self
self.addCriteriaButton.clicked.connect(self.model.add_selected) self.addCriteriaButton.clicked.connect(self.model.add_selected)
self.criteriaListView.doubleClicked.connect(self.model.add_selected)
self.removeCriteriaButton.clicked.connect(self.model.remove_selected) self.removeCriteriaButton.clicked.connect(self.model.remove_selected)
self.prioritizationListView.doubleClicked.connect(self.model.remove_selected)
self.buttonBox.accepted.connect(self.accept) self.buttonBox.accepted.connect(self.accept)
self.buttonBox.rejected.connect(self.reject) self.buttonBox.rejected.connect(self.reject)
@ -102,6 +111,7 @@ class PrioritizeDialog(QDialog):
self.promptLabel.setWordWrap(True) self.promptLabel.setWordWrap(True)
self.categoryCombobox = QComboBox() self.categoryCombobox = QComboBox()
self.criteriaListView = QListView() self.criteriaListView = QListView()
self.criteriaListView.setSelectionMode(QAbstractItemView.ExtendedSelection)
self.addCriteriaButton = QPushButton( self.addCriteriaButton = QPushButton(
self.style().standardIcon(QStyle.SP_ArrowRight), "" self.style().standardIcon(QStyle.SP_ArrowRight), ""
) )
@ -113,6 +123,7 @@ class PrioritizeDialog(QDialog):
self.prioritizationListView.setDragEnabled(True) self.prioritizationListView.setDragEnabled(True)
self.prioritizationListView.setDragDropMode(QAbstractItemView.InternalMove) self.prioritizationListView.setDragDropMode(QAbstractItemView.InternalMove)
self.prioritizationListView.setSelectionBehavior(QAbstractItemView.SelectRows) self.prioritizationListView.setSelectionBehavior(QAbstractItemView.SelectRows)
self.prioritizationListView.setSelectionMode(QAbstractItemView.ExtendedSelection)
self.buttonBox = QDialogButtonBox() self.buttonBox = QDialogButtonBox()
self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok)