示例#1
0
    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()
示例#2
0
    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()
示例#3
0
    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()
示例#4
0
    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()])
示例#5
0
def handle_drop_event(e: QDropEvent, callback):
    for url in e.mimeData().urls():
        if url.isLocalFile():
            callback(url.toLocalFile())
            e.accept()
            return

    e.ignore()
示例#6
0
    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
示例#7
0
    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()
示例#8
0
 def dropEvent(self, event: QDropEvent) -> None:
     event.accept()
     self.setDisabled(True)
     self.repaint()
     asyncio.create_task(self.checkInstallFromURLs(event.mimeData().urls()))