MCPcopy Index your code
hub / github.com/SLiCAP/SLiCAP_python / _commit_paste

Method _commit_paste

SLiCAP/schematic/canvas.py:398–482  ·  view source on GitHub ↗

Place clipboard items at pos and exit paste-ghost mode.

(self, pos: QPointF)

Source from the content-addressed store, hash-verified

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':

Callers 1

mousePressEventMethod · 0.95

Calls 15

_push_undoMethod · 0.95
_next_idMethod · 0.95
update_labelMethod · 0.95
_sync_junctionsMethod · 0.95
ComponentItemClass · 0.85
WireItemClass · 0.85
CommandItemClass · 0.85
FreeTextItemClass · 0.85
AnalysisItemClass · 0.85
HyperlinkItemClass · 0.85
clearMethod · 0.80

Tested by

no test coverage detected