commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r8742 - gnuradio/branches/developers/jblum/gr-wxglgui/


From: jblum
Subject: [Commit-gnuradio] r8742 - gnuradio/branches/developers/jblum/gr-wxglgui/src/python
Date: Fri, 27 Jun 2008 18:54:57 -0600 (MDT)

Author: jblum
Date: 2008-06-27 18:54:55 -0600 (Fri, 27 Jun 2008)
New Revision: 8742

Added:
   gnuradio/branches/developers/jblum/gr-wxglgui/src/python/scopesink.py
Modified:
   gnuradio/branches/developers/jblum/gr-wxglgui/src/python/Makefile.am
   gnuradio/branches/developers/jblum/gr-wxglgui/src/python/fftsink.py
Log:
work on wxgl scopesink

Modified: gnuradio/branches/developers/jblum/gr-wxglgui/src/python/Makefile.am
===================================================================
--- gnuradio/branches/developers/jblum/gr-wxglgui/src/python/Makefile.am        
2008-06-27 21:40:03 UTC (rev 8741)
+++ gnuradio/branches/developers/jblum/gr-wxglgui/src/python/Makefile.am        
2008-06-28 00:54:55 UTC (rev 8742)
@@ -33,4 +33,5 @@
        gltext.py \
        plotter.py \
        common.py \
-       fftsink.py
+       fftsink.py \
+       scopesink.py

Modified: gnuradio/branches/developers/jblum/gr-wxglgui/src/python/fftsink.py
===================================================================
--- gnuradio/branches/developers/jblum/gr-wxglgui/src/python/fftsink.py 
2008-06-27 21:40:03 UTC (rev 8741)
+++ gnuradio/branches/developers/jblum/gr-wxglgui/src/python/fftsink.py 
2008-06-28 00:54:55 UTC (rev 8742)
@@ -35,6 +35,8 @@
 DEFAULT_FFT_RATE = gr.prefs().get_long('wxgui', 'fft_rate', 15)
 DEFAULT_WIN_SIZE = (640, 240)
 DIV_LEVELS = (1, 2, 5, 10, 20)
+FFT_PLOT_COLOR_SPEC = (0, 0, 1) 
+PEAK_VALS_COLOR_SPEC = (0, 1, 0)
 
 ##################################################
 # FFT window control panel
@@ -57,10 +59,10 @@
                control_box.AddStretchSpacer()
                control_box.Add(common.LabelText(self, 'Options'), 0, 
wx.ALIGN_CENTER)
                self.average_check_box = wx.CheckBox(parent=self, 
style=wx.CHK_2STATE, label="Average")
-               self.average_check_box.Bind(wx.EVT_CHECKBOX, self.on_average)
+               self.average_check_box.Bind(wx.EVT_CHECKBOX, self._on_average)
                control_box.Add(self.average_check_box, 0, wx.EXPAND)
                self.peak_hold_check_box = wx.CheckBox(parent=self, 
style=wx.CHK_2STATE, label="Peak Hold")
-               self.peak_hold_check_box.Bind(wx.EVT_CHECKBOX, 
self.on_peak_hold) 
+               self.peak_hold_check_box.Bind(wx.EVT_CHECKBOX, 
self._on_peak_hold) 
                control_box.Add(self.peak_hold_check_box, 0, wx.EXPAND)
           
                #radio buttons for div size
@@ -70,7 +72,7 @@
                self.radio_buttons = list()
                for y_per_div in DIV_LEVELS:
                        radio_button = wx.RadioButton(self, -1, "%d 
dB/div"%y_per_div)
-                       radio_button.Bind(wx.EVT_RADIOBUTTON, 
self.on_radio_button_change)
+                       radio_button.Bind(wx.EVT_RADIOBUTTON, 
self._on_radio_button_change)
                        self.radio_buttons.append(radio_button)
                        radio_box.Add(radio_button, 0, wx.ALIGN_LEFT)
                control_box.Add(radio_box, 0, wx.EXPAND)
@@ -81,10 +83,10 @@
                control_box.AddSpacer(2)
                button_box = wx.BoxSizer(wx.HORIZONTAL)         
                self.ref_plus_button = wx.Button(self, -1, '+', 
style=wx.BU_EXACTFIT)
-               self.ref_plus_button.Bind(wx.EVT_BUTTON, self.on_incr_ref_level)
+               self.ref_plus_button.Bind(wx.EVT_BUTTON, 
self._on_incr_ref_level)
                button_box.Add(self.ref_plus_button, 0, wx.ALIGN_CENTER)
                self.ref_minus_button = wx.Button(self, -1, ' - ', 
style=wx.BU_EXACTFIT)
-               self.ref_minus_button.Bind(wx.EVT_BUTTON, 
self.on_decr_ref_level)
+               self.ref_minus_button.Bind(wx.EVT_BUTTON, 
self._on_decr_ref_level)
                button_box.Add(self.ref_minus_button, 0, wx.ALIGN_CENTER)
                control_box.Add(button_box, 0, wx.ALIGN_CENTER)
                control_box.AddStretchSpacer()
@@ -109,14 +111,14 @@
        ##################################################
        # Event handlers
        ##################################################
-       def on_radio_button_change(self, event):
+       def _on_radio_button_change(self, event):
                selected_radio_button = filter(lambda rb: rb.GetValue(), 
self.radio_buttons)[0] 
                index = self.radio_buttons.index(selected_radio_button)
                self.parent.set_y_per_div(DIV_LEVELS[index])            
-       def on_average(self, event): self.parent.set_average(event.IsChecked())
-       def on_peak_hold(self, event): 
self.parent.set_peak_hold(event.IsChecked())             
-       def on_incr_ref_level(self, event): self.parent.incr_ref_level()
-       def on_decr_ref_level(self, event): self.parent.decr_ref_level()
+       def _on_average(self, event): self.parent.set_average(event.IsChecked())
+       def _on_peak_hold(self, event): 
self.parent.set_peak_hold(event.IsChecked())            
+       def _on_incr_ref_level(self, event): self.parent.incr_ref_level()
+       def _on_decr_ref_level(self, event): self.parent.decr_ref_level()
 
 ##################################################
 # FFT window with plotter and control panel
@@ -180,14 +182,14 @@
                        channel=1, 
                        samples=samples, 
                        offset=0.0, 
-                       color_spec=(0, 0, 1),
+                       color_spec=FFT_PLOT_COLOR_SPEC,
                )
                #plot the peak hold
                self.plotter.set_waveform(
                        channel=2, 
                        samples=self.peak_vals, 
                        offset=0.0, 
-                       color_spec=(0, 1, 0),
+                       color_spec=PEAK_VALS_COLOR_SPEC,
                )               
                #update the plotter
                self.plotter.update()

Added: gnuradio/branches/developers/jblum/gr-wxglgui/src/python/scopesink.py
===================================================================
--- gnuradio/branches/developers/jblum/gr-wxglgui/src/python/scopesink.py       
                        (rev 0)
+++ gnuradio/branches/developers/jblum/gr-wxglgui/src/python/scopesink.py       
2008-06-28 00:54:55 UTC (rev 8742)
@@ -0,0 +1,219 @@
+#
+# Copyright 2008 Free Software Foundation, Inc.
+# 
+# This file is part of GNU Radio
+# 
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+# 
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+# 
+
+##################################################
+# Imports
+##################################################
+from gnuradio import gr
+import plotter
+import common
+import wx
+import math
+import numpy
+
+##################################################
+# Constants
+##################################################
+DEFAULT_FRAME_DECIM = gr.prefs().get_long('wxgui', 'frame_decim', 15)
+DEFAULT_WIN_SIZE = (640, 240)
+DEFAULT_V_SCALE = 1000
+TRIGGER_MODES = (
+       ('Automatic', gr.gr_TRIG_AUTO), 
+       ('Negative', gr.gr_TRIG_NEG_SLOPE),     
+       ('Positive', gr.gr_TRIG_POS_SLOPE),     
+)
+TRIGGER_LEVELS = (
+       ('Automatic', None),
+       ('Low', -0.5),
+       ('Medium', 0.0),
+       ('High', 0.5),
+)
+
+##################################################
+# Scope window control panel
+##################################################
+class control_panel(wx.Panel):
+       """!
+       A control panel with wx widgits to control the plotter and scope block.
+       """
+       def __init__(self, parent):     
+               """!
+               Create a new control panel.
+               @param parent the wx parent window
+               """
+               self.parent = parent
+               wx.Panel.__init__(self, parent, -1, style=wx.SIMPLE_BORDER)     
+               control_box = wx.BoxSizer(wx.VERTICAL)
+               
+               #begin control box
+               control_box.AddStretchSpacer()
+               control_box.Add(common.LabelText(self, 'Select Channel'), 0, 
wx.ALIGN_CENTER)
+               control_box.AddSpacer(2)                                
+               #channel and trigger box
+               channel_trigger_box = wx.BoxSizer(wx.HORIZONTAL)
+               control_box.Add(channel_trigger_box, 0, wx.EXPAND)              
+               #channel chooser drop down
+               self.channel_chooser = wx.Choice(self, -1, choices=map(lambda 
ch: "Ch%d"%ch, range(1, parent.num_inputs+1)))
+               self.channel_chooser.Bind(wx.EVT_CHOICE, self._on_chooser)      
 
+               channel_trigger_box.Add(self.channel_chooser, 0, 
wx.ALIGN_CENTER)               
+               #trigger button
+               self.trigger_button = wx.Button(self, -1, 'Trigger', 
style=wx.BU_EXACTFIT)
+               self.trigger_button.Bind(wx.EVT_BUTTON, self._on_set_trigger)
+               channel_trigger_box.Add(self.trigger_button, 0, wx.ALIGN_CENTER)
+               
+               #offset slider
+               control_box.AddStretchSpacer()
+               control_box.Add(common.LabelText(self, 'Channel Offset'), 0, 
wx.ALIGN_CENTER)
+               control_box.AddSpacer(2)
+               self.offset_slider = wx.Slider(self, -1, style=wx.SL_HORIZONTAL)
+               control_box.Add(self.offset_slider, 0, wx.EXPAND)               
+               
+               #trigger mode
+               control_box.AddStretchSpacer()
+               control_box.Add(common.LabelText(self, 'Trigger Mode'), 0, 
wx.ALIGN_CENTER)
+               control_box.AddSpacer(2)
+               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_chooser)
+               control_box.Add(self.trigger_mode_chooser, 0, wx.ALIGN_CENTER)
+               
+               #trigger level
+               control_box.AddStretchSpacer()
+               control_box.Add(common.LabelText(self, 'Trigger Level'), 0, 
wx.ALIGN_CENTER)
+               control_box.AddSpacer(2)
+               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_chooser)
+               control_box.Add(self.trigger_level_chooser, 0, wx.ALIGN_CENTER) 
        
+               
+               #setup axis boxes
+               axis_box = wx.BoxSizer(wx.HORIZONTAL)   
+               x_axis_box = wx.BoxSizer(wx.VERTICAL)
+               y_axis_box = wx.BoxSizer(wx.VERTICAL)
+               axis_box.Add(x_axis_box, 1, wx.EXPAND)
+               axis_box.Add(y_axis_box, 1, wx.EXPAND)
+               control_box.AddStretchSpacer()
+               control_box.Add(axis_box, 0, wx.ALIGN_CENTER)
+               
+               #x axis
+               x_axis_box.Add(common.LabelText(self, 'Time Axis'), 0, 
wx.ALIGN_CENTER)
+               x_axis_box.AddSpacer(2)
+               button_box = wx.BoxSizer(wx.HORIZONTAL)         
+               self.x_plus_button = wx.Button(self, -1, '+', 
style=wx.BU_EXACTFIT)
+               #self.x_plus_button.Bind(wx.EVT_BUTTON, self.)
+               button_box.Add(self.x_plus_button, 0, wx.ALIGN_CENTER)
+               self.x_minus_button = wx.Button(self, -1, ' - ', 
style=wx.BU_EXACTFIT)
+               #self.x_minus_button.Bind(wx.EVT_BUTTON, self.)
+               button_box.Add(self.x_minus_button, 0, wx.ALIGN_CENTER)
+               x_axis_box.Add(button_box, 0, wx.ALIGN_CENTER)
+               
+               #y axis
+               y_axis_box.Add(common.LabelText(self, 'Y Axis'), 0, 
wx.ALIGN_CENTER)
+               y_axis_box.AddSpacer(2)
+               button_box = wx.BoxSizer(wx.HORIZONTAL)         
+               self.y_plus_button = wx.Button(self, -1, '+', 
style=wx.BU_EXACTFIT)
+               #self.y_plus_button.Bind(wx.EVT_BUTTON, self.)
+               button_box.Add(self.y_plus_button, 0, wx.ALIGN_CENTER)
+               self.y_minus_button = wx.Button(self, -1, ' - ', 
style=wx.BU_EXACTFIT)
+               #self.y_minus_button.Bind(wx.EVT_BUTTON, self.)
+               button_box.Add(self.y_minus_button, 0, wx.ALIGN_CENTER)
+               y_axis_box.Add(button_box, 0, wx.ALIGN_CENTER)                  
        
+               
+               #autorange
+               control_box.AddSpacer(5)
+               self.autorange_check_box = wx.CheckBox(parent=self, 
style=wx.CHK_2STATE, label="Autorange")
+               #self.autorange_check_box.Bind(wx.EVT_CHECKBOX, self.)
+               control_box.Add(self.autorange_check_box, 0, wx.ALIGN_LEFT)     
        
+               control_box.AddStretchSpacer()
+               
+               #set sizer
+               self.SetSizerAndFit(control_box)
+               #update
+               self.update()
+       
+       def update(self):
+               """!
+               Read the state of the scope plot settings and update the 
control panel.
+               """
+               #update the channel chooser
+               self.channel_chooser.SetSelection(self.parent.input_index)
+               #update the trigger button
+               if self.parent.trigger_index == self.parent.input_index:
+                       self.trigger_button.Disable()           
+               else: self.trigger_button.Enable()              
+               #update the slider
+               #TODO
+               #update the trigger mode chooser
+               
self.trigger_mode_chooser.SetSelection(self.parent.trigger_mode_index)
+               
self.trigger_level_chooser.SetSelection(self.parent.trigger_level_index)
+               
+       ##################################################
+       # Event handlers
+       ##################################################      
+       def _on_chooser(self, event): 
+               self.parent.input_index = self.channel_chooser.GetSelection()
+               self.parent.trigger_mode_index = 
self.trigger_mode_chooser.GetSelection()
+               self.parent.trigger_level_index = 
self.trigger_level_chooser.GetSelection()
+               self.update()           
+       def _on_set_trigger(self, event):
+               self.parent.trigger_index = self.parent.input_index
+               self.update()
+
+##################################################
+# Scope window with plotter and control panel
+##################################################
+class scope_window(wx.Panel):
+       def __init__(
+               self, 
+               parent,
+               size, 
+               title,
+               
+               num_inputs,
+       ):              
+               #setup
+               self.num_inputs = num_inputs
+               self.input_index = 0
+               self.trigger_index = 0
+               self.trigger_mode_index = 0
+               self.trigger_level_index = 0
+               #init panel and plot 
+               wx.Panel.__init__(self, parent, -1)                             
  
+               self.plotter = plotter.grid_plotter(self)  
+               self.plotter.SetSize(wx.Size(*size))
+               self.plotter.set_title(title)
+               #setup the box with plot and controls
+               self.control_panel = control_panel(self)
+               main_box = wx.BoxSizer(wx.HORIZONTAL)
+               main_box.Add(self.plotter, 1, wx.EXPAND)
+               main_box.Add(self.control_panel, 0, wx.EXPAND)
+               self.SetSizerAndFit(main_box)
+       
+def main(): 
+       app = wx.PySimpleApp()
+       frame = wx.Frame(None, -1, 'Demo', wx.DefaultPosition)
+       vbox = wx.BoxSizer(wx.VERTICAL)
+       win = scope_window(frame, DEFAULT_WIN_SIZE, 'Scope Demo', 4)
+       vbox.Add(win, 1, wx.EXPAND)
+       frame.SetSizerAndFit(vbox)
+       frame.Show()
+       app.MainLoop()
+       
+if __name__ == '__main__':
+       main()





reply via email to

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