summaryrefslogtreecommitdiff
path: root/grc/core/FlowGraph.py
diff options
context:
space:
mode:
Diffstat (limited to 'grc/core/FlowGraph.py')
-rw-r--r--grc/core/FlowGraph.py81
1 files changed, 35 insertions, 46 deletions
diff --git a/grc/core/FlowGraph.py b/grc/core/FlowGraph.py
index 53c4b783b7..16bcb3b9f6 100644
--- a/grc/core/FlowGraph.py
+++ b/grc/core/FlowGraph.py
@@ -461,52 +461,41 @@ class FlowGraph(Element):
##############################################
def bus_ports_rewrite(self):
# todo: move to block.rewrite()
- for block in self.blocks:
- for direc in ['source', 'sink']:
- if direc == 'source':
- get_p = block.get_sources
- get_p_gui = block.get_sources_gui
- bus_structure = block.form_bus_structure('source')
- else:
- get_p = block.get_sinks
- get_p_gui = block.get_sinks_gui
- bus_structure = block.form_bus_structure('sink')
-
- if 'bus' in [a.get_type() for a in get_p_gui()]:
- if len(get_p_gui()) > len(bus_structure):
- times = range(len(bus_structure), len(get_p_gui()))
- for i in times:
- for connect in get_p_gui()[-1].get_connections():
- block.parent.remove_element(connect)
- get_p().remove(get_p_gui()[-1])
- elif len(get_p_gui()) < len(bus_structure):
- n = {'name': 'bus', 'type': 'bus'}
- if any(isinstance(a.get_nports(), int) for a in get_p()):
- n['nports'] = str(1)
-
- times = range(len(get_p_gui()), len(bus_structure))
-
- for i in times:
- n['key'] = str(len(get_p()))
- n = dict(n)
- port = block.parent.parent.Port(
- block=block, n=n, dir=direc)
- get_p().append(port)
-
- if 'bus' in [a.get_type() for a in block.get_sources_gui()]:
- for i in range(len(block.get_sources_gui())):
- if len(block.get_sources_gui()[
- i].get_connections()) > 0:
- source = block.get_sources_gui()[i]
- sink = []
-
- for j in range(len(source.get_connections())):
- sink.append(
- source.get_connections()[j].sink_port)
- for elt in source.get_connections():
- self.remove_element(elt)
- for j in sink:
- self.connect(source, j)
+ def doit(block, ports, ports_gui, direc):
+ bus_structure = block.form_bus_structure(direc)
+
+ if any('bus' == a.get_type() for a in ports_gui):
+ if len(ports_gui) > len(bus_structure):
+ for _ in range(len(bus_structure), len(ports_gui)):
+ for connect in ports_gui[-1].get_connections():
+ block.parent.remove_element(connect)
+ ports.remove(ports_gui[-1])
+ elif len(ports_gui) < len(bus_structure):
+ n = {'name': 'bus', 'type': 'bus'}
+ if any(isinstance(a.get_nports(), int) for a in ports):
+ n['nports'] = str(1)
+ for _ in range(len(ports_gui), len(bus_structure)):
+ n['key'] = str(len(ports))
+ port = block.parent.parent.Port(block=block, n=dict(n), dir=direc)
+ ports.append(port)
+
+ if 'bus' in [a.get_type() for a in block.get_sources_gui()]:
+ for i in range(len(block.get_sources_gui())):
+ if not block.get_sources_gui()[i].get_connections():
+ continue
+ source = block.get_sources_gui()[i]
+ sink = []
+
+ for j in range(len(source.get_connections())):
+ sink.append(source.get_connections()[j].sink_port)
+ for elt in source.get_connections():
+ self.remove_element(elt)
+ for j in sink:
+ self.connect(source, j)
+
+ for blk in self.blocks:
+ doit(blk, blk.sources, blk.get_sources_gui(), 'source')
+ doit(blk, blk.sinks, blk.get_sinks_gui(), 'sinks')
def _update_old_message_port_keys(source_key, sink_key, source_block, sink_block):