summaryrefslogtreecommitdiff
path: root/grc/core/Block.py
diff options
context:
space:
mode:
authorSebastian Koslowski <koslowski@kit.edu>2016-07-20 13:44:42 +0200
committerSebastian Koslowski <koslowski@kit.edu>2016-07-29 15:45:07 +0200
commit3d322e9ce4083137377fe8798accc91c8dc8bb67 (patch)
tree8992f6b5ddace1acf66a3c9123ba8865b133eec5 /grc/core/Block.py
parent93ce3961a572da6ec3dbef1f24a22f4153acaa61 (diff)
grc: refactor: class for nports port clones
Diffstat (limited to 'grc/core/Block.py')
-rw-r--r--grc/core/Block.py54
1 files changed, 30 insertions, 24 deletions
diff --git a/grc/core/Block.py b/grc/core/Block.py
index d37909b4b8..d3fe4d85f2 100644
--- a/grc/core/Block.py
+++ b/grc/core/Block.py
@@ -170,39 +170,45 @@ class Block(Element):
"""
Element.rewrite(self)
- # Adjust nports, disconnect hidden ports
- for ports in (self.sources, self.sinks):
- for i, master_port in enumerate(ports):
- nports = master_port.get_nports() or 1
- num_ports = 1 + len(master_port.get_clones())
- if master_port.get_hide():
- for connection in master_port.get_connections():
- self.parent.remove_element(connection)
- if not nports and num_ports == 1: # Not a master port and no left-over clones
- continue
- # Remove excess cloned ports
- for port in master_port.get_clones()[nports-1:]:
- # Remove excess connections
- for connection in port.get_connections():
- self.parent.remove_element(connection)
- master_port.remove_clone(port)
- ports.remove(port)
- # Add more cloned ports
- for j in range(num_ports, nports):
- port = master_port.add_clone()
- ports.insert(ports.index(master_port) + j, port)
-
- self.back_ofthe_bus(ports)
- # Renumber non-message/message ports
+ def rekey(ports):
+ """Renumber non-message/message ports"""
domain_specific_port_index = collections.defaultdict(int)
for port in [p for p in ports if p.key.isdigit()]:
domain = port.domain
port.key = str(domain_specific_port_index[domain])
domain_specific_port_index[domain] += 1
+ # Adjust nports, disconnect hidden ports
+ for ports in (self.sources, self.sinks):
+ self._rewrite_nports(ports)
+ self.back_ofthe_bus(ports)
+ rekey(ports)
+
+ # disconnect hidden ports
+ for port in itertools.chain(self.sources, self.sinks):
+ if port.get_hide():
+ for connection in port.get_connections():
+ self.parent.remove_element(connection)
+
self.active_sources = [p for p in self.get_sources_gui() if not p.get_hide()]
self.active_sinks = [p for p in self.get_sinks_gui() if not p.get_hide()]
+ def _rewrite_nports(self, ports):
+ for port in ports:
+ if port.is_clone: # Not a master port and no left-over clones
+ continue
+ nports = port.get_nports() or 1
+ for clone in port.clones[nports-1:]:
+ # Remove excess connections
+ for connection in clone.get_connections():
+ self.parent.remove_element(connection)
+ port.remove_clone(clone)
+ ports.remove(clone)
+ # Add more cloned ports
+ for j in range(1 + len(port.clones), nports):
+ clone = port.add_clone()
+ ports.insert(ports.index(port) + j, clone)
+
def validate(self):
"""
Validate this block.