Changeset 8926
- Timestamp:
- 07/17/08 14:45:56
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
gnuradio/branches/features/experimental-gui/common.py
r8909 r8926 40 40 Forward messages to the message handler. 41 41 """ 42 43 42 def __init__ (self, msgq, handle_msg): 44 43 threading.Thread.__init__(self) … … 60 59 Get the default label text and set the font bold. 61 60 """ 62 63 61 def __init__(self, parent, label): 64 62 wx.StaticText.__init__(self, parent, -1, label) … … 71 69 A horizontal box sizer with a increment and a decrement button. 72 70 """ 73 74 71 def __init__(self, parent, on_incr, on_decr): 75 72 """! … … 86 83 self.Add(self._decr_button, 0, wx.ALIGN_CENTER_VERTICAL) 87 84 85 def Disable(self, disable=True): self.Enable(not disable) 88 86 def Enable(self, enable=True): 89 87 if enable: … … 94 92 self._decr_button.Disable() 95 93 96 def Disable(self, disable=True): self.Enable(not disable)97 98 94 class RunStopButtonController(wx.Button): 99 95 def __init__(self, parent, controller, control_key): … … 109 105 110 106 class LogSliderController(wx.BoxSizer): 107 """! 108 Log slider controller with display label and slider. 109 Gives logarithmic scaling to slider operation. 110 """ 111 111 def __init__(self, parent, label, min_exp, max_exp, slider_steps, controller, control_key, formatter=lambda x: ': %.3f'%x): 112 112 wx.BoxSizer.__init__(self, wx.VERTICAL) … … 127 127 controller.add_listener(control_key, _on_controller_set) 128 128 129 def Disable(self, disable=True): self.Enable(not disable) 129 130 def Enable(self, enable=True): 130 131 if enable: … … 135 136 self._label.Disable() 136 137 138 class DropDownController(wx.BoxSizer): 139 """! 140 Drop down controller with label and chooser. 141 Srop down selection from a set of choices. 142 """ 143 def __init__(self, parent, label, choices, controller, control_key): 144 """! 145 @param parent the parent window 146 @param label the label for the drop down 147 @param choices a list of tuples -> (label, value) 148 @param controller the prop val controller 149 @param control_key the prop key for this control 150 """ 151 wx.BoxSizer.__init__(self, wx.HORIZONTAL) 152 self._label = wx.StaticText(parent, -1, ' %s '%label) 153 self.Add(self._label, 1, wx.ALIGN_CENTER_VERTICAL) 154 self._chooser = wx.Choice(parent, -1, choices=[c[0] for c in choices]) 155 def _on_chooser_event(event): 156 controller[control_key] = choices[self._chooser.GetSelection()][1] 157 self._chooser.Bind(wx.EVT_CHOICE, _on_chooser_event) 158 self.Add(self._chooser, 0, wx.ALIGN_CENTER_VERTICAL) 159 def _on_controller_set(value): 160 #only set the chooser if the value is a possible choice 161 for i, choice in enumerate(choices): 162 if value == choice[1]: self._chooser.SetSelection(i) 163 controller.add_listener(control_key, _on_controller_set) 164 137 165 def Disable(self, disable=True): self.Enable(not disable) 166 def Enable(self, enable=True): 167 if enable: 168 self._chooser.Enable() 169 self._label.Enable() 170 else: 171 self._chooser.Disable() 172 self._label.Disable() 138 173 139 174 ################################################## gnuradio/branches/features/experimental-gui/const_window.py
r8909 r8926 48 48 X_DIVS_KEY = 'x_divs' 49 49 Y_DIVS_KEY = 'y_divs' 50 MARKER_KEY = 'marker' 50 51 51 52 ################################################## … … 70 71 #marker 71 72 control_box.AddStretchSpacer() 72 hbox = wx.BoxSizer(wx.HORIZONTAL) 73 control_box.Add(hbox, 0, wx.EXPAND) 74 hbox.Add(wx.StaticText(self, -1, ' Marker '), 1, wx.ALIGN_CENTER_VERTICAL) 75 self.marker_chooser = wx.Choice(self, -1, choices=[m[0] for m in MARKER_TYPES]) 76 self.marker_chooser.Bind(wx.EVT_CHOICE, self._on_marker) 77 hbox.Add(self.marker_chooser, 0, wx.ALIGN_CENTER_VERTICAL) 73 self.marker_chooser = common.DropDownController(self, 'Marker', MARKER_TYPES, parent.controller, MARKER_KEY) 74 control_box.Add(self.marker_chooser, 0, wx.EXPAND) 78 75 #alpha 79 76 control_box.AddStretchSpacer() … … 98 95 #set sizer 99 96 self.SetSizerAndFit(control_box) 100 self.update()101 102 def update(self, *args):103 self.marker_chooser.SetSelection(self.marker_index)104 self.parent.marker = MARKER_TYPES[self.marker_index][1]105 106 ##################################################107 # Event handlers108 ##################################################109 def _on_marker(self, event):110 self.marker_index = self.marker_chooser.GetSelection()111 self.update()112 97 113 98 ################################################## … … 158 143 self._register_set_prop(self.controller, X_DIVS_KEY, 8) 159 144 self._register_set_prop(self.controller, Y_DIVS_KEY, 8) 145 self._register_set_prop(self.controller, MARKER_KEY, '.') 160 146 #register events 161 147 self.ext_controller.add_listener(msg_key, self.handle_msg) … … 181 167 samples=(real, imag), 182 168 color_spec=CONST_PLOT_COLOR_SPEC, 183 marker=self. marker,169 marker=self.controller[MARKER_KEY], 184 170 ) 185 171 #update the plotter gnuradio/branches/features/experimental-gui/scope_window.py
r8897 r8926 37 37 DEFAULT_V_SCALE = 1000 38 38 TRIGGER_MODES = ( 39 (' Auto', 0),39 ('Off', 0), 40 40 ('Neg', -1), 41 41 ('Pos', +1), … … 68 68 X_DIVS_KEY = 'x_divs' 69 69 FRAME_RATE_KEY = 'frame_rate' 70 TRIGGER_MODE_KEY = 'trigger_mode' 71 TRIGGER_LEVEL_KEY = 'trigger_level' 72 TRIGGER_CHANNEL_KEY = 'trigger_channel' 70 73 71 74 ################################################## … … 84 87 wx.Panel.__init__(self, parent, -1, style=wx.SUNKEN_BORDER) 85 88 control_box = wx.BoxSizer(wx.VERTICAL) 86 #trigger defaults87 self.trigger_channel_index = 0 #ch 188 self.trigger_mode_index = 1 #not auto89 self.trigger_level_index = 0 #auto90 89 #trigger options 91 90 control_box.AddStretchSpacer() … … 93 92 control_box.AddSpacer(2) 94 93 #trigger mode 95 hbox = wx.BoxSizer(wx.HORIZONTAL) 96 control_box.Add(hbox, 0, wx.EXPAND) 97 hbox.Add(wx.StaticText(self, -1, ' Channel '), 1, wx.ALIGN_CENTER_VERTICAL) 98 self.trigger_channel_chooser = wx.Choice(self, -1, choices=["Ch%d"%ch for ch in range(1, parent.num_inputs+1)]) 99 self.trigger_channel_chooser.Bind(wx.EVT_CHOICE, self._on_trigger_channel) 100 hbox.Add(self.trigger_channel_chooser, 0, wx.ALIGN_CENTER_VERTICAL) 101 #trigger mode 102 hbox = wx.BoxSizer(wx.HORIZONTAL) 103 control_box.Add(hbox, 0, wx.EXPAND) 104 hbox.Add(wx.StaticText(self, -1, ' Mode '), 1, wx.ALIGN_CENTER_VERTICAL) 105 self.trigger_mode_chooser = wx.Choice(self, -1, choices=[tm[0] for tm in TRIGGER_MODES]) 106 self.trigger_mode_chooser.Bind(wx.EVT_CHOICE, self._on_trigger_mode) 107 hbox.Add(self.trigger_mode_chooser, 0, wx.ALIGN_CENTER_VERTICAL) 94 self.trigger_mode_chooser = common.DropDownController(self, 'Mode', TRIGGER_MODES, parent.controller, TRIGGER_MODE_KEY) 95 control_box.Add(self.trigger_mode_chooser, 0, wx.EXPAND) 108 96 #trigger level 109 hbox = wx.BoxSizer(wx.HORIZONTAL) 110 control_box.Add(hbox, 0, wx.EXPAND) 111 hbox.Add(wx.StaticText(self, -1, ' Level '), 1, wx.ALIGN_CENTER_VERTICAL) 112 self.trigger_level_chooser = wx.Choice(self, -1, choices=[tl[0] for tl in TRIGGER_LEVELS]) 113 self.trigger_level_chooser.Bind(wx.EVT_CHOICE, self._on_trigger_level) 114 hbox.Add(self.trigger_level_chooser, 0, wx.ALIGN_CENTER_VERTICAL) 97 self.trigger_level_chooser = common.DropDownController(self, 'Level', TRIGGER_LEVELS, parent.controller, TRIGGER_LEVEL_KEY) 98 parent.controller.add_listener(TRIGGER_MODE_KEY, lambda x: self.trigger_level_chooser.Disable(x==0)) 99 control_box.Add(self.trigger_level_chooser, 0, wx.EXPAND) 100 #trigger channel 101 choices = [('Ch%d'%(i+1), i) for i in range(parent.num_inputs)] 102 self.trigger_channel_chooser = common.DropDownController(self, 'Channel', choices, parent.controller, TRIGGER_CHANNEL_KEY) 103 parent.controller.add_listener(TRIGGER_MODE_KEY, lambda x: self.trigger_channel_chooser.Disable(x==0)) 104 control_box.Add(self.trigger_channel_chooser, 0, wx.EXPAND) 115 105 #axes options 116 106 SPACING = 15 … … 155 145 #set sizer 156 146 self.SetSizerAndFit(control_box) 157 #initial update158 self.update_trigger_menu()159 160 def update_trigger_menu(self, *args):161 self.trigger_channel_chooser.SetSelection(self.trigger_channel_index)162 self.parent.trigger_channel = self.trigger_channel_index163 self.trigger_mode_chooser.SetSelection(self.trigger_mode_index)164 self.parent.trigger_mode = TRIGGER_MODES[self.trigger_mode_index][1]165 self.trigger_level_chooser.SetSelection(self.trigger_level_index)166 self.parent.trigger_level = TRIGGER_LEVELS[self.trigger_level_index][1]167 147 168 148 ################################################## 169 149 # Event handlers 170 150 ################################################## 171 def _on_trigger_channel(self, event):172 self.trigger_channel_index = self.trigger_channel_chooser.GetSelection()173 self.update_trigger_menu()174 def _on_trigger_mode(self, event):175 self.trigger_mode_index = self.trigger_mode_chooser.GetSelection()176 self.update_trigger_menu()177 def _on_trigger_level(self, event):178 self.trigger_level_index = self.trigger_level_chooser.GetSelection()179 self.update_trigger_menu()180 181 151 def _on_incr_x_divs(self, event): 182 152 self.parent.set_x_per_div( … … 260 230 self._register_set_prop(self.controller, Y_DIVS_KEY, 8) 261 231 self._register_set_prop(self.controller, FRAME_RATE_KEY, frame_rate) 232 self._register_set_prop(self.controller, TRIGGER_CHANNEL_KEY, 1) 233 self._register_set_prop(self.controller, TRIGGER_MODE_KEY, 1) 234 self._register_set_prop(self.controller, TRIGGER_LEVEL_KEY, None) 262 235 #register events 263 236 self.ext_controller.add_listener(msg_key, self.handle_msg) … … 291 264 if self.frame_counter == 0: #decimate 292 265 #trigger level (must do before ac coupling) 293 self.ext_controller[self.scope_trigger_channel_key] = self. trigger_channel294 self.ext_controller[self.scope_trigger_mode_key] = self. trigger_mode295 if self.trigger_level is None:296 self.ext_controller[self.scope_trigger_level_key] = ''266 self.ext_controller[self.scope_trigger_channel_key] = self.controller[TRIGGER_CHANNEL_KEY] 267 self.ext_controller[self.scope_trigger_mode_key] = self.controller[TRIGGER_MODE_KEY] 268 trigger_level = self.controller[TRIGGER_LEVEL_KEY] 269 if trigger_level is None: self.ext_controller[self.scope_trigger_level_key] = '' 297 270 else: 298 samples = sampleses[self. trigger_channel]271 samples = sampleses[self.controller[TRIGGER_CHANNEL_KEY]] 299 272 self.ext_controller[self.scope_trigger_level_key] = \ 300 self.trigger_level*(numpy.max(samples)-numpy.min(samples))/2 + numpy.average(samples)273 trigger_level*(numpy.max(samples)-numpy.min(samples))/2 + numpy.average(samples) 301 274 #ac coupling 302 275 if self.controller[AC_COUPLE_KEY]:
