mirror of https://github.com/noisymime/Arduino.git
Adding automatically scoll option to serial monitor (pause / continue).
Changing how errors are displayed when the serial monitor can't be opened.
This commit is contained in:
parent
0557d46fc2
commit
8bdde5d683
|
@ -2339,8 +2339,13 @@ public class Editor extends JFrame implements RunnerListener {
|
||||||
|
|
||||||
public void handleSerial() {
|
public void handleSerial() {
|
||||||
if (uploading) return;
|
if (uploading) return;
|
||||||
serialMonitor.setVisible(true);
|
|
||||||
serialMonitor.openSerialPort();
|
try {
|
||||||
|
serialMonitor.openSerialPort();
|
||||||
|
serialMonitor.setVisible(true);
|
||||||
|
} catch (SerialException e) {
|
||||||
|
statusError(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -25,15 +25,17 @@ import java.awt.event.*;
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.border.*;
|
import javax.swing.border.*;
|
||||||
import javax.swing.event.*;
|
import javax.swing.event.*;
|
||||||
|
import javax.swing.text.*;
|
||||||
|
|
||||||
public class SerialMonitor extends JFrame implements MessageConsumer {
|
public class SerialMonitor extends JFrame implements MessageConsumer {
|
||||||
private Serial serial;
|
private Serial serial;
|
||||||
private String port;
|
private String port;
|
||||||
private JTextArea textArea;
|
private JTextArea textArea;
|
||||||
|
private JScrollPane scrollPane;
|
||||||
private JTextField textField;
|
private JTextField textField;
|
||||||
private JButton sendButton;
|
private JButton sendButton;
|
||||||
|
private JCheckBox autoscrollBox;
|
||||||
private JComboBox serialRates;
|
private JComboBox serialRates;
|
||||||
private JLabel statusLabel;
|
|
||||||
private int serialRate;
|
private int serialRate;
|
||||||
|
|
||||||
public SerialMonitor(String port) {
|
public SerialMonitor(String port) {
|
||||||
|
@ -64,7 +66,13 @@ public class SerialMonitor extends JFrame implements MessageConsumer {
|
||||||
textArea.setEditable(false);
|
textArea.setEditable(false);
|
||||||
textArea.setFont(font);
|
textArea.setFont(font);
|
||||||
|
|
||||||
getContentPane().add(new JScrollPane(textArea), BorderLayout.CENTER);
|
// don't automatically update the caret. that way we can manually decide
|
||||||
|
// whether or not to do so based on the autoscroll checkbox.
|
||||||
|
((DefaultCaret)textArea.getCaret()).setUpdatePolicy(DefaultCaret.NEVER_UPDATE);
|
||||||
|
|
||||||
|
scrollPane = new JScrollPane(textArea);
|
||||||
|
|
||||||
|
getContentPane().add(scrollPane, BorderLayout.CENTER);
|
||||||
|
|
||||||
JPanel pane = new JPanel(new BorderLayout(4, 0));
|
JPanel pane = new JPanel(new BorderLayout(4, 0));
|
||||||
pane.setBorder(new EmptyBorder(4, 4, 4, 4));
|
pane.setBorder(new EmptyBorder(4, 4, 4, 4));
|
||||||
|
@ -91,9 +99,8 @@ public class SerialMonitor extends JFrame implements MessageConsumer {
|
||||||
pane = new JPanel(new BorderLayout(4, 0));
|
pane = new JPanel(new BorderLayout(4, 0));
|
||||||
pane.setBorder(new EmptyBorder(4, 4, 4, 4));
|
pane.setBorder(new EmptyBorder(4, 4, 4, 4));
|
||||||
|
|
||||||
statusLabel = new JLabel();
|
autoscrollBox = new JCheckBox("Automatically scroll when new data is received.", true);
|
||||||
|
pane.add(autoscrollBox, BorderLayout.CENTER);
|
||||||
pane.add(statusLabel, BorderLayout.CENTER);
|
|
||||||
|
|
||||||
String[] serialRateStrings = {
|
String[] serialRateStrings = {
|
||||||
"300","1200","2400","4800","9600","14400",
|
"300","1200","2400","4800","9600","14400",
|
||||||
|
@ -107,13 +114,17 @@ public class SerialMonitor extends JFrame implements MessageConsumer {
|
||||||
serialRate = Preferences.getInteger("serial.debug_rate");
|
serialRate = Preferences.getInteger("serial.debug_rate");
|
||||||
serialRates.setSelectedItem(serialRate + " baud");
|
serialRates.setSelectedItem(serialRate + " baud");
|
||||||
serialRates.addActionListener(new ActionListener() {
|
serialRates.addActionListener(new ActionListener() {
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent event) {
|
||||||
String wholeString = (String) serialRates.getSelectedItem();
|
String wholeString = (String) serialRates.getSelectedItem();
|
||||||
String rateString = wholeString.substring(0, wholeString.indexOf(' '));
|
String rateString = wholeString.substring(0, wholeString.indexOf(' '));
|
||||||
serialRate = Integer.parseInt(rateString);
|
serialRate = Integer.parseInt(rateString);
|
||||||
Preferences.set("serial.debug_rate", rateString);
|
Preferences.set("serial.debug_rate", rateString);
|
||||||
closeSerialPort();
|
closeSerialPort();
|
||||||
openSerialPort();
|
try {
|
||||||
|
openSerialPort();
|
||||||
|
} catch (SerialException e) {
|
||||||
|
System.err.println(e);
|
||||||
|
}
|
||||||
}});
|
}});
|
||||||
|
|
||||||
pane.add(serialRates, BorderLayout.EAST);
|
pane.add(serialRates, BorderLayout.EAST);
|
||||||
|
@ -128,26 +139,18 @@ public class SerialMonitor extends JFrame implements MessageConsumer {
|
||||||
serial.write(s);
|
serial.write(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openSerialPort() {
|
public void openSerialPort() throws SerialException {
|
||||||
if (serial != null) return;
|
if (serial != null) return;
|
||||||
|
|
||||||
try {
|
serial = new Serial(port, serialRate);
|
||||||
statusLabel.setText("opening...");
|
serial.addListener(this);
|
||||||
serial = new Serial(port, serialRate);
|
|
||||||
serial.addListener(this);
|
|
||||||
statusLabel.setText("");
|
|
||||||
} catch (SerialException e) {
|
|
||||||
statusLabel.setText(e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void closeSerialPort() {
|
public void closeSerialPort() {
|
||||||
if (serial != null) {
|
if (serial != null) {
|
||||||
statusLabel.setText("closing...");
|
|
||||||
textArea.setText("");
|
textArea.setText("");
|
||||||
serial.dispose();
|
serial.dispose();
|
||||||
serial = null;
|
serial = null;
|
||||||
statusLabel.setText("");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,6 +158,9 @@ public class SerialMonitor extends JFrame implements MessageConsumer {
|
||||||
SwingUtilities.invokeLater(new Runnable() {
|
SwingUtilities.invokeLater(new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
textArea.append(s);
|
textArea.append(s);
|
||||||
|
if (autoscrollBox.isSelected()) {
|
||||||
|
textArea.setCaretPosition(textArea.getDocument().getLength());
|
||||||
|
}
|
||||||
}});
|
}});
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue