commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r8926 - gnuradio/branches/features/experimental-gui


From: jblum
Subject: [Commit-gnuradio] r8926 - gnuradio/branches/features/experimental-gui
Date: Thu, 17 Jul 2008 14:45:59 -0600 (MDT)

Author: jblum
Date: 2008-07-17 14:45:56 -0600 (Thu, 17 Jul 2008)
New Revision: 8926

Modified:
   gnuradio/branches/features/experimental-gui/common.py
   gnuradio/branches/features/experimental-gui/const_window.py
   gnuradio/branches/features/experimental-gui/scope_window.py
Log:
drop down control

Modified: gnuradio/branches/features/experimental-gui/common.py
===================================================================
--- gnuradio/branches/features/experimental-gui/common.py       2008-07-17 
20:39:39 UTC (rev 8925)
+++ gnuradio/branches/features/experimental-gui/common.py       2008-07-17 
20:45:56 UTC (rev 8926)
@@ -39,7 +39,6 @@
        Read messages from the message queue.
        Forward messages to the message handler.
        """
-
        def __init__ (self, msgq, handle_msg):
                threading.Thread.__init__(self)
                self.setDaemon(1)
@@ -59,7 +58,6 @@
        Label text to give the wx plots a uniform look.
        Get the default label text and set the font bold.
        """
-
        def __init__(self, parent, label):
                wx.StaticText.__init__(self, parent, -1, label)
                font = self.GetFont()
@@ -70,7 +68,6 @@
        """!
        A horizontal box sizer with a increment and a decrement button.
        """
-
        def __init__(self, parent, on_incr, on_decr):
                """!
                @param parent the parent window
@@ -85,6 +82,7 @@
                self._decr_button.Bind(wx.EVT_BUTTON, on_decr)
                self.Add(self._decr_button, 0, wx.ALIGN_CENTER_VERTICAL)
 
+       def Disable(self, disable=True): self.Enable(not disable)
        def Enable(self, enable=True):
                if enable:
                        self._incr_button.Enable()
@@ -93,8 +91,6 @@
                        self._incr_button.Disable()
                        self._decr_button.Disable()
 
-       def Disable(self, disable=True): self.Enable(not disable)
-
 class RunStopButtonController(wx.Button):
        def __init__(self, parent, controller, control_key):
                wx.Button.__init__(self, parent, -1, '', style=wx.BU_EXACTFIT)
@@ -108,6 +104,10 @@
                controller.add_listener(control_key, lambda x: 
self.SetValue(bool(x)))
 
 class LogSliderController(wx.BoxSizer):
+       """!
+       Log slider controller with display label and slider.
+       Gives logarithmic scaling to slider operation.
+       """
        def __init__(self, parent, label, min_exp, max_exp, slider_steps, 
controller, control_key, formatter=lambda x: ': %.3f'%x):
                wx.BoxSizer.__init__(self, wx.VERTICAL)
                self._label = wx.StaticText(parent, -1, label + 
formatter(1/3.0))
@@ -126,6 +126,7 @@
                                self._slider.SetValue(slider_value)
                controller.add_listener(control_key, _on_controller_set)
 
+       def Disable(self, disable=True): self.Enable(not disable)
        def Enable(self, enable=True):
                if enable:
                        self._slider.Enable()
@@ -134,7 +135,41 @@
                        self._slider.Disable()
                        self._label.Disable()
 
+class DropDownController(wx.BoxSizer):
+       """!
+       Drop down controller with label and chooser.
+       Srop down selection from a set of choices.
+       """
+       def __init__(self, parent, label, choices, controller, control_key):
+               """!
+               @param parent the parent window
+               @param label the label for the drop down
+               @param choices a list of tuples -> (label, value)
+               @param controller the prop val controller
+               @param control_key the prop key for this control
+               """
+               wx.BoxSizer.__init__(self, wx.HORIZONTAL)
+               self._label = wx.StaticText(parent, -1, ' %s '%label)
+               self.Add(self._label, 1, wx.ALIGN_CENTER_VERTICAL)
+               self._chooser = wx.Choice(parent, -1, choices=[c[0] for c in 
choices])
+               def _on_chooser_event(event):
+                       controller[control_key] = 
choices[self._chooser.GetSelection()][1]
+               self._chooser.Bind(wx.EVT_CHOICE, _on_chooser_event)
+               self.Add(self._chooser, 0, wx.ALIGN_CENTER_VERTICAL)
+               def _on_controller_set(value):
+                       #only set the chooser if the value is a possible choice
+                       for i, choice in enumerate(choices):
+                               if value == choice[1]: 
self._chooser.SetSelection(i)
+               controller.add_listener(control_key, _on_controller_set)
+               
        def Disable(self, disable=True): self.Enable(not disable)
+       def Enable(self, enable=True):
+               if enable:
+                       self._chooser.Enable()
+                       self._label.Enable()
+               else:
+                       self._chooser.Disable()
+                       self._label.Disable()
 
 ##################################################
 # Shared Functions

Modified: gnuradio/branches/features/experimental-gui/const_window.py
===================================================================
--- gnuradio/branches/features/experimental-gui/const_window.py 2008-07-17 
20:39:39 UTC (rev 8925)
+++ gnuradio/branches/features/experimental-gui/const_window.py 2008-07-17 
20:45:56 UTC (rev 8926)
@@ -47,6 +47,7 @@
 RUNNING_KEY = 'running'
 X_DIVS_KEY = 'x_divs'
 Y_DIVS_KEY = 'y_divs'
+MARKER_KEY = 'marker'
 
 ##################################################
 # Constellation window control panel
@@ -69,12 +70,8 @@
                control_box.Add(common.LabelText(self, 'Options'), 0, 
wx.ALIGN_CENTER)
                #marker
                control_box.AddStretchSpacer()
-               hbox = wx.BoxSizer(wx.HORIZONTAL)
-               control_box.Add(hbox, 0, wx.EXPAND)
-               hbox.Add(wx.StaticText(self, -1, ' Marker '), 1, 
wx.ALIGN_CENTER_VERTICAL)
-               self.marker_chooser = wx.Choice(self, -1, choices=[m[0] for m 
in MARKER_TYPES])
-               self.marker_chooser.Bind(wx.EVT_CHOICE, self._on_marker)
-               hbox.Add(self.marker_chooser, 0, wx.ALIGN_CENTER_VERTICAL)
+               self.marker_chooser = common.DropDownController(self, 'Marker', 
MARKER_TYPES, parent.controller, MARKER_KEY)
+               control_box.Add(self.marker_chooser, 0, wx.EXPAND)
                #alpha
                control_box.AddStretchSpacer()
                self.alpha_slider = common.LogSliderController(
@@ -97,19 +94,7 @@
                control_box.Add(self.run_button, 0, wx.EXPAND)
                #set sizer
                self.SetSizerAndFit(control_box)
-               self.update()
-               
-       def update(self, *args):
-               self.marker_chooser.SetSelection(self.marker_index)
-               self.parent.marker = MARKER_TYPES[self.marker_index][1]
 
-       ##################################################
-       # Event handlers
-       ##################################################
-       def _on_marker(self, event):
-               self.marker_index = self.marker_chooser.GetSelection()
-               self.update()
-
 ##################################################
 # Constellation window with plotter and control panel
 ##################################################
@@ -157,6 +142,7 @@
                self._register_set_prop(self.controller, RUNNING_KEY, True)
                self._register_set_prop(self.controller, X_DIVS_KEY, 8)
                self._register_set_prop(self.controller, Y_DIVS_KEY, 8)
+               self._register_set_prop(self.controller, MARKER_KEY, '.')
                #register events
                self.ext_controller.add_listener(msg_key, self.handle_msg)
                for key in (
@@ -180,7 +166,7 @@
                        channel=0,
                        samples=(real, imag),
                        color_spec=CONST_PLOT_COLOR_SPEC,
-                       marker=self.marker,
+                       marker=self.controller[MARKER_KEY],
                )
                #update the plotter
                self.plotter.update()

Modified: gnuradio/branches/features/experimental-gui/scope_window.py
===================================================================
--- gnuradio/branches/features/experimental-gui/scope_window.py 2008-07-17 
20:39:39 UTC (rev 8925)
+++ gnuradio/branches/features/experimental-gui/scope_window.py 2008-07-17 
20:45:56 UTC (rev 8926)
@@ -36,7 +36,7 @@
 DEFAULT_WIN_SIZE = (600, 300)
 DEFAULT_V_SCALE = 1000
 TRIGGER_MODES = (
-       ('Auto', 0),
+       ('Off', 0),
        ('Neg', -1),
        ('Pos', +1),
 )
@@ -67,6 +67,9 @@
 Y_DIVS_KEY = 'y_divs'
 X_DIVS_KEY = 'x_divs'
 FRAME_RATE_KEY = 'frame_rate'
+TRIGGER_MODE_KEY = 'trigger_mode'
+TRIGGER_LEVEL_KEY = 'trigger_level'
+TRIGGER_CHANNEL_KEY = 'trigger_channel'
 
 ##################################################
 # Scope window control panel
@@ -83,35 +86,22 @@
                self.parent = parent
                wx.Panel.__init__(self, parent, -1, style=wx.SUNKEN_BORDER)
                control_box = wx.BoxSizer(wx.VERTICAL)
-               #trigger defaults
-               self.trigger_channel_index = 0 #ch 1
-               self.trigger_mode_index = 1 #not auto
-               self.trigger_level_index = 0 #auto
                #trigger options
                control_box.AddStretchSpacer()
                control_box.Add(common.LabelText(self, 'Trigger Options'), 0, 
wx.ALIGN_CENTER)
                control_box.AddSpacer(2)
                #trigger mode
-               hbox = wx.BoxSizer(wx.HORIZONTAL)
-               control_box.Add(hbox, 0, wx.EXPAND)
-               hbox.Add(wx.StaticText(self, -1, ' Channel '), 1, 
wx.ALIGN_CENTER_VERTICAL)
-               self.trigger_channel_chooser = wx.Choice(self, -1, 
choices=["Ch%d"%ch for ch in range(1, parent.num_inputs+1)])
-               self.trigger_channel_chooser.Bind(wx.EVT_CHOICE, 
self._on_trigger_channel)
-               hbox.Add(self.trigger_channel_chooser, 0, 
wx.ALIGN_CENTER_VERTICAL)
-               #trigger mode
-               hbox = wx.BoxSizer(wx.HORIZONTAL)
-               control_box.Add(hbox, 0, wx.EXPAND)
-               hbox.Add(wx.StaticText(self, -1, ' Mode '), 1, 
wx.ALIGN_CENTER_VERTICAL)
-               self.trigger_mode_chooser = wx.Choice(self, -1, choices=[tm[0] 
for tm in TRIGGER_MODES])
-               self.trigger_mode_chooser.Bind(wx.EVT_CHOICE, 
self._on_trigger_mode)
-               hbox.Add(self.trigger_mode_chooser, 0, wx.ALIGN_CENTER_VERTICAL)
+               self.trigger_mode_chooser = common.DropDownController(self, 
'Mode', TRIGGER_MODES, parent.controller, TRIGGER_MODE_KEY)
+               control_box.Add(self.trigger_mode_chooser, 0, wx.EXPAND)
                #trigger level
-               hbox = wx.BoxSizer(wx.HORIZONTAL)
-               control_box.Add(hbox, 0, wx.EXPAND)
-               hbox.Add(wx.StaticText(self, -1, ' Level '), 1, 
wx.ALIGN_CENTER_VERTICAL)
-               self.trigger_level_chooser = wx.Choice(self, -1, choices=[tl[0] 
for tl in TRIGGER_LEVELS])
-               self.trigger_level_chooser.Bind(wx.EVT_CHOICE, 
self._on_trigger_level)
-               hbox.Add(self.trigger_level_chooser, 0, 
wx.ALIGN_CENTER_VERTICAL)
+               self.trigger_level_chooser = common.DropDownController(self, 
'Level', TRIGGER_LEVELS, parent.controller, TRIGGER_LEVEL_KEY)
+               parent.controller.add_listener(TRIGGER_MODE_KEY, lambda x: 
self.trigger_level_chooser.Disable(x==0))
+               control_box.Add(self.trigger_level_chooser, 0, wx.EXPAND)
+               #trigger channel
+               choices = [('Ch%d'%(i+1), i) for i in range(parent.num_inputs)]
+               self.trigger_channel_chooser = common.DropDownController(self, 
'Channel', choices, parent.controller, TRIGGER_CHANNEL_KEY)
+               parent.controller.add_listener(TRIGGER_MODE_KEY, lambda x: 
self.trigger_channel_chooser.Disable(x==0))
+               control_box.Add(self.trigger_channel_chooser, 0, wx.EXPAND)
                #axes options
                SPACING = 15
                control_box.AddStretchSpacer()
@@ -154,30 +144,10 @@
                control_box.Add(self.run_button, 0, wx.EXPAND)
                #set sizer
                self.SetSizerAndFit(control_box)
-               #initial update
-               self.update_trigger_menu()
-               
-       def update_trigger_menu(self, *args):
-               
self.trigger_channel_chooser.SetSelection(self.trigger_channel_index)
-               self.parent.trigger_channel = self.trigger_channel_index
-               self.trigger_mode_chooser.SetSelection(self.trigger_mode_index)
-               self.parent.trigger_mode = 
TRIGGER_MODES[self.trigger_mode_index][1]
-               
self.trigger_level_chooser.SetSelection(self.trigger_level_index)
-               self.parent.trigger_level = 
TRIGGER_LEVELS[self.trigger_level_index][1]
 
        ##################################################
        # Event handlers
        ##################################################
-       def _on_trigger_channel(self, event):
-               self.trigger_channel_index = 
self.trigger_channel_chooser.GetSelection()
-               self.update_trigger_menu()
-       def _on_trigger_mode(self, event):
-               self.trigger_mode_index = 
self.trigger_mode_chooser.GetSelection()
-               self.update_trigger_menu()
-       def _on_trigger_level(self, event):
-               self.trigger_level_index = 
self.trigger_level_chooser.GetSelection()
-               self.update_trigger_menu()
-       
        def _on_incr_x_divs(self, event):
                self.parent.set_x_per_div(
                        
common.get_clean_incr(self.parent.controller[X_PER_DIV_KEY]))
@@ -259,6 +229,9 @@
                self._register_set_prop(self.controller, X_DIVS_KEY, 8)
                self._register_set_prop(self.controller, Y_DIVS_KEY, 8)
                self._register_set_prop(self.controller, FRAME_RATE_KEY, 
frame_rate)
+               self._register_set_prop(self.controller, TRIGGER_CHANNEL_KEY, 1)
+               self._register_set_prop(self.controller, TRIGGER_MODE_KEY, 1)
+               self._register_set_prop(self.controller, TRIGGER_LEVEL_KEY, 
None)
                #register events
                self.ext_controller.add_listener(msg_key, self.handle_msg)
                self.ext_controller.add_listener(sample_rate_key, 
self.update_decim)
@@ -290,14 +263,14 @@
                        self.update_decim()
                if self.frame_counter == 0: #decimate
                        #trigger level (must do before ac coupling)
-                       self.ext_controller[self.scope_trigger_channel_key] = 
self.trigger_channel
-                       self.ext_controller[self.scope_trigger_mode_key] = 
self.trigger_mode
-                       if self.trigger_level is None:
-                               
self.ext_controller[self.scope_trigger_level_key] = ''
+                       self.ext_controller[self.scope_trigger_channel_key] = 
self.controller[TRIGGER_CHANNEL_KEY]
+                       self.ext_controller[self.scope_trigger_mode_key] = 
self.controller[TRIGGER_MODE_KEY]
+                       trigger_level = self.controller[TRIGGER_LEVEL_KEY]
+                       if trigger_level is None: 
self.ext_controller[self.scope_trigger_level_key] = ''
                        else:
-                               samples = sampleses[self.trigger_channel]
+                               samples = 
sampleses[self.controller[TRIGGER_CHANNEL_KEY]]
                                
self.ext_controller[self.scope_trigger_level_key] = \
-                               
self.trigger_level*(numpy.max(samples)-numpy.min(samples))/2 + 
numpy.average(samples)
+                               
trigger_level*(numpy.max(samples)-numpy.min(samples))/2 + numpy.average(samples)
                        #ac coupling
                        if self.controller[AC_COUPLE_KEY]:
                                sampleses = [samples - numpy.average(samples) 
for samples in sampleses]





reply via email to

[Prev in Thread] Current Thread [Next in Thread]