diff options
author | Sebastian Koslowski <sebastian.koslowski@gmail.com> | 2020-05-22 21:22:49 +0200 |
---|---|---|
committer | mormj <34754695+mormj@users.noreply.github.com> | 2020-05-28 08:52:46 -0400 |
commit | dfd31cb19fc8758b32b02609199dbea3e0637db6 (patch) | |
tree | 0e18eb68b83a32c4c6d8b00cb6984da1d1ae2aeb /grc/gui | |
parent | 3dd487547dd90f668a05886eb037d890d6c0b1fe (diff) |
grc: fix pasting connections when block were renamed (fixes #3499)
Diffstat (limited to 'grc/gui')
-rw-r--r-- | grc/gui/canvas/flowgraph.py | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/grc/gui/canvas/flowgraph.py b/grc/gui/canvas/flowgraph.py index bf125ba0da..648b6c3d08 100644 --- a/grc/gui/canvas/flowgraph.py +++ b/grc/gui/canvas/flowgraph.py @@ -250,10 +250,7 @@ class FlowGraph(CoreFlowgraph, Drawable): Args: clipboard: the nested data of blocks, connections """ - # todo: rewrite this... - selected = set() (x_min, y_min), blocks_n, connections_n = clipboard - old_id2block = dict() # recalc the position scroll_pane = self.drawing_area.get_parent().get_parent() h_adj = scroll_pane.get_hadjustment() @@ -265,6 +262,7 @@ class FlowGraph(CoreFlowgraph, Drawable): x_off, y_off = 0, 0 # create blocks + pasted_blocks = {} for block_n in blocks_n: block_key = block_n.get('id') if block_key == 'options': @@ -273,30 +271,29 @@ class FlowGraph(CoreFlowgraph, Drawable): block_name = block_n.get('name') # Verify whether a block with this name exists before adding it if block_name in (blk.name for blk in self.blocks): - block_name = self._get_unique_id(block_name) - block_n['name'] = block_name + block_n = block_n.copy() + block_n['name'] = self._get_unique_id(block_name) block = self.new_block(block_key) if not block: continue # unknown block was pasted (e.g. dummy block) - selected.add(block) block.import_data(**block_n) - old_id2block[block.params['id'].value] = block - # move block to offset coordinate - block.move((x_off, y_off)) + pasted_blocks[block_name] = block # that is before any rename + block.move((x_off, y_off)) #TODO: prevent block from being pasted directly on top of another block + self.selected_elements = set(pasted_blocks.values()) + # update before creating connections self.update() # create connections - for connection_n in connections_n: - source = old_id2block[connection_n[0]].get_source(connection_n[1]) - sink = old_id2block[connection_n[2]].get_sink(connection_n[3]) + for src_block, src_port, dst_block, dst_port in connections_n: + source = pasted_blocks[src_block].get_source(src_port) + sink = pasted_blocks[dst_block].get_sink(dst_port) connection = self.connect(source, sink) - selected.add(connection) - self.selected_elements = selected + self.selected_elements.add(connection) ########################################################################### # Modify Selected |