def dropMimeData(self, mime: QMimeData, action, row: int, column: int, parent: QModelIndex): LOG.debug('dropMimeData at row {}'.format(row)) if action == Qt.IgnoreAction: return True if mime.hasFormat('text/uri-list'): if mime.hasUrls(): LOG.debug('found urls in drop!') for qurl in mime.urls(): LOG.debug(qurl.path()) if qurl.isLocalFile(): path = qurl.path() self.doc.open_file( path) # FIXME: replace with a signal return True elif mime.hasFormat(self._mimetype): # unpickle the presentation information and re-insert it # b = base64.decodebytes(mime.text()) b = mime.data(self._mimetype) layer_set_len, insertion_info = pkl.loads(b) LOG.debug('dropped: {0!r:s}'.format(insertion_info)) count = len(insertion_info) if row == -1: row = len(self.doc) # append # FIXME: row=col=-1 implies drop-on-parent, which may mean replace or may mean append for composite layers # self.insertRows(row, count) # for i, presentation in enumerate(l): # self.setData(self.index(row+i, 0), presentation) order = list(range(layer_set_len)) inserted_row_numbers = [] # inserted_presentations = [] # delete_these_rows = [] insertion_point = row uuids = [] for old_row, presentation in reversed(sorted(insertion_info)): del order[old_row] if old_row < insertion_point: insertion_point -= 1 inserted_row_numbers.insert(0, old_row) uuids.append(presentation.uuid) # delete_these_rows.append(old_row if old_row<row else old_row+count) # inserted_presentations.append(presentation) order = order[:insertion_point] + inserted_row_numbers + order[ insertion_point:] LOG.debug('new order after drop {0!r:s}'.format(order)) self.select([]) self.doc.reorder_by_indices(order) # self.doc.insert_layer_prez(row, inserted_presentations) # LOG.debug('after insertion removing rows {0!r:s}'.format(delete_these_rows)) # for exrow in delete_these_rows: # self.doc.remove_layer_prez(exrow) # self.doc.didReorderLayers.emit(order) # FUTURE: not our business to be emitting on behalf of the document assert (count == len(insertion_info)) return True return False
def start_drag(self, info_id): _logger.info( "started dragging" ) mimeData = QMimeData() mimeData.data =("/" + info_id.partition("/")[2].partition("/")[0], moose.element(info_id)) mimeData.setText(info_id) drag = QDrag(self) drag.setMimeData(mimeData) pixmap = QPixmap("") drag.setPixmap(pixmap) # drag.setHotSpot(e.pos() - self.rect().topLeft()) dropAction = drag.start(QtCore.Qt.MoveAction) print((" => ", dropAction)) self.select_info.set_event_type(0) self._timer.start(0) return
def start_drag(self, info_id): # pixmap = QPixmap() # painter = QPainter( pixmap ) # painter.setFont( QFont("Arial") ); # painter.drawText( QPoint(100, 100), info_id ); mimeData = QMimeData() mimeData.data =("/" + info_id.partition("/")[2].partition("/")[0], moose.element(info_id)) mimeData.setText(info_id) drag = QDrag(self) drag.setMimeData(mimeData) pixmap = QPixmap("") drag.setPixmap(pixmap) # drag.setHotSpot(e.pos() - self.rect().topLeft()) dropAction = drag.start(QtCore.Qt.MoveAction) print(" => ", dropAction) self.select_info.set_event_type(0) self._timer.start(0) return