diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index 30ac817d75..7f3352cb19 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -1004,6 +1004,7 @@ fileVersion = { 20150625 } subMenu = ignitionIatCorrTableTbl, "Ignition Intake Air Temp correction" subMenu = baroCorrTbl, "Baro Correction", {algorithm == 3} subMenu = std_separator + subMenu = std_realtime, "&Realtime Display", 0 menu = "3D Map Tuning" ; subMenu = std_realtime, "Realtime Display" diff --git a/java_console/ui/src/com/rusefi/ui/widgets/JPanelWithListener.java b/java_console/ui/src/com/rusefi/ui/widgets/JPanelWithListener.java new file mode 100644 index 0000000000..f6cf984c7d --- /dev/null +++ b/java_console/ui/src/com/rusefi/ui/widgets/JPanelWithListener.java @@ -0,0 +1,37 @@ +package com.rusefi.ui.widgets; + +import javax.swing.*; +import java.util.List; +import java.awt.*; +import java.awt.event.MouseListener; +import java.util.LinkedList; + +/** + * (c) Andrey Belomutskiy + * 8/21/2015. + */ +public class JPanelWithListener extends JPanel { + private final List listeners = new LinkedList<>(); + + public JPanelWithListener(LayoutManager layoutManager) { + super(layoutManager); + } + + @Override + public synchronized void addMouseListener(MouseListener l) { + super.addMouseListener(l); + listeners.add(l); + } + + @Override + public synchronized void removeMouseListener(MouseListener l) { + super.removeMouseListener(l); + listeners.remove(l); + } + + public synchronized void removeAllMouseListeners() { + for(MouseListener l : listeners) + super.removeMouseListener(l); + listeners.clear(); + } +} diff --git a/java_console/ui/src/com/rusefi/ui/widgets/SensorGauge.java b/java_console/ui/src/com/rusefi/ui/widgets/SensorGauge.java index 363b05b2c0..7711e7c7b8 100644 --- a/java_console/ui/src/com/rusefi/ui/widgets/SensorGauge.java +++ b/java_console/ui/src/com/rusefi/ui/widgets/SensorGauge.java @@ -28,7 +28,7 @@ public class SensorGauge { } public static Component createGauge(Sensor sensor, GaugeChangeListener listener) { - JPanel wrapper = new JPanel(new BorderLayout()); + JPanelWithListener wrapper = new JPanelWithListener(new BorderLayout()); createGaugeBody(sensor, wrapper, listener); @@ -51,7 +51,7 @@ public class SensorGauge { void onSensorChange(Sensor sensor); } - private static void createGaugeBody(final Sensor sensor, final JPanel wrapper, final GaugeChangeListener listener) { + private static void createGaugeBody(final Sensor sensor, final JPanelWithListener wrapper, final GaugeChangeListener listener) { final Radial gauge = createRadial(sensor.getName(), sensor.getUnits(), sensor.getMaxValue(), sensor.getMinValue()); UiUtils.setTwoLineToolTip(gauge, "Double-click to detach", "Right-click to change"); @@ -82,13 +82,13 @@ public class SensorGauge { UiUtils.trueLayout(wrapper.getParent()); } - private static void showPopupMenu(MouseEvent e, JPanel wrapper, GaugeChangeListener listener) { + private static void showPopupMenu(MouseEvent e, JPanelWithListener wrapper, GaugeChangeListener listener) { JPopupMenu pm = new JPopupMenu(); fillGaugeItems(pm, wrapper, listener); pm.show(e.getComponent(), e.getX(), e.getY()); } - private static void fillGaugeItems(JPopupMenu popupMenu, final JPanel wrapper, final GaugeChangeListener listener) { + private static void fillGaugeItems(JPopupMenu popupMenu, final JPanelWithListener wrapper, final GaugeChangeListener listener) { for (final SensorCategory sc : SensorCategory.values()) { JMenuItem cmi = new JMenu(sc.getName()); popupMenu.add(cmi);