Place clipboard items at pos and exit paste-ghost mode.
(self, pos: QPointF)
| 396 | self.placing_started.emit() |
| 397 | |
| 398 | def _commit_paste(self, pos: QPointF) -> None: |
| 399 | """Place clipboard items at pos and exit paste-ghost mode.""" |
| 400 | for _, item, _ in self._paste_ghost_items: |
| 401 | if item.scene(): |
| 402 | self.removeItem(item) |
| 403 | self._paste_ghost_items.clear() |
| 404 | |
| 405 | self._mode = _Mode.NORMAL |
| 406 | self.placing_cancelled.emit() |
| 407 | |
| 408 | if not self._clipboard or self._paste_ref is None: |
| 409 | self._paste_ref = None |
| 410 | return |
| 411 | |
| 412 | delta = pos - self._paste_ref |
| 413 | self._paste_ref = None |
| 414 | |
| 415 | self._push_undo() |
| 416 | self.clearSelection() |
| 417 | |
| 418 | for data in self._clipboard: |
| 419 | kind = data['kind'] |
| 420 | if kind == 'component': |
| 421 | # Re-fetch the full symbol SVG from the library so embedded text |
| 422 | # (stripped from item._svg_bytes) is restored on the copy, just as |
| 423 | # file loading does. Fall back to the stored artwork if absent. |
| 424 | lib = getattr(self, '_library', None) |
| 425 | svg = lib.svg_bytes(data['symbol_name']) if lib is not None else None |
| 426 | if svg is None: |
| 427 | svg = data['svg_bytes'] |
| 428 | item = ComponentItem( |
| 429 | data['symbol_name'], |
| 430 | self._next_id(data['symbol_name']), |
| 431 | svg, |
| 432 | ) |
| 433 | item.setPos(QPointF(data['x'], data['y']) + delta) |
| 434 | item.setRotation(data['rotation']) |
| 435 | item.h_flip = data['h_flip'] |
| 436 | item.v_flip = data['v_flip'] |
| 437 | item.apply_transform() |
| 438 | item.params = dict(data['params']) |
| 439 | item.model = data['model'] |
| 440 | item.refs = list(data['refs']) |
| 441 | item.prop_display = {k: tuple(v) for k, v in data['prop_display'].items()} |
| 442 | item.prop_offsets = {k: list(v) for k, v in data['prop_offsets'].items()} |
| 443 | item.update_labels() |
| 444 | self.addItem(item) |
| 445 | item.setSelected(True) |
| 446 | elif kind == 'wire': |
| 447 | pts = [QPointF(x + delta.x(), y + delta.y()) for x, y in data['points']] |
| 448 | wire = WireItem(pts) |
| 449 | wire.net_name = data['net_name'] |
| 450 | wire.display_name = data['display_name'] |
| 451 | wire.label_offset = QPointF(*data['label_offset']) |
| 452 | self.addItem(wire) |
| 453 | wire.update_label() |
| 454 | wire.setSelected(True) |
| 455 | elif kind == 'command': |
no test coverage detected