]> Pileus Git - ~andy/csm213a-hw/blobdiff - vis/visual.py
Make control script more configurable
[~andy/csm213a-hw] / vis / visual.py
index 737e2d9a3b61cc3fd08b3c58a3601cfb2ff47e6d..6fab6306caf63626d76ae0636a863e178d8794d1 100644 (file)
@@ -32,15 +32,24 @@ class Visual:
 
                self.rate_due = 0
                self.rate_cnt = {'acc': 0,
-                                 'mag': 0,
-                                 'lgt': 0,
-                                 'tch': 0,
-                                 'a2d': 0}
+                                'mag': 0,
+                                'lgt': 0,
+                                'tch': 0,
+                                'a2d': 0}
 
                self.builder.add_from_file('visual.ui')
                self.builder.connect_signals(self)
+
                self.window   = self.builder.get_object("window")
                self.settings = self.builder.get_object("settings")
+               self.plotdraw = self.builder.get_object('plot')
+               self.plotsns  = self.builder.get_object('sns')
+               self.plotaxis = self.builder.get_object('axis')
+
+               if sys.version_info<(3,0,0):
+                       self.plotdraw.connect('expose-event', self.on_expose)
+               else:
+                       self.plotdraw.connect('draw', self.on_draw)
 
                self.accs     = get_objects(['accx', 'accy', 'accz'])
                self.mags     = get_objects(['magx', 'magy', 'magz'])
@@ -102,8 +111,7 @@ class Visual:
                        setattr(self.config, name, value)
                        self.config.save()
 
-       def on_expose(self, obj, _):
-               cairo   = obj.window.cairo_create()
+       def on_draw(self, obj, cairo):
                count   = len(self.history)
                extents = cairo.clip_extents()
                width   = extents[2] - extents[0]
@@ -119,6 +127,10 @@ class Visual:
                                cairo.line_to(x, y)
                cairo.stroke()
 
+       def on_expose(self, obj, event):
+               cairo = obj.window.cairo_create()
+               self.draw(obj, cairo)
+
        def on_key(self, win, ev):
                if ev.string == 'q':
                        Gtk.main_quit();
@@ -126,7 +138,7 @@ class Visual:
        def on_destroy(self, win):
                Gtk.main_quit()
 
-        # Methods
+       # Methods
        def load_config(self):
                def set_val(name, val):
                        self.builder.get_object(name).set_value(val)
@@ -173,8 +185,15 @@ class Visual:
                self.rate_cnt['a2d'] += setval(self.a2ds, state.a2d, [])
 
                # Save history
-               if state.a2d[0] != None:
-                       self.history = self.history[1:] + [state.a2d[0]]
+               idxs = ['acc', 'mag', 'tch', 'lgt', 'a2d']
+               sns  = idxs[self.plotsns.get_active()]
+               axis = int(self.plotaxis.get_value())
+               if hasattr(state, sns):
+                       data = getattr(state, sns)
+                       axis = min(axis-1, len(data)-1)
+                       item = data[axis]
+                       if item != None:
+                               self.history = self.history[1:] + [item]
 
        def debug(self, state):
                print('update: ' + str(state))