From 14fb22775a41179c8a4481e18ab84d8323517b15 Mon Sep 17 00:00:00 2001
From: Pieter12345
Date: Tue, 12 Mar 2019 00:36:13 +0100
Subject: [PATCH] Add copy button to the serial monitor
Add a copy button to the serial monitor that copies the text in the serial monitor output area to the system clipboard.
---
app/src/processing/app/AbstractTextMonitor.java | 9 +++++++++
app/src/processing/app/SerialMonitor.java | 11 ++++++++++-
2 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/app/src/processing/app/AbstractTextMonitor.java b/app/src/processing/app/AbstractTextMonitor.java
index 64a0928e55e..4e950b36b04 100644
--- a/app/src/processing/app/AbstractTextMonitor.java
+++ b/app/src/processing/app/AbstractTextMonitor.java
@@ -38,6 +38,7 @@ public abstract class AbstractTextMonitor extends AbstractMonitor {
protected JTextField textField;
protected JButton sendButton;
protected JButton clearButton;
+ protected JButton copyButton;
protected JCheckBox autoscrollBox;
protected JCheckBox addTimeStampBox;
protected JComboBox lineEndings;
@@ -84,6 +85,7 @@ public void windowGainedFocus(WindowEvent e) {
sendButton = new JButton(tr("Send"));
clearButton = new JButton(tr("Clear output"));
+ copyButton = new JButton(tr("Copy output"));
upperPane.add(textField);
upperPane.add(Box.createRigidArea(new Dimension(4, 0)));
@@ -131,6 +133,8 @@ public void windowGainedFocus(WindowEvent e) {
pane.add(Box.createRigidArea(new Dimension(8, 0)));
pane.add(serialRates);
pane.add(Box.createRigidArea(new Dimension(8, 0)));
+ pane.add(copyButton);
+ pane.add(Box.createRigidArea(new Dimension(8, 0)));
pane.add(clearButton);
applyPreferences();
@@ -143,6 +147,7 @@ protected void onEnableWindow(boolean enable)
{
textArea.setEnabled(enable);
clearButton.setEnabled(enable);
+ copyButton.setEnabled(enable);
scrollPane.setEnabled(enable);
textField.setEnabled(enable);
sendButton.setEnabled(enable);
@@ -161,6 +166,10 @@ public void onClearCommand(ActionListener listener) {
clearButton.addActionListener(listener);
}
+ public void onCopyCommand(ActionListener listener) {
+ copyButton.addActionListener(listener);
+ }
+
public void onSerialRateChange(ActionListener listener) {
serialRates.addActionListener(listener);
}
diff --git a/app/src/processing/app/SerialMonitor.java b/app/src/processing/app/SerialMonitor.java
index d4f59019eae..bc66af2fd21 100644
--- a/app/src/processing/app/SerialMonitor.java
+++ b/app/src/processing/app/SerialMonitor.java
@@ -22,6 +22,9 @@
import processing.app.legacy.PApplet;
import java.awt.Color;
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
import static processing.app.I18n.tr;
@@ -57,8 +60,14 @@ public SerialMonitor(Base base, BoardPort port) {
send(textField.getText());
textField.setText("");
});
-
+
onClearCommand((ActionEvent event) -> textArea.setText(""));
+
+ onCopyCommand((ActionEvent event) -> {
+ String text = textArea.getText();
+ Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
+ clipboard.setContents(new StringSelection(text), null);
+ });
}
private void send(String s) {