summaryrefslogtreecommitdiff
path: root/grc
diff options
context:
space:
mode:
Diffstat (limited to 'grc')
-rw-r--r--grc/base/Block.py18
-rw-r--r--grc/base/Constants.py2
-rw-r--r--grc/python/Block.py3
-rw-r--r--grc/python/block.dtd5
4 files changed, 22 insertions, 6 deletions
diff --git a/grc/base/Block.py b/grc/base/Block.py
index b367e60e69..d2d7ebf426 100644
--- a/grc/base/Block.py
+++ b/grc/base/Block.py
@@ -18,13 +18,16 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
"""
from . import odict
-from . Constants import ADVANCED_PARAM_TAB, DEFAULT_PARAM_TAB
+from . Constants import ADVANCED_PARAM_TAB, DEFAULT_PARAM_TAB, BLOCK_FLAG_THROTTLE
from Element import Element
from Cheetah.Template import Template
from UserDict import UserDict
from itertools import imap
+from .. gui import Messages
+
+
class TemplateArg(UserDict):
"""
A cheetah template argument created from a param.
@@ -46,11 +49,16 @@ class TemplateArg(UserDict):
def __call__(self):
return self._param.get_evaluated()
-def _get_keys(lst): return [elem.get_key() for elem in lst]
+
+def _get_keys(lst):
+ return [elem.get_key() for elem in lst]
+
+
def _get_elem(lst, key):
try: return lst[_get_keys(lst).index(key)]
except ValueError: raise ValueError, 'Key "%s" not found in %s.'%(key, _get_keys(lst))
+
class Block(Element):
def __init__(self, flow_graph, n):
@@ -73,6 +81,9 @@ class Block(Element):
self._name = n.find('name')
self._key = n.find('key')
self._category = n.find('category') or ''
+ self._flags = n.find('flags') or ''
+ if n.find('throttle') and BLOCK_FLAG_THROTTLE not in self._flags: # backwards-compatibility
+ self._flags += BLOCK_FLAG_THROTTLE
self._grc_source = n.find('grc_source') or ''
self._block_wrapper_path = n.find('block_wrapper_path')
self._bussify_sink = n.find('bus_sink')
@@ -240,6 +251,9 @@ class Block(Element):
def get_block_wrapper_path(self): return self._block_wrapper_path
def get_comment(self): return self.get_param('comment').get_value()
+ def get_flags(self): return self._flags
+ def throttle(self): return "throttle" in self._flags
+
##############################################
# Access Params
##############################################
diff --git a/grc/base/Constants.py b/grc/base/Constants.py
index efae0ecbb5..7949708d5b 100644
--- a/grc/base/Constants.py
+++ b/grc/base/Constants.py
@@ -38,3 +38,5 @@ DOMAIN_DTD = os.path.join(DATA_DIR, 'domain.dtd')
GR_STREAM_DOMAIN = "gr_stream"
GR_MESSAGE_DOMAIN = "gr_message"
DEFAULT_DOMAIN = GR_STREAM_DOMAIN
+
+BLOCK_FLAG_THROTTLE = 'throttle'
diff --git a/grc/python/Block.py b/grc/python/Block.py
index 191b03b452..5d52e2bf3c 100644
--- a/grc/python/Block.py
+++ b/grc/python/Block.py
@@ -52,7 +52,6 @@ class Block(_Block, _GUIBlock):
self._var_make = n.find('var_make')
self._checks = n.findall('check')
self._callbacks = n.findall('callback')
- self._throttle = n.find('throttle') or ''
self._bus_structure_source = n.find('bus_structure_source') or ''
self._bus_structure_sink = n.find('bus_structure_sink') or ''
#build the block
@@ -78,8 +77,6 @@ class Block(_Block, _GUIBlock):
except: return ''
- def throttle(self): return bool(self._throttle)
-
def validate(self):
"""
Validate this block.
diff --git a/grc/python/block.dtd b/grc/python/block.dtd
index 8cfd3dd392..145f4d8610 100644
--- a/grc/python/block.dtd
+++ b/grc/python/block.dtd
@@ -25,7 +25,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
Top level element.
A block contains a name, ...parameters list, and list of IO ports.
-->
-<!ELEMENT block (name, key, category?, throttle?, import*, var_make?, var_value?, make, callback*, param_tab_order?, param*, bus_sink?, bus_source?, check*, sink*, source*, bus_structure_sink?, bus_structure_source?, doc?, grc_source?)>
+<!ELEMENT block (name, key, category?, throttle?, flags?, import*, var_make?, var_value?,
+ make, callback*, param_tab_order?, param*, bus_sink?, bus_source?, check*,
+ sink*, source*, bus_structure_sink?, bus_structure_source?, doc?, grc_source?)>
<!--
Sub level elements.
-->
@@ -64,3 +66,4 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
<!ELEMENT callback (#PCDATA)>
<!ELEMENT optional (#PCDATA)>
<!ELEMENT throttle (#PCDATA)>
+<!ELEMENT flags (#PCDATA)>