def startDrag(self, dropActions): # if DEBUG_MODE: print('>> NodeTreeView::startDrag') selectedIdx = self.selectedIndexes() # for idx in selectedIdx : idx = selectedIdx[0] item = self.model().itemFromIndex(idx) #print "item = %s" % item.text() # set custom data data = QtCore.QByteArray() stream = QtCore.QDataStream(data, QtCore.QIODevice.WriteOnly) itemName = item.text() if usePyQt4: itemFilename = item.data(QtCore.Qt.UserRole + 4).toString() else: itemFilename = item.data(QtCore.Qt.UserRole + 4) if not usePyQt5: if usePySide: stream.writeString(itemFilename) else: stream << itemFilename else: stream.writeBytes(itemFilename) if DEBUG_MODE: print('* write itemFilename = %s' % (itemFilename)) mimeData = QtCore.QMimeData() mimeData.setData('application/x-text', data) # set drag drag = QtGui.QDrag(self) drag.setMimeData(mimeData) #drag.setPixmap ( QtGui.QPixmap(':/node.png') ) if not usePyQt5: drag.start(QtCore.Qt.CopyAction) else: drag.exec_(QtCore.Qt.CopyAction)
def dropEvent(self, event): # import os if DEBUG_MODE: print ">> WorkArea.dropEvent" file_list = [] mimedata = event.mimeData() if mimedata.hasFormat('application/x-text'): # decode drop stuff data = mimedata.data('application/x-text') stream = QtCore.QDataStream(data, QtCore.QIODevice.ReadOnly) if usePyQt4: filename = QtCore.QString() else: filename = '' if not usePyQt5: if usePySide: filename = stream.readString() else: stream >> filename else: filename = stream.readBytes() if DEBUG_MODE: print '* read itemFilename = %s' % (filename) file_list.append(filename) event.setDropAction(QtCore.Qt.CopyAction) event.accept() elif mimedata.hasFormat('text/uri-list'): data = str(mimedata.data('text/uri-list').data()) #print data for item in data.split(): filename = str(QtCore.QUrl(item).toLocalFile()) (name, ext) = os.path.splitext(os.path.basename(filename)) if DEBUG_MODE: print ':: %s (%s)' % (filename, ext) if ext == '.xml': file_list.append(filename) else: event.ignore() for file_name in file_list: self.insertNodeNet(file_name, self.mapToScene(event.pos()))