diff options
author | Josh Blum | 2009-09-18 20:37:05 -0700 |
---|---|---|
committer | Josh Blum | 2009-09-18 20:37:05 -0700 |
commit | 24b3c103b859737d086d4813d6d345882b926e81 (patch) | |
tree | f3406f295082855b7b54d6d9234a93c037a97d45 | |
parent | 54f913876e5d92fa66f4bcf3a1c773a503e907f8 (diff) | |
download | gnuradio-24b3c103b859737d086d4813d6d345882b926e81.tar.gz gnuradio-24b3c103b859737d086d4813d6d345882b926e81.tar.bz2 gnuradio-24b3c103b859737d086d4813d6d345882b926e81.zip |
bug fix for handling loading of dynamic params
-rw-r--r-- | grc/base/Block.py | 24 | ||||
-rw-r--r-- | grc/base/FlowGraph.py | 1 | ||||
-rw-r--r-- | grc/todo.txt | 2 |
3 files changed, 17 insertions, 10 deletions
diff --git a/grc/base/Block.py b/grc/base/Block.py index cb21c3958..43f9ba4e9 100644 --- a/grc/base/Block.py +++ b/grc/base/Block.py @@ -233,12 +233,22 @@ class Block(Element): """ Import this block's params from nested data. Any param keys that do not exist will be ignored. + Since params can be dynamically created based another param, + call rewrite, and repeat the load until the params stick. + This call to rewrite will also create any dynamic ports + that are needed for the connections creation phase. @param n the nested data odict """ - params_n = n.findall('param') - for param_n in params_n: - key = param_n.find('key') - value = param_n.find('value') - #the key must exist in this block's params - if key in self.get_param_keys(): - self.get_param(key).set_value(value) + get_hash = lambda: reduce(lambda x, y: x | y, [hash(param) for param in self.get_params()], 0) + my_hash = 0 + while get_hash() != my_hash: + params_n = n.findall('param') + for param_n in params_n: + key = param_n.find('key') + value = param_n.find('value') + #the key must exist in this block's params + if key in self.get_param_keys(): + self.get_param(key).set_value(value) + #store hash and call rewrite + my_hash = get_hash() + self.rewrite() diff --git a/grc/base/FlowGraph.py b/grc/base/FlowGraph.py index ce370ca24..7c51ef42a 100644 --- a/grc/base/FlowGraph.py +++ b/grc/base/FlowGraph.py @@ -184,7 +184,6 @@ class FlowGraph(Element): #only load the block when the block key was valid if block: block.import_data(block_n) else: Messages.send_error_load('Block key "%s" not found in %s'%(key, self.get_parent())) - self.rewrite() #rewrite all blocks before connections are made (ex: nports) #build the connections for connection_n in connections_n: #try to make the connection diff --git a/grc/todo.txt b/grc/todo.txt index 7fa68e523..b4e3af39d 100644 --- a/grc/todo.txt +++ b/grc/todo.txt @@ -69,8 +69,6 @@ * threads dont die on exit in probe and variable sink * align param titles in properties dialog * weird grid params misbehaving -* the block's import data does not handle variable params - * call rewrite after load, if new params appear, try load again... ################################################## # Future |