diff options
author | Sebastian Koslowski <koslowski@kit.edu> | 2016-06-18 21:16:14 -0700 |
---|---|---|
committer | Sebastian Koslowski <koslowski@kit.edu> | 2016-07-13 16:33:29 +0200 |
commit | 4b60db7deaa89a998715b45e942fa0c69dd5be1a (patch) | |
tree | 304720c369be0bf78aed80fe377fb892794f9fc0 /grc/core/Block.py | |
parent | 025c19f6a22ab3ed035cbc63787c4dcdba395faf (diff) |
grc-refactor: the hopeless cause of bus ports...
Diffstat (limited to 'grc/core/Block.py')
-rw-r--r-- | grc/core/Block.py | 107 |
1 files changed, 52 insertions, 55 deletions
diff --git a/grc/core/Block.py b/grc/core/Block.py index c6d743eaee..743c9de99f 100644 --- a/grc/core/Block.py +++ b/grc/core/Block.py @@ -578,26 +578,30 @@ class Block(Element): Returns: true for change """ - changed = False + type_templates = ' '.join(p._type for p in self.get_children()) type_param = None for key, param in six.iteritems(self.params): - children = self.get_children() + if not param.is_enum(): + continue # Priority to the type controller - if param.key in ' '.join([p._type for p in children]): type_param = param + if param.key in type_templates: + type_param = param + break # Use param if type param is unset if not type_param: type_param = param - if type_param: - # Try to increment the enum by direction - try: - keys = type_param.get_option_keys() - old_index = keys.index(type_param.get_value()) - new_index = (old_index + direction + len(keys)) % len(keys) - type_param.set_value(keys[new_index]) - changed = True - except: - pass - return changed + if not type_param: + return False + + # Try to increment the enum by direction + try: + keys = type_param.get_option_keys() + old_index = keys.index(type_param.get_value()) + new_index = (old_index + direction + len(keys)) % len(keys) + type_param.set_value(keys[new_index]) + return True + except: + return False def port_controller_modify(self, direction): """ @@ -611,7 +615,7 @@ class Block(Element): """ changed = False # Concat the nports string from the private nports settings of all ports - nports_str = ' '.join([port._nports for port in self.get_ports()]) + nports_str = ' '.join(port._nports for port in self.get_ports()) # Modify all params whose keys appear in the nports string for key, param in six.iteritems(self.params): if param.is_enum() or param.key not in nports_str: @@ -682,12 +686,9 @@ class Block(Element): ############################################## def get_bus_structure(self, direction): - if direction == 'source': - bus_structure = self._bus_structure_source - else: - bus_structure = self._bus_structure_sink - - bus_structure = self.resolve_dependencies(bus_structure) + bus_structure = self.resolve_dependencies( + self._bus_structure_source if direction == 'source' else + self._bus_structure_sink) if not bus_structure: return '' # TODO: Don't like empty strings. should change this to None eventually @@ -706,70 +707,66 @@ class Block(Element): return buslist or ports def _import_bus_stuff(self, n): - bussinks = n.get('bus_sink', []) - if len(bussinks) > 0 and not self._bussify_sink: + bus_sinks = n.get('bus_sink', []) + if len(bus_sinks) > 0 and not self._bussify_sink: self.bussify({'name': 'bus', 'type': 'bus'}, 'sink') - elif len(bussinks) > 0: + elif len(bus_sinks) > 0: self.bussify({'name': 'bus', 'type': 'bus'}, 'sink') self.bussify({'name': 'bus', 'type': 'bus'}, 'sink') - bussrcs = n.get('bus_source', []) - if len(bussrcs) > 0 and not self._bussify_source: + bus_sources = n.get('bus_source', []) + if len(bus_sources) > 0 and not self._bussify_source: self.bussify({'name': 'bus', 'type': 'bus'}, 'source') - elif len(bussrcs) > 0: + elif len(bus_sources) > 0: self.bussify({'name': 'bus', 'type': 'bus'}, 'source') self.bussify({'name': 'bus', 'type': 'bus'}, 'source') def form_bus_structure(self, direc): - if direc == 'source': - get_p = self.get_sources - get_p_gui = self.get_sources_gui - bus_structure = self.get_bus_structure('source') - else: - get_p = self.get_sinks - get_p_gui = self.get_sinks_gui - bus_structure = self.get_bus_structure('sink') + ports = self.sources if direc == 'source' else self.sinks + struct = self.get_bus_structure(direc) - struct = [list(range(len(get_p())))] - if True in [isinstance(a.get_nports(), int) for a in get_p()]: - structlet = [] - last = 0 - for j in [i.get_nports() for i in get_p() if isinstance(i.get_nports(), int)]: - structlet.extend([a+last for a in range(j)]) - last = structlet[-1] + 1 - struct = [structlet] - if bus_structure: + if not struct: + struct = [list(range(len(ports)))] - struct = bus_structure + elif any(isinstance(p.get_nports(), int) for p in ports): + last = 0 + structlet = [] + for port in ports: + nports = port.get_nports() + if not isinstance(nports, int): + continue + structlet.extend(a + last for a in range(nports)) + last += nports + struct = [structlet] self.current_bus_structure[direc] = struct return struct def bussify(self, n, direc): if direc == 'source': - get_p = self.get_sources get_p_gui = self.get_sources_gui else: - get_p = self.get_sinks get_p_gui = self.get_sinks_gui - for elt in get_p(): + ports = self.sources if direc == 'source' else self.sinks + + for elt in ports: for connect in elt.get_connections(): self.parent.remove_element(connect) - if ('bus' not in [a.get_type() for a in get_p()]) and len(get_p()) > 0: + if ports and all('bus' != p.get_type() for p in ports): struct = self.form_bus_structure(direc) self.current_bus_structure[direc] = struct - if get_p()[0].get_nports(): - n['nports'] = str(1) + if ports[0].get_nports(): + n['nports'] = '1' for i in range(len(struct)): - n['key'] = str(len(get_p())) + n['key'] = str(len(ports)) n = dict(n) port = self.parent.parent.Port(block=self, n=n, dir=direc) - get_p().append(port) - elif 'bus' in [a.get_type() for a in get_p()]: + ports.append(port) + elif any('bus' == p.get_type() for p in ports): for elt in get_p_gui(): - get_p().remove(elt) + ports.remove(elt) self.current_bus_structure[direc] = '' def _init_bus_ports(self, n): |