From 8aa0a1addaf8ab8a5ddaaa4c95ff5a0f1214ac01 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Sun, 29 Jan 2017 09:06:38 -0500 Subject: [PATCH] auto-sync --- java_console/ui/src/com/rusefi/Launcher.java | 42 +++++++++++++++---- .../ui/src/com/rusefi/SensorSnifferPane.java | 13 +++++- .../ui/src/com/rusefi/ui/MessagesPane.java | 12 +++++- .../rusefi/ui/engine/EngineSnifferPanel.java | 15 ++++++- .../src/com/rusefi/ui/widgets/AnyCommand.java | 19 ++++++++- 5 files changed, 89 insertions(+), 12 deletions(-) diff --git a/java_console/ui/src/com/rusefi/Launcher.java b/java_console/ui/src/com/rusefi/Launcher.java index 0ef6ad932c..ead3d3733c 100644 --- a/java_console/ui/src/com/rusefi/Launcher.java +++ b/java_console/ui/src/com/rusefi/Launcher.java @@ -21,8 +21,13 @@ import com.rusefi.ui.util.UiUtils; import jssc.SerialPortList; import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import java.awt.*; +import java.awt.event.ActionListener; import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; import java.util.TimeZone; import java.util.concurrent.atomic.AtomicReference; @@ -39,7 +44,7 @@ import static com.rusefi.ui.storage.PersistentConfiguration.getConfig; * @see EngineSnifferPanel */ public class Launcher { - public static final int CONSOLE_VERSION = 20170120; + public static final int CONSOLE_VERSION = 20170129; public static final boolean SHOW_STIMULATOR = false; private static final String TAB_INDEX = "main_tab"; protected static final String PORT_KEY = "port"; @@ -111,6 +116,7 @@ public class Launcher { super.onWindowClosed(); } }; + private final Map tabSelectedListeners = new HashMap(); public Launcher(String port) { this.port = port; @@ -148,11 +154,12 @@ public class Launcher { if (!LinkManager.isLogViewer()) tabbedPane.addTab("Formulas", new FormulasPane().getContent()); - tabbedPane.addTab("Engine Sniffer", engineSnifferPanel.getPanel()); - - if (!LinkManager.isLogViewer()) - tabbedPane.addTab("Sensor Sniffer", new SensorSnifferPane(getConfig().getRoot().getChild("sensor_sniffer")).getPanel()); + tabbedPaneAdd("Engine Sniffer", engineSnifferPanel.getPanel(), engineSnifferPanel.getTabSelectedListener()); + if (!LinkManager.isLogViewer()) { + SensorSnifferPane sensorSniffer = new SensorSnifferPane(getConfig().getRoot().getChild("sensor_sniffer")); + tabbedPaneAdd("Sensor Sniffer", sensorSniffer.getPanel(), sensorSniffer.getTabSelectedListener()); + } // tabbedPane.addTab("LE controls", new FlexibleControls().getPanel()); @@ -163,8 +170,10 @@ public class Launcher { tabbedPane.add("ECU stimulation", stimulator.getPanel()); } // tabbedPane.addTab("live map adjustment", new Live3DReport().getControl()); - if (!LinkManager.isLogViewer()) - tabbedPane.add("Messages", new MessagesPane(getConfig().getRoot().getChild("messages")).getContent()); + if (!LinkManager.isLogViewer()) { + MessagesPane messagesPane = new MessagesPane(getConfig().getRoot().getChild("messages")); + tabbedPaneAdd("Messages", messagesPane.getContent(), messagesPane.getTabSelectedListener()); + } if (!LinkManager.isLogViewer()) tabbedPane.addTab("Table Editor", tableEditor); // tabbedPane.add("Wizards", new Wizard().createPane()); @@ -185,10 +194,29 @@ public class Launcher { tabbedPane.setSelectedIndex(selectedIndex); } + tabbedPane.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + if (e.getSource() instanceof JTabbedPane) { + JTabbedPane pane = (JTabbedPane) e.getSource(); + int selectedIndex = pane.getSelectedIndex(); + System.out.println("Selected paneNo: " + selectedIndex); + ActionListener actionListener = tabSelectedListeners.get(pane.getComponentAt(selectedIndex)); + if (actionListener != null) + actionListener.actionPerformed(null); + } + } + }); + StartupFrame.setAppIcon(mainFrame.getFrame()); mainFrame.showFrame(tabbedPane); } + private void tabbedPaneAdd(String title, JComponent component, ActionListener tabSelectedListener) { + tabSelectedListeners.put(component, tabSelectedListener); + tabbedPane.add(title, component); + } + private void windowOpenedHandler() { setTitle(); ConnectionStatus.INSTANCE.addListener(new ConnectionStatus.Listener() { diff --git a/java_console/ui/src/com/rusefi/SensorSnifferPane.java b/java_console/ui/src/com/rusefi/SensorSnifferPane.java index bda1ab9244..023e371f41 100644 --- a/java_console/ui/src/com/rusefi/SensorSnifferPane.java +++ b/java_console/ui/src/com/rusefi/SensorSnifferPane.java @@ -34,6 +34,7 @@ public class SensorSnifferPane { private double maxY; private final JPanel content = new JPanel(new BorderLayout()); + private final AnyCommand command; private boolean paused = false; @@ -85,7 +86,8 @@ public class SensorSnifferPane { upperPanel.add(pauseButton); upperPanel.add(new RpmLabel(2).getContent()); - upperPanel.add(AnyCommand.createField(config, true, false).getContent()); + command = AnyCommand.createField(config, true, false); + upperPanel.add(command.getContent()); upperPanel.add(new URLLabel(EngineSnifferPanel.HELP_TEXT, HELP_URL)); pauseButton.addActionListener(new @@ -138,6 +140,15 @@ public class SensorSnifferPane { return content; } + public ActionListener getTabSelectedListener() { + return new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + command.requestFocus(); + } + }; + } + private class SensorSnifferCanvas extends JComponent { @Override public void paint(Graphics g) { diff --git a/java_console/ui/src/com/rusefi/ui/MessagesPane.java b/java_console/ui/src/com/rusefi/ui/MessagesPane.java index 53363677e3..b500d80aa9 100644 --- a/java_console/ui/src/com/rusefi/ui/MessagesPane.java +++ b/java_console/ui/src/com/rusefi/ui/MessagesPane.java @@ -24,11 +24,12 @@ public class MessagesPane { } }; private final JButton fontButton = new JButton("Font"); + private final AnyCommand command; public MessagesPane(final Node config) { JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 0)); - AnyCommand command = AnyCommand.createArea(config, config.getProperty(AnyCommand.KEY), true, false); + command = AnyCommand.createArea(config, config.getProperty(AnyCommand.KEY), true, false); final MessagesPanel upperPanel = new MessagesPanel(command.getContent()); upperPanel.loadFont(config); @@ -67,4 +68,13 @@ public class MessagesPane { public JComponent getContent() { return content; } + + public ActionListener getTabSelectedListener() { + return new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + command.requestFocus(); + } + }; + } } \ No newline at end of file diff --git a/java_console/ui/src/com/rusefi/ui/engine/EngineSnifferPanel.java b/java_console/ui/src/com/rusefi/ui/engine/EngineSnifferPanel.java index 766e01b419..e9d933726b 100644 --- a/java_console/ui/src/com/rusefi/ui/engine/EngineSnifferPanel.java +++ b/java_console/ui/src/com/rusefi/ui/engine/EngineSnifferPanel.java @@ -72,6 +72,7 @@ public class EngineSnifferPanel { private final ChartScrollControl scrollControl; // todo: move it some sort of a singleton? public final HashMap channelName2PhysicalPin = new HashMap<>(); + private AnyCommand command; private boolean isPaused; @@ -112,8 +113,8 @@ public class EngineSnifferPanel { upperPanel.add(new RpmLabel(2).getContent()); if (!LinkManager.isLogViewer()) { - JComponent command = AnyCommand.createField(config, "chartsize " + EFI_DEFAULT_CHART_SIZE, true, true).getContent(); - upperPanel.add(command); + command = AnyCommand.createField(config, "chartsize " + EFI_DEFAULT_CHART_SIZE, true, true); + upperPanel.add(command.getContent()); } upperPanel.add(zoomControl); @@ -320,6 +321,16 @@ public class EngineSnifferPanel { scrollControl.reset(); } + public ActionListener getTabSelectedListener() { + return new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (command != null) + command.requestFocus(); + } + }; + } + /** * The job of this comparator is to place Spark charts before Injection charts */ diff --git a/java_console/ui/src/com/rusefi/ui/widgets/AnyCommand.java b/java_console/ui/src/com/rusefi/ui/widgets/AnyCommand.java index 1309e790b8..cd53df4ba2 100644 --- a/java_console/ui/src/com/rusefi/ui/widgets/AnyCommand.java +++ b/java_console/ui/src/com/rusefi/ui/widgets/AnyCommand.java @@ -29,6 +29,7 @@ public class AnyCommand { private AnyCommand(final JTextComponent text, final Node config, String defaultCommand, final boolean listenToCommands, boolean withCommandCaption) { this.text = text; + installCtrlEnterAction(); text.setText(defaultCommand); content.setBorder(BorderFactory.createLineBorder(Color.PINK)); if (withCommandCaption) { @@ -61,7 +62,6 @@ public class AnyCommand { @Override public void removeUpdate(DocumentEvent e) { - } @Override @@ -83,6 +83,19 @@ public class AnyCommand { // todo: limit the length of text in the text field } + private void installCtrlEnterAction() { + text.setToolTipText("Ctrl-Enter to send"); + text.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, + java.awt.event.InputEvent.CTRL_DOWN_MASK), + "sendKey"); + text.getActionMap().put("sendKey", new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + send(); + } + }); + } + private void send() { String cmd = text.getText(); for (String s : cmd.split("\n")) @@ -123,6 +136,10 @@ public class AnyCommand { this.content = content; } + public void requestFocus() { + text.requestFocus(); + } + interface Listener { void onSend(); }