+ def on_flush(self, act):
+ self.logger.flush()
+
+ def on_enable(self, obj):
+ name = Gtk.Buildable.get_name(obj)
+ name = name.replace('_btn', '')
+ state = obj.get_active()
+ if self.config.enable[name] != state:
+ self.device.set_enable(name, state)
+ self.config.enable[name] = state
+ self.config.save()
+
+ def on_rate(self, obj):
+ name = Gtk.Buildable.get_name(obj)
+ name = name.replace('_spin', '')
+ value = obj.get_value()
+ if self.config.rate[name] != value:
+ self.device.set_rate(name, value)
+ self.config.rate[name] = value
+ self.config.save()
+
+ def on_config(self, obj):
+ name = Gtk.Buildable.get_name(obj)
+ if isinstance(obj, Gtk.SpinButton):
+ value = obj.get_value()
+ else:
+ value = obj.get_text()
+ if getattr(self.config, name) != value:
+ setattr(self.config, name, value)
+ self.config.save()
+
+ def on_expose(self, obj, _):
+ cairo = obj.window.cairo_create()
+ count = len(self.history)
+ extents = cairo.clip_extents()
+ width = extents[2] - extents[0]
+ height = extents[3] - extents[1]
+
+ cairo.set_line_width(4)
+ for i in range(count):
+ x = i*width/(count-1)
+ y = ((1-self.history[i]) * 0.8 + 0.1) * height
+ if i==0:
+ cairo.move_to(x, y)
+ else:
+ cairo.line_to(x, y)
+ cairo.stroke()