gr-wxgui: adds stripchart trigger mode to graphics sinks
[debian/gnuradio] / gr-wxgui / src / python / scopesink_gl.py
index a5e3ca3ce32fc7f9c40fd305d5c7fd4bd2d709e5..c7dbd4f799089820f34afaf1a257571a5ec8bab6 100644 (file)
@@ -34,7 +34,7 @@ class ac_couple_block(gr.hier_block2):
        Mute the low pass filter to disable ac coupling.
        """
 
-       def __init__(self, controller, ac_couple_key, ac_couple, sample_rate_key):
+       def __init__(self, controller, ac_couple_key, sample_rate_key):
                gr.hier_block2.__init__(
                        self,
                        "ac_couple",
@@ -52,13 +52,13 @@ class ac_couple_block(gr.hier_block2):
                controller.subscribe(ac_couple_key, lambda x: mute.set_mute(not x))
                controller.subscribe(sample_rate_key, lambda x: lpf.set_taps(0.05))
                #initialize
-               controller[ac_couple_key] = ac_couple
+               controller[ac_couple_key] = controller[ac_couple_key]
                controller[sample_rate_key] = controller[sample_rate_key]
 
 ##################################################
 # Scope sink block (wrapper for old wxgui)
 ##################################################
-class _scope_sink_base(gr.hier_block2):
+class _scope_sink_base(gr.hier_block2, common.wxgui_hb):
        """
        A scope block with a gui window.
        """
@@ -71,9 +71,11 @@ class _scope_sink_base(gr.hier_block2):
                size=scope_window.DEFAULT_WIN_SIZE,
                v_scale=0,
                t_scale=0,
+               v_offset=0,
                xy_mode=False,
                ac_couple=False,
                num_inputs=1,
+               trig_mode=scope_window.DEFAULT_TRIG_MODE,
                frame_rate=scope_window.DEFAULT_FRAME_RATE,
                **kwargs #do not end with a comma
        ):
@@ -102,25 +104,10 @@ class _scope_sink_base(gr.hier_block2):
                self.controller.publish(TRIGGER_SLOPE_KEY, scope.get_trigger_slope)
                self.controller.subscribe(TRIGGER_CHANNEL_KEY, scope.set_trigger_channel)
                self.controller.publish(TRIGGER_CHANNEL_KEY, scope.get_trigger_channel)
-               #connect
-               if self._real:
-                       for i in range(num_inputs):
-                               self.connect(
-                                       (self, i),
-                                       ac_couple_block(self.controller, common.index_key(AC_COUPLE_KEY, i), ac_couple, SAMPLE_RATE_KEY),
-                                       (scope, i),
-                               )
-               else:
-                       for i in range(num_inputs):
-                               c2f = gr.complex_to_float() 
-                               self.connect((self, i), c2f)
-                               for j in range(2):
-                                       self.connect(
-                                               (c2f, j), 
-                                               ac_couple_block(self.controller, common.index_key(AC_COUPLE_KEY, 2*i+j), ac_couple, SAMPLE_RATE_KEY),
-                                               (scope, 2*i+j),
-                                       )
-                       num_inputs *= 2
+               actual_num_inputs = self._real and num_inputs or num_inputs*2
+               #init ac couple
+               for i in range(actual_num_inputs):
+                       self.controller[common.index_key(AC_COUPLE_KEY, i)] = ac_couple
                #start input watcher
                common.input_watcher(msgq, self.controller, MSG_KEY)
                #create window
@@ -130,11 +117,13 @@ class _scope_sink_base(gr.hier_block2):
                        size=size,
                        title=title,
                        frame_rate=frame_rate,
-                       num_inputs=num_inputs,
+                       num_inputs=actual_num_inputs,
                        sample_rate_key=SAMPLE_RATE_KEY,
                        t_scale=t_scale,
                        v_scale=v_scale,
+                       v_offset=v_offset,
                        xy_mode=xy_mode,
+                       trig_mode=trig_mode,
                        ac_couple_key=AC_COUPLE_KEY,
                        trigger_level_key=TRIGGER_LEVEL_KEY,
                        trigger_mode_key=TRIGGER_MODE_KEY,
@@ -144,6 +133,24 @@ class _scope_sink_base(gr.hier_block2):
                        msg_key=MSG_KEY,
                )
                common.register_access_methods(self, self.win)
+               #connect
+               if self._real:
+                       for i in range(num_inputs):
+                               self.wxgui_connect(
+                                       (self, i),
+                                       ac_couple_block(self.controller, common.index_key(AC_COUPLE_KEY, i), SAMPLE_RATE_KEY),
+                                       (scope, i),
+                               )
+               else:
+                       for i in range(num_inputs):
+                               c2f = gr.complex_to_float() 
+                               self.wxgui_connect((self, i), c2f)
+                               for j in range(2):
+                                       self.connect(
+                                               (c2f, j), 
+                                               ac_couple_block(self.controller, common.index_key(AC_COUPLE_KEY, 2*i+j), SAMPLE_RATE_KEY),
+                                               (scope, 2*i+j),
+                                       )
 
 class scope_sink_f(_scope_sink_base):
        _item_size = gr.sizeof_float