diff options
author | Bastian Bloessl <bastian.bloessl@uibk.ac.at> | 2013-08-17 17:10:30 +0200 |
---|---|---|
committer | Sebastian Koslowski <koslowski@kit.edu> | 2013-11-29 12:37:12 +0100 |
commit | 303ff1703c832a87d6083dfe4632adacf11523be (patch) | |
tree | 81fa760318ca010fe19c9aa2ef70cc9d34377371 /grc/python | |
parent | ef135d2907855691001a618ecfeb8d0a813aab39 (diff) |
allow varying number of message ports
Diffstat (limited to 'grc/python')
-rw-r--r-- | grc/python/Block.py | 28 | ||||
-rw-r--r-- | grc/python/Port.py | 1 |
2 files changed, 26 insertions, 3 deletions
diff --git a/grc/python/Block.py b/grc/python/Block.py index e13b26c12f..42599914a1 100644 --- a/grc/python/Block.py +++ b/grc/python/Block.py @@ -101,10 +101,21 @@ class Block(_Block, _GUIBlock): #restore integer contiguity after insertion #rectify the port names with the index self.back_ofthe_bus(ports); + n = 0 + last_basename = '' for i, port in enumerate(ports): port._key = str(i) port._name = port._n['name'] - if len(ports) > 1 and not port._type == 'bus': port._name += str(i) + # add an index to the basename + if port.get_nports() > 1 and not port._type == 'bus': + # basename = name without digits + basename = ''.join([c for c in port._name if not c.isdigit()]) + if basename == last_basename: + n += 1 + else: + last_basename = basename + n = 0 + port._name += str(n) def insert_port(get_ports, get_port, key): prev_port = get_port(str(int(key)-1)) @@ -121,14 +132,27 @@ class Block(_Block, _GUIBlock): get_ports().remove(port) rectify(get_ports()) + def get_master_ports(lst): + port_basenames = set() + master_ports = list() + for p in lst: + n = p._name + base_n = ''.join([c for c in n if not c.isdigit()]) + if not base_n in port_basenames: + master_ports.append(p) + port_basenames.add(base_n) + return master_ports + #adjust nports for get_ports, get_port in ( (self.get_sources, self.get_source), (self.get_sinks, self.get_sink), ): - master_ports = filter(lambda p: p.get_nports(), get_ports()) + master_ports = get_master_ports(get_ports()) for i, master_port in enumerate(master_ports): nports = master_port.get_nports() + if not nports: + continue index_first = get_ports().index(master_port) try: index_last = get_ports().index(master_ports[i+1]) except IndexError: index_last = len(get_ports()) diff --git a/grc/python/Port.py b/grc/python/Port.py index 247dbed3e6..c7b802a23c 100644 --- a/grc/python/Port.py +++ b/grc/python/Port.py @@ -92,7 +92,6 @@ class Port(_Port, _GUIPort): """ self._n = n if n['type'] == 'msg': n['key'] = 'msg' - if n['type'] == 'message': n['key'] = n['name'] if dir == 'source' and not n.find('key'): n['key'] = str(block._source_count) block._source_count += 1 |