def dropEvent(self, e): if self.is_external(): data = PyMimeData.coerce(e.mimeData()).instance() if not hasattr(data, '__iter__'): return df = self.drop_factory if not df: df = lambda x: x row = self.rowAt(e.pos().y()) n = len(self._editor.value) if row == -1: row = n model = self._editor.model if self._dragging: rows = [ri for ri, _ in data] model.moveRows(rows, row) else: with no_update(self._editor.object): for i, di in enumerate(reversed(data)): if isinstance(di, tuple): di = di[1] model.insertRow(row=row, obj=df(di)) e.accept() self._dragging = None else: super(_TableView, self).dropEvent(e)
def dropEvent(self, e): if self.is_external(): data = PyMimeData.coerce(e.mimeData()).instance() if not hasattr(data, '__iter__'): return df = self.drop_factory if not df: df = lambda x: x row = self.rowAt(e.pos().y()) n = len(self._editor.value) if row == -1: row = n model = self._editor.model if self._dragging: rows = [ri for ri, _ in data] model.moveRows(rows, row) else: data = [di for _, di in data] with no_update(self._editor.object): for i, di in enumerate(reversed(data)): if isinstance(di, tuple): di = di[1] model.insertRow(row=row, obj=df(di)) for i, di in enumerate(reversed(df(data))): model.insertRow(row=row, obj=di) e.accept() self._dragging = None else: super(_TableView, self).dropEvent(e)
def startDrag(self, actions): if self._editor.factory.drag_external: idxs = self.selectedIndexes() rows = sorted(list(set([idx.row() for idx in idxs]))) drag_object = [(ri, self._editor.value[ri]) for ri in rows] md = PyMimeData.coerce(drag_object) self._dragging = self.currentIndex() drag = QtGui.QDrag(self) drag.setMimeData(md) drag.exec_(actions) else: super(_TableView, self).startDrag(actions)
def dragEnterEvent(self, e): if self.is_external(): # Assume the drag is invalid. e.ignore() # Check what is being dragged. md = PyMimeData.coerce(e.mimeData()) if md is None: return # We might be able to handle it (but it depends on what the final # target is). e.acceptProposedAction() else: super(_myTableView, self).dragEnterEvent(e)
def dragEnterEvent(self, e): if self.is_external(): # Assume the drag is invalid. e.ignore() # Check what is being dragged. ed = e.mimeData() md = PyMimeData.coerce(ed) if md is None: return elif not hasattr(ed.instance(), '__iter__'): return # We might be able to handle it (but it depends on what the final # target is). e.acceptProposedAction() else: super(_TableView, self).dragEnterEvent(e)
def dropEvent(self, e): if self.is_external(): data = PyMimeData.coerce(e.mimeData()).instance() df = self.drop_factory if not df: df = lambda x: x row = self.rowAt(e.pos().y()) n = len(self._editor.value) if row == -1: row = n model = self._editor.model if self._dragging: rows = [ri for ri, _ in data] model.moveRows(rows, row) else: # self._editor._no_update = True # parent = QtCore.QModelIndex() # model.beginInsertRows(parent, row, row) # editor = self._editor # self._editor.object._no_update = True with no_update(self._editor.object): for i, (_, di) in enumerate(reversed(data)): # print 'insert' # obj = paste_func1(di) # editor.callx(editor.adapter.insert, editor.object, editor.name, row + i, obj) model.insertRow(row=row, obj=df(di)) # model.insertRow(row=row, obj=paste_func(data[0][1])) # self._editor.object._no_update = False # model.endInsertRows() # self._editor._no_update = False e.accept() self._dragging = None else: super(_myTableView, self).dropEvent(e)
def dragEnterEvent(self, e): if self.is_external(): # Assume the drag is invalid. e.ignore() # Check what is being dragged. ed = e.mimeData() md = PyMimeData.coerce(ed) if md is None: return else: try: if not hasattr(ed.instance(), '__iter__'): return except AttributeError: return # We might be able to handle it (but it depends on what the final # target is). e.acceptProposedAction() else: super(_TableView, self).dragEnterEvent(e)
def dropMimeData(self, mime_data, action, row, column, parent): if action == QtCore.Qt.IgnoreAction: return False # this is a drag from a tabular model data = mime_data.data(tabular_mime_type) if not data.isNull() and action == QtCore.Qt.MoveAction: id_and_rows = [int(di) for di in data.split(' ')] table_id = id_and_rows[0] # is it from ourself? if table_id == id(self): current_rows = id_and_rows[1:] self.moveRows(current_rows, parent.row()) return True # this is an external drag data = PyMimeData.coerce(mime_data).instance() if data is not None: if not isinstance(data, list): data = [data] editor = self._editor object = editor.object name = editor.name adapter = editor.adapter if row == -1 and parent.isValid(): # find correct row number row = parent.row() if row == -1 and adapter.len(object, name) == 0: # if empty list, target is after end of list row = 0 if all(adapter.get_can_drop(object, name, row, item) for item in data): for item in reversed(data): self.dropItem(item, row) return True return False