diff options
author | Tom Rondeau <tom@trondeau.com> | 2014-07-11 15:50:30 -0400 |
---|---|---|
committer | Tom Rondeau <tom@trondeau.com> | 2014-07-11 15:50:30 -0400 |
commit | fe1f386291b77d562e0602ef61b64a42d863e535 (patch) | |
tree | f1972ef0043fb4825b6eaf9abf0e229850290ea4 /grc | |
parent | 62831422ae4b2a817a997153468008db38e06598 (diff) | |
parent | 831d05eb283e1ac4decb312c990cba089cdca316 (diff) |
Merge remote-tracking branch 'gnuradio-wg-grc/grc_hide_ports'
Conflicts:
grc/base/Port.py
grc/gui/Block.py
Diffstat (limited to 'grc')
-rw-r--r-- | grc/base/Port.py | 31 | ||||
-rw-r--r-- | grc/gui/Block.py | 22 | ||||
-rw-r--r-- | grc/gui/Port.py | 2 | ||||
-rw-r--r-- | grc/python/block.dtd | 4 |
4 files changed, 34 insertions, 25 deletions
diff --git a/grc/base/Port.py b/grc/base/Port.py index edc309bf05..34766bb4f8 100644 --- a/grc/base/Port.py +++ b/grc/base/Port.py @@ -36,6 +36,7 @@ class Port(Element): self._name = n['name'] self._key = n['key'] self._type = n['type'] + self._hide = n.find('hide') or '' self._dir = dir def validate(self): @@ -65,15 +66,17 @@ class Port(Element): def get_name(self): number = '' if self.get_type() == 'bus': - busses = filter(lambda a: a._dir == self._dir, self.get_parent().get_ports_gui()); - - number = str(busses.index(self)) + '#' + str(len(self.get_associated_ports())); + busses = filter(lambda a: a._dir == self._dir, self.get_parent().get_ports_gui()) + number = str(busses.index(self)) + '#' + str(len(self.get_associated_ports())) return self._name + number def get_key(self): return self._key def is_sink(self): return self._dir == 'sink' def is_source(self): return self._dir == 'source' def get_type(self): return self.get_parent().resolve_dependencies(self._type) + def get_hide(self): + value = self.get_parent().resolve_dependencies(self._hide).strip().lower() + return False if value in ('false', 'off', '0') else bool(value) def get_connections(self): """ @@ -97,20 +100,18 @@ class Port(Element): def get_associated_ports(self): if not self.get_type() == 'bus': - return [self]; + return [self] else: if self.is_source(): - get_p = self.get_parent().get_sources; - bus_structure = self.get_parent().current_bus_structure['source']; - direc = 'source' + get_ports = self.get_parent().get_sources + bus_structure = self.get_parent().current_bus_structure['source'] else: - get_p = self.get_parent().get_sinks; - bus_structure = self.get_parent().current_bus_structure['sink']; - direc = 'sink' + get_ports = self.get_parent().get_sinks + bus_structure = self.get_parent().current_bus_structure['sink'] - ports = [i for i in get_p() if not i.get_type() == 'bus']; + ports = [i for i in get_ports() if not i.get_type() == 'bus'] if bus_structure: - busses = [i for i in get_p() if i.get_type() == 'bus']; - bus_index = busses.index(self); - ports = filter(lambda a: ports.index(a) in bus_structure[bus_index], ports); - return ports; + busses = [i for i in get_ports() if i.get_type() == 'bus'] + bus_index = busses.index(self) + ports = filter(lambda a: ports.index(a) in bus_structure[bus_index], ports) + return ports diff --git a/grc/gui/Block.py b/grc/gui/Block.py index 49c0361eb9..0afb351647 100644 --- a/grc/gui/Block.py +++ b/grc/gui/Block.py @@ -175,12 +175,19 @@ class Block(Element): #calculate width and height needed self.W = self.label_width + 2*BLOCK_LABEL_PADDING self.H = max(*( - [self.label_height+2*BLOCK_LABEL_PADDING] + [2*PORT_BORDER_SEPARATION + \ - sum([port.H + PORT_SEPARATION for port in ports]) - PORT_SEPARATION - for ports in (self.get_sources_gui(), self.get_sinks_gui())] + - [4*PORT_BORDER_SEPARATION + \ - sum([(port.H) + PORT_SEPARATION for port in ports]) - PORT_SEPARATION - for ports in ([i for i in self.get_sources_gui() if i.get_type() == 'bus'], [i for i in self.get_sinks_gui() if i.get_type() == 'bus'])] + [ # labels + self.label_height + 2 * BLOCK_LABEL_PADDING + ] + + [ # ports + 2 * PORT_BORDER_SEPARATION + + sum([port.H + PORT_SEPARATION for port in ports if not port.get_hide()]) - PORT_SEPARATION + for ports in (self.get_sources_gui(), self.get_sinks_gui()) + ] + + [ # bus ports only + 4 * PORT_BORDER_SEPARATION + + sum([port.H + PORT_SEPARATION for port in ports if port.get_type() == 'bus']) - PORT_SEPARATION + for ports in (self.get_sources_gui(), self.get_sinks_gui()) + ] )) def draw(self, gc, window): @@ -205,7 +212,8 @@ class Block(Element): window.draw_drawable(gc, self.vertical_label, 0, 0, x+(self.H-self.label_height)/2, y+BLOCK_LABEL_PADDING, -1, -1) #draw ports for port in self.get_ports_gui(): - port.draw(gc, window) + if not port.get_hide(): + port.draw(gc, window) def what_is_selected(self, coor, coor_m=None): """ diff --git a/grc/gui/Port.py b/grc/gui/Port.py index 8b4edfa430..41a458cde6 100644 --- a/grc/gui/Port.py +++ b/grc/gui/Port.py @@ -59,7 +59,7 @@ class Port(Element): if hasattr(self, '_connector_length'): del self._connector_length; return - length = len(ports) + length = len(filter(lambda p: not p.get_hide(), ports)) #reverse the order of ports for these rotations if rotation in (180, 270): index = length-index-1 offset = (self.get_parent().H - length*self.H - (length-1)*PORT_SEPARATION)/2 diff --git a/grc/python/block.dtd b/grc/python/block.dtd index 602339ba7c..576b428111 100644 --- a/grc/python/block.dtd +++ b/grc/python/block.dtd @@ -32,8 +32,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA <!ELEMENT param_tab_order (tab+)> <!ELEMENT param (base_key?, name, key, value?, type?, hide?, option*, tab?)> <!ELEMENT option (name, key, opt*)> -<!ELEMENT sink (name, type, vlen?, nports?, optional?)> -<!ELEMENT source (name, type, vlen?, nports?, optional?)> +<!ELEMENT sink (name, type, vlen?, nports?, optional?, hide?)> +<!ELEMENT source (name, type, vlen?, nports?, optional?, hide?)> <!-- Bottom level elements. Character data only. |