Merge branch 'wip/grc/draw' of http://gnuradio.org/git/jblum
[debian/gnuradio] / grc / gui / Param.py
index 3c5e99e9ebe10e68f94defd2e322a56c4a1334d8..b3018dab216a59b43b8539b72abb1a35172585bf 100644 (file)
@@ -30,16 +30,19 @@ class InputParam(gtk.HBox):
                gtk.HBox.__init__(self)
                self.param = param
                self._callback = callback
                gtk.HBox.__init__(self)
                self.param = param
                self._callback = callback
-               self.label = gtk.Label('') #no label, markup is added by set_markup
+               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
                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
+               #connect events
+               self.connect('show', self._update_gui)
        def set_color(self, color): pass
        def set_color(self, color): pass
+       def set_tooltip_text(self, text): pass
 
 
-       def update(self):
+       def _update_gui(self, *args):
                """
                """
-               Set the markup, color, and tooltip.
+               Set the markup, color, tooltip, show/hide.
                """
                #set the markup
                has_cb = \
                """
                #set the markup
                has_cb = \
@@ -49,10 +52,12 @@ class InputParam(gtk.HBox):
                #set the color
                self.set_color(self.param.get_color())
                #set the tooltip
                #set the color
                self.set_color(self.param.get_color())
                #set the tooltip
-               if self.tp: self.tp.set_tip(
-                       self.entry,
+               self.set_tooltip_text(
                        Utils.parse_template(TIP_MARKUP_TMPL, param=self.param).strip(),
                )
                        Utils.parse_template(TIP_MARKUP_TMPL, param=self.param).strip(),
                )
+               #show/hide
+               if self.param.get_hide() == 'all': self.hide_all()
+               else: self.show_all()
 
        def _handle_changed(self, *args):
                """
 
        def _handle_changed(self, *args):
                """
@@ -62,24 +67,23 @@ class InputParam(gtk.HBox):
                #set the new value
                self.param.set_value(self.get_text())
                #call the callback
                #set the new value
                self.param.set_value(self.get_text())
                #call the callback
-               if self._callback: self._callback()
-               #self.update() #dont update here, parent will update
+               if self._callback: self._callback(*args)
+               else: self.param.validate()
+               #gui update
+               self._update_gui()
 
 class EntryParam(InputParam):
        """Provide an entry box for strings and numbers."""
 
        def __init__(self, *args, **kwargs):
                InputParam.__init__(self, *args, **kwargs)
 
 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))
+               self._input = gtk.Entry()
+               self._input.set_text(self.param.get_value())
+               self._input.connect('changed', self._handle_changed)
+               self.pack_start(self._input, True)
+       def get_text(self): return self._input.get_text()
+       def set_color(self, color): self._input.modify_base(gtk.STATE_NORMAL, gtk.gdk.color_parse(color))
+       def set_tooltip_text(self, text): self._input.set_tooltip_text(text)
 
 class EnumParam(InputParam):
        """Provide an entry box for Enum types with a drop down menu."""
 
 class EnumParam(InputParam):
        """Provide an entry box for Enum types with a drop down menu."""
@@ -92,6 +96,7 @@ class EnumParam(InputParam):
                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()]
                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()]
+       def set_tooltip_text(self, text): self._input.set_tooltip_text(text)
 
 class EnumEntryParam(InputParam):
        """Provide an entry box and drop down menu for Raw Enum types."""
 
 class EnumEntryParam(InputParam):
        """Provide an entry box and drop down menu for Raw Enum types."""
@@ -110,6 +115,10 @@ class EnumEntryParam(InputParam):
        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 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_tooltip_text(self, text):
+               if self._input.get_active() == -1: #custom entry
+                       self._input.get_child().set_tooltip_text(text)
+               else: self._input.set_tooltip_text(text)
        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))
        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))
@@ -144,7 +153,7 @@ class Param(Element):
 
        def __init__(self): Element.__init__(self)
 
 
        def __init__(self): Element.__init__(self)
 
-       def get_input_class(self):
+       def get_input(self, *args, **kwargs):
                """
                Get the graphical gtk class to represent this parameter.
                An enum requires and combo parameter.
                """
                Get the graphical gtk class to represent this parameter.
                An enum requires and combo parameter.
@@ -152,30 +161,13 @@ class Param(Element):
                All others get a standard entry parameter.
                @return gtk input class
                """
                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.
-               Update the graphical input by calling the change handler.
-               """
-               if hasattr(self, '_input'): self._handle_changed()
-
-       def get_input_object(self, callback=None):
-               """
-               Get the graphical gtk object to represent this parameter.
-               @param callback a function to be called from the input object. 
-               @return gtk input object
-               """
-               return self.get_input_class()(self, callback=callback)
+               if self.is_enum(): return EnumParam(self, *args, **kwargs)
+               if self.get_options(): return EnumEntryParam(self, *args, **kwargs)
+               return EntryParam(self, *args, **kwargs)
 
 
-       def get_layout(self):
+       def get_markup(self):
                """
                """
-               Create a layout based on the current markup.
-               @return the pango layout
+               Get the markup for this param.
+               @return a pango markup string
                """
                """
-               layout = gtk.DrawingArea().create_pango_layout('')
-               layout.set_markup(Utils.parse_template(PARAM_MARKUP_TMPL, param=self))
-               return layout
+               return Utils.parse_template(PARAM_MARKUP_TMPL, param=self)