Changeset 8926

Show
Ignore:
Timestamp:
07/17/08 14:45:56
Author:
jblum
Message:

drop down control

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • gnuradio/branches/features/experimental-gui/common.py

    r8909 r8926  
    4040        Forward messages to the message handler. 
    4141        """ 
    42  
    4342        def __init__ (self, msgq, handle_msg): 
    4443                threading.Thread.__init__(self) 
     
    6059        Get the default label text and set the font bold. 
    6160        """ 
    62  
    6361        def __init__(self, parent, label): 
    6462                wx.StaticText.__init__(self, parent, -1, label) 
     
    7169        A horizontal box sizer with a increment and a decrement button. 
    7270        """ 
    73  
    7471        def __init__(self, parent, on_incr, on_decr): 
    7572                """! 
     
    8683                self.Add(self._decr_button, 0, wx.ALIGN_CENTER_VERTICAL) 
    8784 
     85        def Disable(self, disable=True): self.Enable(not disable) 
    8886        def Enable(self, enable=True): 
    8987                if enable: 
     
    9492                        self._decr_button.Disable() 
    9593 
    96         def Disable(self, disable=True): self.Enable(not disable) 
    97  
    9894class RunStopButtonController(wx.Button): 
    9995        def __init__(self, parent, controller, control_key): 
     
    109105 
    110106class LogSliderController(wx.BoxSizer): 
     107        """! 
     108        Log slider controller with display label and slider. 
     109        Gives logarithmic scaling to slider operation. 
     110        """ 
    111111        def __init__(self, parent, label, min_exp, max_exp, slider_steps, controller, control_key, formatter=lambda x: ': %.3f'%x): 
    112112                wx.BoxSizer.__init__(self, wx.VERTICAL) 
     
    127127                controller.add_listener(control_key, _on_controller_set) 
    128128 
     129        def Disable(self, disable=True): self.Enable(not disable) 
    129130        def Enable(self, enable=True): 
    130131                if enable: 
     
    135136                        self._label.Disable() 
    136137 
     138class 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                 
    137165        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() 
    138173 
    139174################################################## 
  • gnuradio/branches/features/experimental-gui/const_window.py

    r8909 r8926  
    4848X_DIVS_KEY = 'x_divs' 
    4949Y_DIVS_KEY = 'y_divs' 
     50MARKER_KEY = 'marker' 
    5051 
    5152################################################## 
     
    7071                #marker 
    7172                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) 
    7875                #alpha 
    7976                control_box.AddStretchSpacer() 
     
    9895                #set sizer 
    9996                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 handlers 
    108         ################################################## 
    109         def _on_marker(self, event): 
    110                 self.marker_index = self.marker_chooser.GetSelection() 
    111                 self.update() 
    11297 
    11398################################################## 
     
    158143                self._register_set_prop(self.controller, X_DIVS_KEY, 8) 
    159144                self._register_set_prop(self.controller, Y_DIVS_KEY, 8) 
     145                self._register_set_prop(self.controller, MARKER_KEY, '.') 
    160146                #register events 
    161147                self.ext_controller.add_listener(msg_key, self.handle_msg) 
     
    181167                        samples=(real, imag), 
    182168                        color_spec=CONST_PLOT_COLOR_SPEC, 
    183                         marker=self.marker
     169                        marker=self.controller[MARKER_KEY]
    184170                ) 
    185171                #update the plotter 
  • gnuradio/branches/features/experimental-gui/scope_window.py

    r8897 r8926  
    3737DEFAULT_V_SCALE = 1000 
    3838TRIGGER_MODES = ( 
    39         ('Auto', 0), 
     39        ('Off', 0), 
    4040        ('Neg', -1), 
    4141        ('Pos', +1), 
     
    6868X_DIVS_KEY = 'x_divs' 
    6969FRAME_RATE_KEY = 'frame_rate' 
     70TRIGGER_MODE_KEY = 'trigger_mode' 
     71TRIGGER_LEVEL_KEY = 'trigger_level' 
     72TRIGGER_CHANNEL_KEY = 'trigger_channel' 
    7073 
    7174################################################## 
     
    8487                wx.Panel.__init__(self, parent, -1, style=wx.SUNKEN_BORDER) 
    8588                control_box = wx.BoxSizer(wx.VERTICAL) 
    86                 #trigger defaults 
    87                 self.trigger_channel_index = 0 #ch 1 
    88                 self.trigger_mode_index = 1 #not auto 
    89                 self.trigger_level_index = 0 #auto 
    9089                #trigger options 
    9190                control_box.AddStretchSpacer() 
     
    9392                control_box.AddSpacer(2) 
    9493                #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) 
    10896                #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) 
    115105                #axes options 
    116106                SPACING = 15 
     
    155145                #set sizer 
    156146                self.SetSizerAndFit(control_box) 
    157                 #initial update 
    158                 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_index 
    163                 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] 
    167147 
    168148        ################################################## 
    169149        # Event handlers 
    170150        ################################################## 
    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          
    181151        def _on_incr_x_divs(self, event): 
    182152                self.parent.set_x_per_div( 
     
    260230                self._register_set_prop(self.controller, Y_DIVS_KEY, 8) 
    261231                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) 
    262235                #register events 
    263236                self.ext_controller.add_listener(msg_key, self.handle_msg) 
     
    291264                if self.frame_counter == 0: #decimate 
    292265                        #trigger level (must do before ac coupling) 
    293                         self.ext_controller[self.scope_trigger_channel_key] = self.trigger_channel 
    294                         self.ext_controller[self.scope_trigger_mode_key] = self.trigger_mode 
    295                         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] = '' 
    297270                        else: 
    298                                 samples = sampleses[self.trigger_channel
     271                                samples = sampleses[self.controller[TRIGGER_CHANNEL_KEY]
    299272                                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) 
    301274                        #ac coupling 
    302275                        if self.controller[AC_COUPLE_KEY]: