Esempio n. 1
0
    def mouseReleaseEvent(self, mouse_event: QtGui.QMouseEvent):
        modifiers = mouse_event.modifiers()
        self._dragging_move = False

        if not mouse_event.button() == QtCore.Qt.LeftButton:
            return

        if self._rubber_band.isHidden():
            if self._last_move_event_pos is None:
                if self._last_double_click:
                    self._last_double_click = False
                else:
                    item = self.itemAt(mouse_event.pos())
                    if item is not None:
                        self._scene.set_selection((item, ), modifiers)
            return

        self._rubber_band.hide()

        potential_items = self.scene().items(
            self.mapToScene(self._rubber_band.geometry()))

        if settings.SELECT_ON_COVERED_PARTS.get_value():
            self._scene.add_selection(potential_items, modifiers)
            return

        cards = []
        rubber_band_polygon = QPolygonF(
            self.mapToScene(self._rubber_band.geometry()))

        covered_polygon = None

        for card in potential_items:
            rect = QRectF(card.boundingRect())
            rect.translate(card.pos())

            if rubber_band_polygon.intersects(
                    QPolygonF(rect).subtracted(covered_polygon)
                    if covered_polygon is not None else QPolygonF(rect)):
                cards.append(card)

            current_cover_area = QPolygonF(
                QRectF(
                    rect.x() - 1,
                    rect.y() - 1,
                    rect.width() + 2,
                    rect.height() + 2,
                ))

            if covered_polygon is None:
                covered_polygon = current_cover_area
            else:
                covered_polygon = covered_polygon.united(current_cover_area)

        self._scene.add_selection(cards, modifiers)