summaryrefslogtreecommitdiff
path: root/grc/python/Block.py
diff options
context:
space:
mode:
Diffstat (limited to 'grc/python/Block.py')
-rw-r--r--grc/python/Block.py28
1 files changed, 26 insertions, 2 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())