]> git.gag.com Git - debian/gnuradio/commitdiff
added eng notation to slider gui control
authorjblum <jblum@221aa14e-8319-0410-a670-987f0aec2ac5>
Thu, 29 Jan 2009 06:20:41 +0000 (06:20 +0000)
committerjblum <jblum@221aa14e-8319-0410-a670-987f0aec2ac5>
Thu, 29 Jan 2009 06:20:41 +0000 (06:20 +0000)
git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@10333 221aa14e-8319-0410-a670-987f0aec2ac5

grc/src/grc_gnuradio/wxgui/callback_controls.py

index 4c64cd12a15ad2092527e298c791723e84798fed..2f474cf9f1eae3b4eb2479fff1dddc3486287d87 100644 (file)
@@ -20,6 +20,7 @@
 
 import wx
 import sys
+from gnuradio import eng_notation
 
 class LabelText(wx.StaticText):
        """Label text class for uniform labels among all controls."""
@@ -44,6 +45,8 @@ class _control_base(wx.BoxSizer):
 
        def get_value(self): raise NotImplementedError
 
+       def set_value(self): raise NotImplementedError
+
 class _chooser_control_base(_control_base):
        """House a drop down or radio buttons for variable control."""
 
@@ -184,13 +187,11 @@ class _slider_control_base(_control_base):
                try: slider.SetRange(0, num_steps)
                except Exception, e:
                        print >> sys.stderr, 'Error in set slider range: "%s".'%e
-                       sys.exit(-1)
+                       exit(-1)
                slider.Bind(wx.EVT_SCROLL, self._handle_scroll) #bind the scrolling event
                self.Add(slider, 0, wx.ALIGN_CENTER)
                #init slider and text box
-               self._value = value
-               self._set_slider_value(self._value) #sets the slider's value
-               self.text_box.SetValue(str(self._value))
+               self.set_value(value)
 
        def get_value(self):
                """
@@ -199,23 +200,36 @@ class _slider_control_base(_control_base):
                """
                return self._value
 
-       def _set_slider_value(self, real_value):
+       def set_value(self, value):
+               """
+               Set the current set value.
+               @param value the value (float)
                """
-               Translate the real numerical value into a slider value and,
-               write the value to the slider.
-               @param real_value the numeric value the slider should represent
+               self._value = value
+               self._update_slider()
+               self._update_text_box()
+
+       def _update_slider(self):
                """
-               slider_value = (float(real_value) - self.min)*self.num_steps/(self.max - self.min)
+               Translate the real numerical value into a slider value.
+               """
+               slider_value = (float(self.get_value()) - self.min)*self.num_steps/(self.max - self.min)
                self.slider.SetValue(slider_value)
 
+       def _update_text_box(self):
+               """
+               Update the text box value.
+               Convert the value into engineering notation.
+               """
+               self.text_box.SetValue(eng_notation.num_to_str(self.get_value()))
+
        def _handle_scroll(self, event=None):
                """
                A scroll event is detected. Read the slider, call the callback.
                """
                slider_value = self.slider.GetValue()
                new_value = slider_value*(self.max - self.min)/self.num_steps + self.min
-               self.text_box.SetValue(str(new_value))
-               self._value = new_value
+               self.set_value(new_value)
                try: self.call()
                except Exception, e: print >> sys.stderr, 'Error in exec callback from handle scroll.\n', e
 
@@ -223,9 +237,8 @@ class _slider_control_base(_control_base):
                """
                An enter key was pressed. Read the text box, call the callback.
                """
-               new_value = float(self.text_box.GetValue())
-               self._set_slider_value(new_value)
-               self._value = new_value
+               new_value = eng_notation.str_to_num(self.text_box.GetValue())
+               self.set_value(new_value)
                try: self.call()
                except Exception, e: print >> sys.stderr, 'Error in exec callback from handle enter.\n', e