summaryrefslogtreecommitdiff
path: root/grc/gui/Param.py
diff options
context:
space:
mode:
authorJohnathan Corgan2009-09-04 15:47:49 -0700
committerJohnathan Corgan2009-09-04 15:47:49 -0700
commitd80add605536891da950126b25b16ab89d8e7cae (patch)
tree10777578472d39e25a821284e1409be7a6caae89 /grc/gui/Param.py
parent20006003431d7260b04964eb684b1746ffb0a85f (diff)
parent6b47cc3dc64d86cb19eb28ab4843a0f278db6d0a (diff)
downloadgnuradio-d80add605536891da950126b25b16ab89d8e7cae.tar.gz
gnuradio-d80add605536891da950126b25b16ab89d8e7cae.tar.bz2
gnuradio-d80add605536891da950126b25b16ab89d8e7cae.zip
Merge branch 'grc' from http://gnuradio.org/git/jblum.git into master
we dont use test() -> remove it Made the window for the pass band filters integers (take firdes.WIN_XXX). Evaluation fix in param.to_code(). Removed the flagging api and usage from the base classes. added ref scale param to fft and waterfall Switched the python classes to inherit from the base and gui classes. port and param types from an overloaded method todo Replaced TYPES in Port and Param with types parameter. made is_virtual_xxx a block level function, used by port and param classes added stream id type and checking in evaluate avoid loops Recursive resolution of virtual sources. added virtual source and added stream ids, logic to clone in port added rewrite methods to element to separate from validation logic Added virtual sink and logic to clone port. removed repurposing of pads Work on command line options for generated code. renamed the colors dialog to types use pkgpythondir ...
Diffstat (limited to 'grc/gui/Param.py')
-rw-r--r--grc/gui/Param.py77
1 files changed, 77 insertions, 0 deletions
diff --git a/grc/gui/Param.py b/grc/gui/Param.py
index a11fd9065..4955d3336 100644
--- a/grc/gui/Param.py
+++ b/grc/gui/Param.py
@@ -23,6 +23,71 @@ import pygtk
pygtk.require('2.0')
import gtk
+class InputParam(gtk.HBox):
+ """The base class for an input parameter inside the input parameters dialog."""
+
+ def __init__(self, param, _handle_changed):
+ gtk.HBox.__init__(self)
+ self.param = param
+ self._handle_changed = _handle_changed
+ self.label = gtk.Label('') #no label, markup is added by set_markup
+ self.label.set_size_request(150, -1)
+ self.pack_start(self.label, False)
+ self.set_markup = lambda m: self.label.set_markup(m)
+ self.tp = None
+ def set_color(self, color): pass
+
+class EntryParam(InputParam):
+ """Provide an entry box for strings and numbers."""
+
+ def __init__(self, *args, **kwargs):
+ InputParam.__init__(self, *args, **kwargs)
+ self.entry = input = gtk.Entry()
+ input.set_text(self.param.get_value())
+ input.connect('changed', self._handle_changed)
+ self.pack_start(input, True)
+ self.get_text = input.get_text
+ #tool tip
+ self.tp = gtk.Tooltips()
+ self.tp.set_tip(self.entry, '')
+ self.tp.enable()
+ def set_color(self, color): self.entry.modify_base(gtk.STATE_NORMAL, gtk.gdk.color_parse(color))
+
+class EnumParam(InputParam):
+ """Provide an entry box for Enum types with a drop down menu."""
+
+ def __init__(self, *args, **kwargs):
+ InputParam.__init__(self, *args, **kwargs)
+ self._input = gtk.combo_box_new_text()
+ for option in self.param.get_options(): self._input.append_text(option.get_name())
+ self._input.set_active(self.param.get_option_keys().index(self.param.get_value()))
+ self._input.connect('changed', self._handle_changed)
+ self.pack_start(self._input, False)
+ def get_text(self): return self.param.get_option_keys()[self._input.get_active()]
+
+class EnumEntryParam(InputParam):
+ """Provide an entry box and drop down menu for Raw Enum types."""
+
+ def __init__(self, *args, **kwargs):
+ InputParam.__init__(self, *args, **kwargs)
+ self._input = gtk.combo_box_entry_new_text()
+ for option in self.param.get_options(): self._input.append_text(option.get_name())
+ try: self._input.set_active(self.param.get_option_keys().index(self.param.get_value()))
+ except:
+ self._input.set_active(-1)
+ self._input.get_child().set_text(self.param.get_value())
+ self._input.connect('changed', self._handle_changed)
+ self._input.get_child().connect('changed', self._handle_changed)
+ self.pack_start(self._input, False)
+ def get_text(self):
+ if self._input.get_active() == -1: return self._input.get_child().get_text()
+ return self.param.get_option_keys()[self._input.get_active()]
+ def set_color(self, color):
+ if self._input.get_active() == -1: #custom entry, use color
+ self._input.get_child().modify_base(gtk.STATE_NORMAL, gtk.gdk.color_parse(color))
+ else: #from enum, make white background
+ self._input.get_child().modify_base(gtk.STATE_NORMAL, gtk.gdk.color_parse('#ffffff'))
+
PARAM_MARKUP_TMPL="""\
#set $foreground = $param.is_valid() and 'black' or 'red'
<span foreground="$foreground" font_desc="Sans 7.5"><b>$encode($param.get_name()): </b>$encode(repr($param))</span>"""
@@ -49,6 +114,18 @@ Error:
class Param(Element):
"""The graphical parameter."""
+ def get_input_class(self):
+ """
+ Get the graphical gtk class to represent this parameter.
+ An enum requires and combo parameter.
+ A non-enum with options gets a combined entry/combo parameter.
+ All others get a standard entry parameter.
+ @return gtk input class
+ """
+ if self.is_enum(): return EnumParam
+ if self.get_options(): return EnumEntryParam
+ return EntryParam
+
def update(self):
"""
Called when an external change occurs.