Changeset bcfafe423cfd…
Parent fc40752a5a78…
by
Changes to 2 files · Browse files at bcfafe423cfd Showing diff from parent fc40752a5a78 Diff from another changeset...
@@ -46,6 +46,7 @@ self.setAcceptDrops(True)
self.setAutoScroll(True)
self.setDragDropMode(QAbstractItemView.DragDrop)
+ self.setDefaultDropAction(Qt.MoveAction)
self.setDropIndicatorShown(True)
self.setEditTriggers(QAbstractItemView.DoubleClicked)
self.setSelectionBehavior(QAbstractItemView.SelectRows)
@@ -94,6 +95,27 @@
return index, group, row
+ def startDrag(self, supportedActions):
+ indexes = self.selectedIndexes()
+ # Make sure that all selected items are of the same type
+ if len(indexes) == 0:
+ # Nothing to drag!
+ return
+
+ # Make sure that all items that we are dragging are of the same type
+ firstItem = indexes[0].internalPointer()
+ selectionInstanceType = type(firstItem)
+ for idx in indexes[1:]:
+ if selectionInstanceType != type(idx.internalPointer()):
+ # Cannot drag mixed type items
+ return
+
+ # Each item type may support different drag & drop actions
+ # For instance, suprepo items support Copy actions only
+ supportedActions = firstItem.getSupportedDragDropActions()
+
+ super(RepoTreeView, self).startDrag(supportedActions)
+
def dropEvent(self, event):
data = event.mimeData()
index, group, row = self.dropLocation(event)
@@ -102,10 +124,9 @@ if event.source() is self:
# Event is an internal move, so pass it to the model
col = 0
- drop = self.model().dropMimeData(data, Qt.MoveAction, row,
+ drop = self.model().dropMimeData(data, event.dropAction(), row,
col, group)
if drop:
- event.setDropAction(Qt.MoveAction)
event.accept()
else:
# Event is a drop of an external repo
|
@@ -134,6 +134,9 @@ def okToDelete(self):
return True
+ def getSupportedDragDropActions(self):
+ return Qt.MoveAction
+
class RepoItem(RepoTreeItem):
def __init__(self, root=None, parent=None):
@@ -319,13 +322,18 @@ return super(SubrepoItem, self).data(column, role)
def menulist(self):
- print self._parent
if isinstance(self._parent, RepoGroupItem):
return super(SubrepoItem, self).menulist()
else:
return ['open', 'clone', None, 'explore', 'terminal',
None, 'settings']
+ def getSupportedDragDropActions(self):
+ if issubclass(type(self.parent()), RepoGroupItem):
+ return Qt.MoveAction
+ else:
+ return Qt.CopyAction
+
class RepoGroupItem(RepoTreeItem):
def __init__(self, name=None, parent=None):
|
Loading...