+class GPXAudioTracer(gtk.ToggleAction):
+ states = [_("Start GPX and audio trace"), _("Stop GPX and audio trace")]
+
+ def __init__(self, registry, **kw):
+ self.state = 0
+ super(GPXAudioTracer, self).__init__("menu.main.gps.gpxaudio", self.states[self.state], None, None)
+
+ self.registry = registry
+ self.recorder = zavai.Recorder(registry)
+ self.set_active(False)
+
+ self.connect("toggled", self.on_toggle)
+
+ def shutdown(self):
+ self.recorder.stop()
+ super(GPXAudioTracer, self).shutdown()
+
+ def on_toggle(self, *args):
+ self.state = (self.state + 1) % len(self.states)
+ self.set_property("label", self.states[self.state])
+ if self.get_active():
+ self.start()
+ else:
+ self.stop()
+
+ def start(self):
+ zavai.info("GPX trace started")
+ gpx = self.registry.resource("gpx")
+ gpx.connect("gpx", self)
+ gpx.add_activity_monitor(self.on_gpx_activity_changed)
+
+ def stop(self):
+ zavai.info("GPX trace ended")
+ gpx = self.registry.resource("gpx")
+ gpx.disconnect("gpx", self)
+ self.recorder.stop()
+ gpx.del_activity_monitor(self.on_gpx_activity_changed)
+
+ def on_gpx_activity_changed(self, gpx, state):
+ if state:
+ self.recorder.start(gpx.basename + ".wav")
+ else:
+ self.recorder.stop()