diff options
author | Johnathan Corgan <johnathan@corganlabs.com> | 2015-09-04 05:40:24 -0700 |
---|---|---|
committer | Johnathan Corgan <johnathan@corganlabs.com> | 2015-09-04 05:40:24 -0700 |
commit | 80d52551db67b2e80955eaadbbc63a54d4d4abbc (patch) | |
tree | c84957617025cf5a857e26b9993eee16500780dc /grc | |
parent | 8ec2b0ed041bd62c11d64ca46cf497a544ed05f4 (diff) | |
parent | 791c1a705d9e1457d9c09c79c7f1300c2ac63f5e (diff) |
Merge remote-tracking branch 'gnuradio-wg-grc/master_grcwg'
Diffstat (limited to 'grc')
-rw-r--r-- | grc/base/FlowGraph.py | 59 | ||||
-rw-r--r-- | grc/gui/FlowGraph.py | 22 | ||||
-rw-r--r-- | grc/python/Generator.py | 2 |
3 files changed, 50 insertions, 33 deletions
diff --git a/grc/base/FlowGraph.py b/grc/base/FlowGraph.py index 697ae8c47a..217c4d7302 100644 --- a/grc/base/FlowGraph.py +++ b/grc/base/FlowGraph.py @@ -18,10 +18,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA """ import time -from . import odict -from Element import Element +from operator import methodcaller +from itertools import ifilter + from .. gui import Messages -from . Constants import FLOW_GRAPH_FILE_FORMAT_VERSION + +from . import odict +from .Element import Element +from .Constants import FLOW_GRAPH_FILE_FORMAT_VERSION class FlowGraph(Element): @@ -118,18 +122,24 @@ class FlowGraph(Element): ############################################## ## Access Elements ############################################## - def get_block(self, id): return filter(lambda b: b.get_id() == id, self.get_blocks())[0] - def get_blocks_unordered(self): return filter(lambda e: e.is_block(), self.get_elements()) + def get_block(self, id): + for block in self.iter_blocks(): + if block.get_id() == id: + return block + raise KeyError('No block with ID {0!r}'.format(id)) + + def iter_blocks(self): + return ifilter(methodcaller('is_block'), self.get_elements()) + def get_blocks(self): - # refactored the slow, ugly version - # don't know why we need this here, using it for sorted export_data() - return sorted(self.get_blocks_unordered(), key=lambda b: ( - b.get_key() != 'options', # options to the front - not b.get_key().startswith('variable'), # then vars - str(b) - )) - def get_connections(self): return filter(lambda e: e.is_connection(), self.get_elements()) - def get_children(self): return self.get_elements() + return list(self.iter_blocks()) + + def iter_connections(self): + return ifilter(methodcaller('is_connection'), self.get_elements()) + + def get_connections(self): + return list(self.iter_connections()) + def get_elements(self): """ Get a list of all the elements. @@ -145,6 +155,8 @@ class FlowGraph(Element): self._elements.remove(self._options_block) return self._elements + get_children = get_elements + def get_enabled_blocks(self): """ Get a list of all blocks that are enabled and not bypassed. @@ -152,7 +164,7 @@ class FlowGraph(Element): Returns: a list of blocks """ - return filter(lambda b: b.get_enabled(), self.get_blocks()) + return filter(methodcaller('get_enabled'), self.iter_blocks()) def get_bypassed_blocks(self): """ @@ -161,7 +173,7 @@ class FlowGraph(Element): Returns: a list of blocks """ - return filter(lambda b: b.get_bypassed(), self.get_blocks()) + return filter(methodcaller('get_bypassed'), self.iter_blocks()) def get_enabled_connections(self): """ @@ -170,7 +182,7 @@ class FlowGraph(Element): Returns: a list of connections """ - return filter(lambda c: c.get_enabled(), self.get_connections()) + return filter(methodcaller('get_enabled'), self.get_connections()) def get_new_block(self, key): """ @@ -252,10 +264,17 @@ class FlowGraph(Element): Returns: a nested data odict """ + # sort blocks and connections for nicer diffs + blocks = sorted(self.iter_blocks(), key=lambda b: ( + b.get_key() != 'options', # options to the front + not b.get_key().startswith('variable'), # then vars + str(b) + )) + connections = sorted(self.get_connections(), key=str) n = odict() n['timestamp'] = self._timestamp - n['block'] = [b.export_data() for b in self.get_blocks()] # already sorted - n['connection'] = [c.export_data() for c in sorted(self.get_connections(), key=str)] + n['block'] = [b.export_data() for b in blocks] + n['connection'] = [c.export_data() for c in connections] instructions = odict({ 'created': self.get_parent().get_version_short(), 'format': FLOW_GRAPH_FILE_FORMAT_VERSION, @@ -301,7 +320,7 @@ class FlowGraph(Element): block.import_data(block_n) #build the connections - block_ids = map(lambda b: b.get_id(), self.get_blocks()) + block_ids = map(methodcaller('get_id'), self.iter_blocks()) for connection_n in connections_n: try: # to make the connection #get the block ids diff --git a/grc/gui/FlowGraph.py b/grc/gui/FlowGraph.py index bf6e1eed78..b1e88aae8e 100644 --- a/grc/gui/FlowGraph.py +++ b/grc/gui/FlowGraph.py @@ -17,17 +17,14 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA """ -from Constants import SCROLL_PROXIMITY_SENSITIVITY, SCROLL_DISTANCE -import Actions -import Colors -import Utils -from Element import Element -import pygtk -pygtk.require('2.0') -import gtk import random -import Messages -import Bars +from itertools import chain +from operator import methodcaller + +from . import Actions, Colors, Utils, Messages, Bars +from .Constants import SCROLL_PROXIMITY_SENSITIVITY, SCROLL_DISTANCE +from .Element import Element + class FlowGraph(Element): """ @@ -294,7 +291,7 @@ class FlowGraph(Element): window.draw_rectangle(gc, True, 0, 0, W, H) # draw comments first if Actions.TOGGLE_SHOW_BLOCK_COMMENTS.get_active(): - for block in self.get_blocks(): + for block in self.iter_blocks(): if block.get_enabled(): block.draw_comment(gc, window) #draw multi select rectangle @@ -312,7 +309,8 @@ class FlowGraph(Element): window.draw_rectangle(gc, False, x, y, w, h) #draw blocks on top of connections hide_disabled_blocks = Actions.TOGGLE_HIDE_DISABLED_BLOCKS.get_active() - for element in self.get_connections() + self.get_blocks(): + blocks = sorted(self.iter_blocks(), key=methodcaller('get_enabled')) + for element in chain(self.iter_connections(), blocks): if hide_disabled_blocks and not element.get_enabled(): continue # skip hidden disabled blocks and connections element.draw(gc, window) diff --git a/grc/python/Generator.py b/grc/python/Generator.py index 98fbd0c360..3c687a2d64 100644 --- a/grc/python/Generator.py +++ b/grc/python/Generator.py @@ -173,7 +173,7 @@ class TopBlockGenerator(object): return code blocks = expr_utils.sort_objects( - filter(lambda b: b.get_enabled() and not b.get_bypassed(), self._flow_graph.get_blocks()), + filter(lambda b: b.get_enabled() and not b.get_bypassed(), self._flow_graph.iter_blocks()), lambda b: b.get_id(), _get_block_sort_text ) # List of regular blocks (all blocks minus the special ones) |