def __init__(self, view, name, func, label=None): core.DataViewComponent.__init__(self, label) self.view = view self.name = name self.func = func self.label_height = 18 self.resize_border = 2 self.popup_hide_limit = JCheckBoxMenuItem('auto-hide limits', True, actionPerformed=self.toggle_autohide) self.popup.add(self.popup_hide_limit) self.show_limits = False self.auto_hide_limits = True self.limits_font = Font("Dialog", Font.PLAIN, 10) self.limit_width = 0 self.limit_hide_delay = 1000 self.limit_color_def = 0.3 self.limit_color_val = self.limit_color_def self.limit_color_step = (1 - self.limit_color_def) / 10 self.limit_hide_timer = Timer(self.limit_hide_delay / 10, None, actionPerformed=self.hide_limits) self.limit_hide_timer.setRepeats(False) self.popup.add(JPopupMenu.Separator()) self.popup.add(JMenuItem('zero', actionPerformed=self.zero)) self.popup.add(JMenuItem('set value', actionPerformed=self.set_value)) self.filename = None self.popup.add(JMenuItem('set from file...', actionPerformed=self.set_from_file)) self.popup.add(JPopupMenu.Separator()) self.popup.add(JMenuItem('increase range', actionPerformed=self.increase_range)) self.popup.add(JMenuItem('decrease range', actionPerformed=self.decrease_range)) self.scale_factor = 0.01 self.range = 1.0 self.data = self.view.watcher.watch(name, func) values = self.data.get_first() self.sliders = [] self.labels = [] for i, v in enumerate(values): vv = int(v * 100 / self.range) if vv > 100: vv = 100 if vv < -100: vv = -100 slider = JSlider(JSlider.VERTICAL, -100, 100, vv, stateChanged=lambda event, index=i: self.slider_moved(index)) slider.background = Color.white self.add(slider) self.sliders.append(slider) label = JLabel('0.00') self.add(label) self.labels.append(label) slider.addMouseListener(self) self.setSize(len(values) * 40 + 40, 200) self.addComponentListener(self) self.componentResized(None)