[Top][All Lists]
[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]
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r8926 - gnuradio/branches/features/experimental-gui,
jblum <=