def dropEvent(self, event: QtGui.QDropEvent): super().dropEvent(event) if event.mimeData().hasFormat("text/uri-list"): pos = QtCore.QRect() pos.setX(int(event.pos().x())) pos.setY(int(event.pos().y())) pos.setWidth(200) # TODO find a better way to set default width db = QtCore.QMimeDatabase() if "image" in db.mimeTypeForUrl(event.mimeData().urls()[0]).name(): image = event.mimeData().urls()[0].url() id = self._next_id("Image") item = PageItem(id, pos, img=image, height_from_width=True) self._add_item(item) elif "application/octet-stream" in db.mimeTypeForUrl( event.mimeData().urls()[0]).name(): # If it's a stream, we need to download it. However, that could be arbitrarily huge # For now, we're going to base the decision on the file extension. url = event.mimeData().urls()[0].url() if url.endswith(".png") or url.endswith( ".jpg") or url.endswith(".jpeg") or url.endswith( ".gif"): id = self._next_id("Image") item = PageItem(id, pos, img=url, height_from_width=True) self._add_item(item) event.accept()
def dropEvent(self, event: QDropEvent) -> None: """ If the user drops an activity into the activity parameters table read the relevant data from the database and generate a new row. Also, create a warning if the activity is from a read-only database """ db_table = event.source() if project_settings.settings["read-only-databases"].get( db_table.database_name, True): simple_warning_box( self, "Not allowed", "Cannot set activity parameters on read-only databases") return keys = [db_table.get_key(i) for i in db_table.selectedIndexes()] event.accept() # Block signals from `signals` while iterating through dropped keys. signals.blockSignals(True) for key in keys: act = bw.get_activity(key) if act.get("type", "process") != "process": simple_warning_box( self, "Not allowed", "Activity must be 'process' type, '{}' is type '{}'.". format(act.get("name"), act.get("type"))) continue self.add_parameter(key) signals.blockSignals(False) signals.parameters_changed.emit()
def dropEvent(self, event: QtGui.QDropEvent): if event.mimeData().hasText(): mime = event.mimeData() transectData = json.loads(mime.text()) transect = Transect(transectData["name"], transectData["numPhotos"]) if self.contains(transect): QtWidgets.QMessageBox.warning( self, "ImageWAO", f"Cannot move transect to this person because they already own the transect. {transect}", QtWidgets.QMessageBox.Ok, ) event.ignore() else: dragTransect = self.addTransect(transect) dragTransect.setBackgroundColor( QtGui.QColor(transectData["color"])) self._sortTransects() if event.source() in self.children(): event.setDropAction(QtCore.Qt.MoveAction) else: event.setDropAction(QtCore.Qt.MoveAction) event.accept() self.contentsChanged.emit() else: event.ignore()
def dropEvent(self, event: QDropEvent): if not event.isAccepted() and event.source() == self: drop_row = self.drop_on(event) rows = sorted(set(item.row() for item in self.selectedItems())) rows_to_move = [[ QTableWidgetItem(self.item(row_index, column_index)) for column_index in range(self.columnCount()) ] for row_index in rows] for row_index in reversed(rows): self.removeRow(row_index) if row_index < drop_row: drop_row -= 1 for row_index, data in enumerate(rows_to_move): row_index += drop_row self.insertRow(row_index) for column_index, column_data in enumerate(data): self.setItem(row_index, column_index, column_data) event.accept() for row_index in range(len(rows_to_move)): self.item(drop_row + row_index, 0).setSelected(True) self.item(drop_row + row_index, 1).setSelected(True) super().dropEvent(event) self.dropSignal.emit([self.objectName()])
def handle_drop_event(e: QDropEvent, callback): for url in e.mimeData().urls(): if url.isLocalFile(): callback(url.toLocalFile()) e.accept() return e.ignore()
def dropEvent(self, event: QDropEvent): if event.mimeData().hasUrls(): files = self._get_drop_event_files(event.mimeData()) if files: for file in files: self.main_menu.file_menu.guess_open_file(file) event.accept() return True event.ignore() return False
def drop_event(self, e: QDropEvent): mime: QMimeData = e.mimeData() src = e.source() # -- File drop -- if mime.hasUrls(): destination_index = self.view.indexAt(e.pos()) for url in mime.urls(): local_path = Path(url.toLocalFile()) if not path_exists(local_path): continue self.file_drop(local_path, destination_index) e.accept() return # --- Internal View Drops --- if not isinstance(src, self.view.__class__): e.ignore() return e.setDropAction(Qt.MoveAction) if src is not self.view: e.setDropAction(Qt.CopyAction) if e.keyboardModifiers() == Qt.ShiftModifier: e.setDropAction(Qt.CopyAction) # -- Copy drop -- if e.dropAction() is Qt.CopyAction: destination_index = self.view.indexAt(e.pos()) self.copy_drop(src, destination_index) e.accept() # -- Drag move -- if e.dropAction() is Qt.MoveAction: destination_index = self.view.indexAt(e.pos()) self.move_drop(destination_index) # Ignore default view behaviour e.ignore()
def dropEvent(self, event: QDropEvent) -> None: event.accept() self.setDisabled(True) self.repaint() asyncio.create_task(self.checkInstallFromURLs(event.mimeData().urls()))