summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Blum2009-09-18 20:37:05 -0700
committerJosh Blum2009-09-18 20:37:05 -0700
commit24b3c103b859737d086d4813d6d345882b926e81 (patch)
treef3406f295082855b7b54d6d9234a93c037a97d45
parent54f913876e5d92fa66f4bcf3a1c773a503e907f8 (diff)
downloadgnuradio-24b3c103b859737d086d4813d6d345882b926e81.tar.gz
gnuradio-24b3c103b859737d086d4813d6d345882b926e81.tar.bz2
gnuradio-24b3c103b859737d086d4813d6d345882b926e81.zip
bug fix for handling loading of dynamic params
-rw-r--r--grc/base/Block.py24
-rw-r--r--grc/base/FlowGraph.py1
-rw-r--r--grc/todo.txt2
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