summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--grc/core/Block.py60
-rw-r--r--grc/gui/BlockTreeWindow.py4
-rw-r--r--grc/gui/PropsDialog.py2
3 files changed, 37 insertions, 29 deletions
diff --git a/grc/core/Block.py b/grc/core/Block.py
index 829665954b..91bbeecee6 100644
--- a/grc/core/Block.py
+++ b/grc/core/Block.py
@@ -60,7 +60,7 @@ class Block(Element):
Make a new block from nested data.
Args:
- flow: graph the parent element
+ flow_graph: the parent element
n: the nested odict
Returns:
@@ -172,14 +172,8 @@ class Block(Element):
ports.append(port)
return ports
- def validate(self):
- """
- Validate this block.
- Call the base class validate.
- Evaluate the checks: each check must evaluate to True.
- """
- Element.validate(self)
- # Evaluate the checks
+ def _run_checks(self):
+ """Evaluate the checks"""
for check in self._checks:
check_res = self.resolve_dependencies(check)
try:
@@ -188,16 +182,8 @@ class Block(Element):
except:
self.add_error_message('Check "{}" did not evaluate.'.format(check))
- # For variables check the value (only if var_value is used
- if self.is_variable and self._var_value != '$value':
- value = self._var_value
- try:
- value = self.get_var_value()
- self.parent.evaluate(value)
- except Exception as err:
- self.add_error_message('Value "{}" cannot be evaluated:\n{}'.format(value, err))
-
- # check if this is a GUI block and matches the selected generate option
+ def _validate_generate_mode_compat(self):
+ """check if this is a GUI block and matches the selected generate option"""
current_generate_option = self.parent.get_option('generate_options')
def check_generate_mode(label, flag, valid_options):
@@ -211,6 +197,27 @@ class Block(Element):
check_generate_mode('WX GUI', BLOCK_FLAG_NEED_WX_GUI, ('wx_gui',))
check_generate_mode('QT GUI', BLOCK_FLAG_NEED_QT_GUI, ('qt_gui', 'hb_qt_gui'))
+
+ def _validate_var_value(self):
+ """or variables check the value (only if var_value is used)"""
+ if self.is_variable and self._var_value != '$value':
+ value = self._var_value
+ try:
+ value = self.get_var_value()
+ self.parent.evaluate(value)
+ except Exception as err:
+ self.add_error_message('Value "{}" cannot be evaluated:\n{}'.format(value, err))
+
+ def validate(self):
+ """
+ Validate this block.
+ Call the base class validate.
+ Evaluate the checks: each check must evaluate to True.
+ """
+ Element.validate(self)
+ self._run_checks()
+ self._validate_generate_mode_compat()
+ self._validate_var_value()
if self._epy_reload_error:
self.get_param('_source_code').add_error_message(str(self._epy_reload_error))
@@ -252,13 +259,6 @@ class Block(Element):
port._key = str(domain_specific_port_index[domain])
domain_specific_port_index[domain] += 1
- def get_doc(self):
- documentation = self.parent_platform.block_docstrings.get(self._key, {})
- from_xml = self._doc.strip()
- if from_xml:
- documentation[''] = from_xml
- return documentation
-
def get_imports(self, raw=False):
"""
Resolve all import statements.
@@ -396,6 +396,14 @@ class Block(Element):
update_ports('out', self.get_sources(), blk_io.sources, 'source')
self.rewrite()
+ @property
+ def documentation(self):
+ documentation = self.parent_platform.block_docstrings.get(self.get_key(), {})
+ from_xml = self._doc.strip()
+ if from_xml:
+ documentation[''] = from_xml
+ return documentation
+
# Main functions to get and set the block state
# Also kept get_enabled and set_enabled to keep compatibility
@property
diff --git a/grc/gui/BlockTreeWindow.py b/grc/gui/BlockTreeWindow.py
index 89aac53a0e..d62fedf0a3 100644
--- a/grc/gui/BlockTreeWindow.py
+++ b/grc/gui/BlockTreeWindow.py
@@ -178,7 +178,7 @@ class BlockTreeWindow(Gtk.VBox):
iter_ = treestore.insert_before(categories[category], None)
treestore.set_value(iter_, NAME_INDEX, block.get_name())
treestore.set_value(iter_, KEY_INDEX, block.get_key())
- treestore.set_value(iter_, DOC_INDEX, _format_doc(block.get_doc()))
+ treestore.set_value(iter_, DOC_INDEX, _format_doc(block.documentation))
def update_docs(self):
"""Update the documentation column of every block"""
@@ -188,7 +188,7 @@ class BlockTreeWindow(Gtk.VBox):
return # category node, no doc string
key = model.get_value(iter_, KEY_INDEX)
block = self.platform.blocks[key]
- model.set_value(iter_, DOC_INDEX, _format_doc(block.get_doc()))
+ model.set_value(iter_, DOC_INDEX, _format_doc(block.documentation))
self.treestore.foreach(update_doc)
self.treestore_search.foreach(update_doc)
diff --git a/grc/gui/PropsDialog.py b/grc/gui/PropsDialog.py
index f87ca6e7c1..152681237e 100644
--- a/grc/gui/PropsDialog.py
+++ b/grc/gui/PropsDialog.py
@@ -193,7 +193,7 @@ class PropsDialog(Gtk.Dialog):
buf.delete(buf.get_start_iter(), buf.get_end_iter())
pos = buf.get_end_iter()
- docstrings = self._block.get_doc()
+ docstrings = self._block.documentation
if not docstrings:
return