switch source package format to 3.0 quilt
[debian/gnuradio] / gr-wxgui / src / python / const_window.py
index 9510416bef69def68f576988bee589e50bee1d56..f7c7caf07691be5e80be1fa1279277b35b4a1e82 100644 (file)
@@ -29,6 +29,8 @@ import numpy
 import math
 import pubsub
 from constants import *
+from gnuradio import gr #for gr.prefs
+import forms
 
 ##################################################
 # Constants
@@ -36,9 +38,9 @@ from constants import *
 SLIDER_STEPS = 200
 ALPHA_MIN_EXP, ALPHA_MAX_EXP = -6, -0.301
 GAIN_MU_MIN_EXP, GAIN_MU_MAX_EXP = -6, -0.301
-DEFAULT_FRAME_RATE = 5
+DEFAULT_FRAME_RATE = gr.prefs().get_long('wxgui', 'const_rate', 5)
 DEFAULT_WIN_SIZE = (500, 400)
-DEFAULT_CONST_SIZE = 2048
+DEFAULT_CONST_SIZE = gr.prefs().get_long('wxgui', 'const_size', 2048)
 CONST_PLOT_COLOR_SPEC = (0, 0, 1)
 MARKER_TYPES = (
        ('Dot Small', 1.0),
@@ -46,58 +48,78 @@ MARKER_TYPES = (
        ('Dot Large', 3.0),
        ('Line Link', None),
 )
-DEFAULT_MARKER_TYPE = MARKER_TYPES[1][1]
+DEFAULT_MARKER_TYPE = 2.0
 
 ##################################################
 # Constellation window control panel
 ##################################################
 class control_panel(wx.Panel):
-       """!
+       """
        A control panel with wx widgits to control the plotter.
        """
        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.SUNKEN_BORDER)
-               control_box = wx.BoxSizer(wx.VERTICAL)
-               self.marker_index = 2
-               #begin control box
-               control_box.AddStretchSpacer()
-               control_box.Add(common.LabelText(self, 'Options'), 0, wx.ALIGN_CENTER)
-               #marker
-               control_box.AddStretchSpacer()
-               self.marker_chooser = common.DropDownController(self, 'Marker', MARKER_TYPES, parent, MARKER_KEY)
-               control_box.Add(self.marker_chooser, 0, wx.EXPAND)
+               wx.Panel.__init__(self, parent, style=wx.SUNKEN_BORDER)
+               parent[SHOW_CONTROL_PANEL_KEY] = True
+               parent.subscribe(SHOW_CONTROL_PANEL_KEY, self.Show)
+               control_box = forms.static_box_sizer(
+                       parent=self, label='Options',
+                       bold=True, orient=wx.VERTICAL,
+               )
                #alpha
                control_box.AddStretchSpacer()
-               self.alpha_slider = common.LogSliderController(
-                       self, 'Alpha',
-                       ALPHA_MIN_EXP, ALPHA_MAX_EXP, SLIDER_STEPS,
-                       parent.ext_controller, parent.alpha_key,
+               forms.text_box(
+                       sizer=control_box, parent=self, label='Alpha',
+                       converter=forms.float_converter(),
+                       ps=parent, key=ALPHA_KEY,
+               )
+               forms.log_slider(
+                       sizer=control_box, parent=self,
+                       min_exp=ALPHA_MIN_EXP,
+                       max_exp=ALPHA_MAX_EXP,
+                       num_steps=SLIDER_STEPS,
+                       ps=parent, key=ALPHA_KEY,
                )
-               control_box.Add(self.alpha_slider, 0, wx.EXPAND)
                #gain_mu
                control_box.AddStretchSpacer()
-               self.gain_mu_slider = common.LogSliderController(
-                       self, 'Gain Mu',
-                       GAIN_MU_MIN_EXP, GAIN_MU_MAX_EXP, SLIDER_STEPS,
-                       parent.ext_controller, parent.gain_mu_key,
+               forms.text_box(
+                       sizer=control_box, parent=self, label='Gain Mu',
+                       converter=forms.float_converter(),
+                       ps=parent, key=GAIN_MU_KEY,
+               )
+               forms.log_slider(
+                       sizer=control_box, parent=self,
+                       min_exp=GAIN_MU_MIN_EXP,
+                       max_exp=GAIN_MU_MAX_EXP,
+                       num_steps=SLIDER_STEPS,
+                       ps=parent, key=GAIN_MU_KEY,
+               )
+               #marker
+               control_box.AddStretchSpacer()
+               forms.drop_down(
+                       sizer=control_box, parent=self,
+                       ps=parent, key=MARKER_KEY, label='Marker',
+                       choices=map(lambda x: x[1], MARKER_TYPES),
+                       labels=map(lambda x: x[0], MARKER_TYPES),
                )
-               control_box.Add(self.gain_mu_slider, 0, wx.EXPAND)
                #run/stop
                control_box.AddStretchSpacer()
-               self.run_button = common.ToggleButtonController(self, parent, RUNNING_KEY, 'Stop', 'Run')
-               control_box.Add(self.run_button, 0, wx.EXPAND)
+               forms.toggle_button(
+                       sizer=control_box, parent=self,
+                       true_label='Stop', false_label='Run',
+                       ps=parent, key=RUNNING_KEY,
+               )
                #set sizer
                self.SetSizerAndFit(control_box)
 
 ##################################################
 # Constellation window with plotter and control panel
 ##################################################
-class const_window(wx.Panel, pubsub.pubsub, common.prop_setter):
+class const_window(wx.Panel, pubsub.pubsub):
        def __init__(
                self,
                parent,
@@ -109,22 +131,32 @@ class const_window(wx.Panel, pubsub.pubsub, common.prop_setter):
                beta_key,
                gain_mu_key,
                gain_omega_key,
+               omega_key,
+               sample_rate_key,
        ):
                pubsub.pubsub.__init__(self)
-               #setup
-               self.ext_controller = controller
-               self.alpha_key = alpha_key
-               self.beta_key = beta_key
-               self.gain_mu_key = gain_mu_key
-               self.gain_omega_key = gain_omega_key
+               #proxy the keys
+               self.proxy(MSG_KEY, controller, msg_key)
+               self.proxy(ALPHA_KEY, controller, alpha_key)
+               self.proxy(BETA_KEY, controller, beta_key)
+               self.proxy(GAIN_MU_KEY, controller, gain_mu_key)
+               self.proxy(GAIN_OMEGA_KEY, controller, gain_omega_key)
+               self.proxy(OMEGA_KEY, controller, omega_key)
+               self.proxy(SAMPLE_RATE_KEY, controller, sample_rate_key)
+               #initialize values
+               self[RUNNING_KEY] = True
+               self[X_DIVS_KEY] = 8
+               self[Y_DIVS_KEY] = 8
+               self[MARKER_KEY] = DEFAULT_MARKER_TYPE
                #init panel and plot
-               wx.Panel.__init__(self, parent, -1, style=wx.SIMPLE_BORDER)
+               wx.Panel.__init__(self, parent, style=wx.SIMPLE_BORDER)
                self.plotter = plotter.channel_plotter(self)
                self.plotter.SetSize(wx.Size(*size))
                self.plotter.set_title(title)
                self.plotter.set_x_label('Inphase')
                self.plotter.set_y_label('Quadrature')
                self.plotter.enable_point_label(True)
+               self.plotter.enable_grid_lines(True)
                #setup the box with plot and controls
                self.control_panel = control_panel(self)
                main_box = wx.BoxSizer(wx.HORIZONTAL)
@@ -132,27 +164,19 @@ class const_window(wx.Panel, pubsub.pubsub, common.prop_setter):
                main_box.Add(self.control_panel, 0, wx.EXPAND)
                self.SetSizerAndFit(main_box)
                #alpha and gain mu 2nd orders
-               def set_beta(alpha): self.ext_controller[self.beta_key] = .25*alpha**2
-               self.ext_controller.subscribe(self.alpha_key, set_beta)
-               def set_gain_omega(gain_mu): self.ext_controller[self.gain_omega_key] = .25*gain_mu**2
-               self.ext_controller.subscribe(self.gain_mu_key, set_gain_omega)
-               #initial setup
-               self.ext_controller[self.alpha_key] = self.ext_controller[self.alpha_key]
-               self.ext_controller[self.gain_mu_key] = self.ext_controller[self.gain_mu_key]
-               self._register_set_prop(self, RUNNING_KEY, True)
-               self._register_set_prop(self, X_DIVS_KEY, 8)
-               self._register_set_prop(self, Y_DIVS_KEY, 8)
-               self._register_set_prop(self, MARKER_KEY, DEFAULT_MARKER_TYPE)
+               def set_beta(alpha): self[BETA_KEY] = .25*alpha**2
+               self.subscribe(ALPHA_KEY, set_beta)
+               def set_gain_omega(gain_mu): self[GAIN_OMEGA_KEY] = .25*gain_mu**2
+               self.subscribe(GAIN_MU_KEY, set_gain_omega)
                #register events
-               self.ext_controller.subscribe(msg_key, self.handle_msg)
-               for key in (
-                       X_DIVS_KEY, Y_DIVS_KEY,
-               ): self.subscribe(key, self.update_grid)
+               self.subscribe(MSG_KEY, self.handle_msg)
+               self.subscribe(X_DIVS_KEY, self.update_grid)
+               self.subscribe(Y_DIVS_KEY, self.update_grid)
                #initial update
                self.update_grid()
 
        def handle_msg(self, msg):
-               """!
+               """
                Plot the samples onto the complex grid.
                @param msg the array of complex samples
                """
@@ -172,15 +196,12 @@ class const_window(wx.Panel, pubsub.pubsub, common.prop_setter):
                self.plotter.update()
 
        def update_grid(self):
-               #grid parameters
-               x_divs = self[X_DIVS_KEY]
-               y_divs = self[Y_DIVS_KEY]
                #update the x axis
                x_max = 2.0
-               self.plotter.set_x_grid(-x_max, x_max, common.get_clean_num(2.0*x_max/x_divs))
+               self.plotter.set_x_grid(-x_max, x_max, common.get_clean_num(2.0*x_max/self[X_DIVS_KEY]))
                #update the y axis
                y_max = 2.0
-               self.plotter.set_y_grid(-y_max, y_max, common.get_clean_num(2.0*y_max/y_divs))
+               self.plotter.set_y_grid(-y_max, y_max, common.get_clean_num(2.0*y_max/self[Y_DIVS_KEY]))
                #update plotter
                self.plotter.update()