1
0
mirror of https://github.com/arsenetar/dupeguru.git synced 2026-01-22 14:41:39 +00:00

[#138] Added drag & drop criteria re-ordering capabilities to the re-prioritization panel.

This commit is contained in:
Virgil Dupras
2011-09-09 18:24:17 -04:00
parent b65c9b8c9a
commit 3ec2a3ef81
4 changed files with 71 additions and 4 deletions

View File

@@ -6,14 +6,48 @@
# which should be included with this package. The terms are also available at
# http://www.hardcoded.net/licenses/bsd_license
from PyQt4.QtCore import Qt
from PyQt4.QtCore import Qt, QMimeData, QByteArray
from PyQt4.QtGui import (QDialog, QVBoxLayout, QHBoxLayout, QPushButton, QComboBox, QListView,
QDialogButtonBox)
QDialogButtonBox, QAbstractItemView)
from hscommon.trans import tr
from qtlib.selectable_list import ComboboxModel, ListviewModel
from core.gui.prioritize_dialog import PrioritizeDialog as PrioritizeDialogModel
MIME_INDEXES = 'application/dupeguru.rowindexes'
class PrioritizationList(ListviewModel):
def flags(self, index):
if not index.isValid():
return Qt.ItemIsEnabled | Qt.ItemIsDropEnabled
return Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsDragEnabled
#--- Drag & Drop
def dropMimeData(self, mimeData, action, row, column, parentIndex):
if not mimeData.hasFormat(MIME_INDEXES):
return False
# Since we only drop in between items, parentIndex must be invalid, and we use the row arg
# to know where the drop took place.
if parentIndex.isValid():
return False
strMimeData = bytes(mimeData.data(MIME_INDEXES)).decode()
indexes = list(map(int, strMimeData.split(',')))
self.model.move_indexes(indexes, row)
return True
def mimeData(self, indexes):
rows = {str(index.row()) for index in indexes}
data = ','.join(rows)
mimeData = QMimeData()
mimeData.setData(MIME_INDEXES, QByteArray(data.encode()))
return mimeData
def mimeTypes(self):
return [MIME_INDEXES]
def supportedDropActions(self):
return Qt.MoveAction
class PrioritizeDialog(QDialog):
def __init__(self, parent, app):
flags = Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowSystemMenuHint
@@ -23,7 +57,7 @@ class PrioritizeDialog(QDialog):
self.model = PrioritizeDialogModel(view=self, app=app)
self.categoryList = ComboboxModel(model=self.model.category_list, view=self.categoryCombobox)
self.criteriaList = ListviewModel(model=self.model.criteria_list, view=self.criteriaListView)
self.prioritizationList = ListviewModel(model=self.model.prioritization_list, view=self.prioritizationListView)
self.prioritizationList = PrioritizationList(model=self.model.prioritization_list, view=self.prioritizationListView)
self.addCriteriaButton.clicked.connect(self.model.add_selected)
self.buttonBox.accepted.connect(self.accept)
@@ -38,6 +72,10 @@ class PrioritizeDialog(QDialog):
self.criteriaListView = QListView()
self.addCriteriaButton = QPushButton("-->")
self.prioritizationListView = QListView()
self.prioritizationListView.setAcceptDrops(True)
self.prioritizationListView.setDragEnabled(True)
self.prioritizationListView.setDragDropMode(QAbstractItemView.InternalMove)
self.prioritizationListView.setSelectionBehavior(QAbstractItemView.SelectRows)
self.buttonBox = QDialogButtonBox()
self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok)