auto-sync

This commit is contained in:
rusEfi 2016-08-22 01:01:53 -04:00
parent fc0f93db5b
commit 5e470ba07d
5 changed files with 92 additions and 7 deletions

View File

@ -38,7 +38,7 @@ import static com.rusefi.ui.storage.PersistentConfiguration.getConfig;
* @see EngineSnifferPanel * @see EngineSnifferPanel
*/ */
public class Launcher { public class Launcher {
public static final int CONSOLE_VERSION = 20160820; public static final int CONSOLE_VERSION = 20160821;
public static final boolean SHOW_STIMULATOR = false; public static final boolean SHOW_STIMULATOR = false;
private static final String TAB_INDEX = "main_tab"; private static final String TAB_INDEX = "main_tab";
protected static final String PORT_KEY = "port"; protected static final String PORT_KEY = "port";
@ -136,6 +136,9 @@ public class Launcher {
ConnectionWatchdog.start(); ConnectionWatchdog.start();
GaugesPanel.DetachedRepository.INSTANCE.init(getConfig().getRoot().getChild("detached"));
GaugesPanel.DetachedRepository.INSTANCE.load();
if (!LinkManager.isLogViewer()) if (!LinkManager.isLogViewer())
tabbedPane.addTab("Gauges", new GaugesPanel(getConfig().getRoot().getChild("gauges")).getContent()); tabbedPane.addTab("Gauges", new GaugesPanel(getConfig().getRoot().getChild("gauges")).getContent());
@ -237,6 +240,7 @@ public class Launcher {
Node root = getConfig().getRoot(); Node root = getConfig().getRoot();
root.setProperty("version", CONSOLE_VERSION); root.setProperty("version", CONSOLE_VERSION);
root.setProperty(TAB_INDEX, tabbedPane.getSelectedIndex()); root.setProperty(TAB_INDEX, tabbedPane.getSelectedIndex());
GaugesPanel.DetachedRepository.INSTANCE.saveConfig();
getConfig().save(); getConfig().save();
BinaryProtocol bp = BinaryProtocol.instance; BinaryProtocol bp = BinaryProtocol.instance;
if (bp != null && !bp.isClosed) if (bp != null && !bp.isClosed)

View File

@ -12,4 +12,9 @@ public class GaugesGrid {
public GaugesGrid(int rows, int cols) { public GaugesGrid(int rows, int cols) {
panel = new JPanel(new GridLayout(rows, cols)); panel = new JPanel(new GridLayout(rows, cols));
} }
public void setLayout(int rows, int columns) {
panel.setLayout(new GridLayout(rows, columns));
panel.removeAll();
}
} }

View File

@ -5,6 +5,7 @@ import com.rusefi.core.Sensor;
import com.rusefi.ui.storage.Node; import com.rusefi.ui.storage.Node;
import com.rusefi.ui.util.UiUtils; import com.rusefi.ui.util.UiUtils;
import com.rusefi.ui.widgets.AnyCommand; import com.rusefi.ui.widgets.AnyCommand;
import com.rusefi.ui.widgets.DetachedSensor;
import com.rusefi.ui.widgets.PopupMenuButton; import com.rusefi.ui.widgets.PopupMenuButton;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -14,10 +15,13 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.List;
/** /**
* Date: 2/5/13 * Date: 2/5/13
* (c) Andrey Belomutskiy * (c) Andrey Belomutskiy
*
* @see GaugesGridElement * @see GaugesGridElement
*/ */
public class GaugesPanel { public class GaugesPanel {
@ -58,7 +62,7 @@ public class GaugesPanel {
} }
private final JPanel content = new JPanel(new BorderLayout()); private final JPanel content = new JPanel(new BorderLayout());
private final GaugesGrid gauges = new GaugesGrid(3, 5); private final GaugesGrid gauges;
private final Node config; private final Node config;
private boolean showRpmPanel = true; private boolean showRpmPanel = true;
@ -71,6 +75,7 @@ public class GaugesPanel {
private final JSplitPane middleSplitPanel; private final JSplitPane middleSplitPanel;
public GaugesPanel(final Node config) { public GaugesPanel(final Node config) {
gauges = new GaugesGrid(3, 5);
this.config = config; this.config = config;
showRpmPanel = config.getBoolProperty(SHOW_RPM, true); showRpmPanel = config.getBoolProperty(SHOW_RPM, true);
showMessagesPanel = config.getBoolProperty(SHOW_MESSAGES, true); showMessagesPanel = config.getBoolProperty(SHOW_MESSAGES, true);
@ -224,8 +229,7 @@ public class GaugesPanel {
} }
private void setSensorGridDimensions(int rows, int columns) { private void setSensorGridDimensions(int rows, int columns) {
gauges.panel.setLayout(new GridLayout(rows, columns)); gauges.setLayout(rows, columns);
gauges.panel.removeAll();
for (int i = 0; i < rows * columns; i++) { for (int i = 0; i < rows * columns; i++) {
Component element = GaugesGridElement.read(config.getChild("element_" + i), DEFAULT_LAYOUT[i]); Component element = GaugesGridElement.read(config.getChild("element_" + i), DEFAULT_LAYOUT[i]);
@ -249,4 +253,42 @@ public class GaugesPanel {
public JComponent getContent() { public JComponent getContent() {
return content; return content;
} }
public enum DetachedRepository {
INSTANCE;
public static final String COUNT = "count";
public static final String DETACHED = "detached";
private List<DetachedSensor> list = new ArrayList<>();
private Node config;
public void add(DetachedSensor detachedSensor) {
list.add(detachedSensor);
saveConfig();
}
public void remove(DetachedSensor detachedSensor) {
list.remove(detachedSensor);
saveConfig();
}
public void load() {
int count = config.getIntProperty(COUNT, 0);
for (int i = 0; i < count; i++) {
DetachedSensor.create(config.getChild(DETACHED + i));
}
}
public void saveConfig() {
config.setProperty(COUNT, list.size());
int index = 0;
for (DetachedSensor sensor : list) {
sensor.saveConfig(config.getChild(DETACHED + index++));
}
}
public void init(Node config) {
this.config = config;
}
}
} }

View File

@ -3,6 +3,8 @@ package com.rusefi.ui.widgets;
import com.rusefi.core.Sensor; import com.rusefi.core.Sensor;
import com.rusefi.io.CommandQueue; import com.rusefi.io.CommandQueue;
import com.rusefi.io.LinkManager; import com.rusefi.io.LinkManager;
import com.rusefi.ui.GaugesPanel;
import com.rusefi.ui.storage.Node;
import com.rusefi.ui.util.UiUtils; import com.rusefi.ui.util.UiUtils;
import javax.swing.*; import javax.swing.*;
@ -10,6 +12,8 @@ import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener; import javax.swing.event.ChangeListener;
import java.awt.*; import java.awt.*;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.Format; import java.text.Format;
import java.util.Arrays; import java.util.Arrays;
@ -21,10 +25,14 @@ import java.util.Hashtable;
* 11/2/14 * 11/2/14
*/ */
public class DetachedSensor { public class DetachedSensor {
private static final String NAME = "name";
private static final String WIDTH = "width";
private static final Collection<Sensor> MOCKABLE = Arrays.asList(Sensor.CLT, Sensor.AFR, Sensor.IAT, Sensor.MAF, private static final Collection<Sensor> MOCKABLE = Arrays.asList(Sensor.CLT, Sensor.AFR, Sensor.IAT, Sensor.MAF,
Sensor.TPS); Sensor.TPS);
private final static Hashtable<Integer, JComponent> SLIDER_LABELS = new Hashtable<>(); private final static Hashtable<Integer, JComponent> SLIDER_LABELS = new Hashtable<>();
public static final String XPOS = "xpos";
public static final String YPOS = "ypos";
static { static {
Format f = new DecimalFormat("0.0"); Format f = new DecimalFormat("0.0");
@ -47,14 +55,24 @@ public class DetachedSensor {
private int width; private int width;
public DetachedSensor(Sensor sensor, int width) { public DetachedSensor(Sensor sensor, int width) {
this.sensor = sensor;
this.width = width; this.width = width;
frame = new JFrame(); frame = new JFrame();
frame.setAlwaysOnTop(true); frame.setAlwaysOnTop(true);
onChange(sensor); onChange(sensor);
GaugesPanel.DetachedRepository.INSTANCE.add(this);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
GaugesPanel.DetachedRepository.INSTANCE.remove(DetachedSensor.this);
frame.dispose();
}
});
create();
} }
void create(Sensor sensor) { void create() {
SensorGauge.GaugeChangeListener listener = new SensorGauge.GaugeChangeListener() { SensorGauge.GaugeChangeListener listener = new SensorGauge.GaugeChangeListener() {
@Override @Override
public void onSensorChange(Sensor sensor) { public void onSensorChange(Sensor sensor) {
@ -115,4 +133,21 @@ public class DetachedSensor {
return slider; return slider;
} }
public void saveConfig(Node child) {
child.setProperty(NAME, sensor.name());
child.setProperty(WIDTH, frame.getWidth());
child.setProperty(XPOS, frame.getLocation().x);
child.setProperty(YPOS, frame.getLocation().y);
}
public static void create(Node child) {
Sensor sensor = Sensor.lookup(child.getProperty(NAME, Sensor.RPM.name()), Sensor.RPM);
int width = child.getIntProperty(WIDTH, 256);
int xpos = child.getIntProperty(XPOS, 0);
int ypos = child.getIntProperty(YPOS, 0);
DetachedSensor ds = new DetachedSensor(sensor, width);
ds.frame.setLocation(xpos, ypos);
ds.frame.setVisible(true);
}
} }

View File

@ -113,7 +113,6 @@ public class SensorGauge {
int width = gauge.getSize().width; int width = gauge.getSize().width;
final DetachedSensor ds = new DetachedSensor(sensor, width); final DetachedSensor ds = new DetachedSensor(sensor, width);
ds.create(sensor);
ds.show(e); ds.show(e);
} }