diff options
-rw-r--r-- | grc/core/Block.py | 60 | ||||
-rw-r--r-- | grc/gui/BlockTreeWindow.py | 4 | ||||
-rw-r--r-- | grc/gui/PropsDialog.py | 2 |
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 |