Skip to content

Commit 1a6d554

Browse files
Pieter12345cmaglie
authored andcommitted
Make text monitor output area font size dynamically adjustable
Add CTRL +/- and CTRL scroll shortcuts to increase/decrease serial/network monitor output text size. This font size is shared with the editor and adjusting either will update both. Partially fixes #8615
1 parent 49242be commit 1a6d554

File tree

6 files changed

+84
-19
lines changed

6 files changed

+84
-19
lines changed

app/src/cc/arduino/packages/MonitorFactory.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -30,23 +30,24 @@
3030
package cc.arduino.packages;
3131

3232
import processing.app.AbstractMonitor;
33+
import processing.app.Base;
3334
import processing.app.NetworkMonitor;
3435
import processing.app.SerialMonitor;
3536

3637
public class MonitorFactory {
3738

38-
public AbstractMonitor newMonitor(BoardPort port) {
39+
public AbstractMonitor newMonitor(Base base, BoardPort port) {
3940
if ("network".equals(port.getProtocol())) {
4041
if ("yes".equals(port.getPrefs().get("ssh_upload"))) {
4142
// the board is SSH capable
42-
return new NetworkMonitor(port);
43+
return new NetworkMonitor(base, port);
4344
} else {
4445
// SSH not supported, no monitor support
4546
return null;
4647
}
4748
}
4849

49-
return new SerialMonitor(port);
50+
return new SerialMonitor(base, port);
5051
}
5152

5253
}

app/src/processing/app/AbstractMonitor.java

+9
Original file line numberDiff line numberDiff line change
@@ -173,4 +173,13 @@ public void actionPerformed(ActionEvent e) {
173173
message(s);
174174
}
175175
}
176+
177+
/**
178+
* Read and apply new values from the preferences, either because
179+
* the app is just starting up, or the user just finished messing
180+
* with things in the Preferences window.
181+
*/
182+
public void applyPreferences() {
183+
// Empty.
184+
};
176185
}

app/src/processing/app/AbstractTextMonitor.java

+63-11
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
import java.awt.Font;
99
import java.awt.event.ActionEvent;
1010
import java.awt.event.ActionListener;
11+
import java.awt.event.KeyEvent;
12+
import java.awt.event.KeyAdapter;
13+
import java.awt.event.MouseWheelEvent;
1114
import java.awt.event.WindowAdapter;
1215
import java.awt.event.WindowEvent;
1316
import java.text.SimpleDateFormat;
@@ -32,6 +35,8 @@
3235
@SuppressWarnings("serial")
3336
public abstract class AbstractTextMonitor extends AbstractMonitor {
3437

38+
private final Base base;
39+
3540
protected JLabel noLineEndingAlert;
3641
protected TextAreaFIFO textArea;
3742
protected JScrollPane scrollPane;
@@ -43,27 +48,58 @@ public abstract class AbstractTextMonitor extends AbstractMonitor {
4348
protected JComboBox lineEndings;
4449
protected JComboBox serialRates;
4550

46-
public AbstractTextMonitor(BoardPort boardPort) {
51+
public AbstractTextMonitor(Base base, BoardPort boardPort) {
4752
super(boardPort);
53+
this.base = base;
4854
}
4955

5056
protected void onCreateWindow(Container mainPane) {
51-
Font consoleFont = Theme.getFont("console.font");
52-
Font editorFont = PreferencesData.getFont("editor.font");
53-
Font font = Theme.scale(new Font(consoleFont.getName(), consoleFont.getStyle(), editorFont.getSize()));
5457

5558
mainPane.setLayout(new BorderLayout());
5659

5760
textArea = new TextAreaFIFO(8_000_000);
5861
textArea.setRows(16);
5962
textArea.setColumns(40);
6063
textArea.setEditable(false);
61-
textArea.setFont(font);
6264

6365
// don't automatically update the caret. that way we can manually decide
6466
// whether or not to do so based on the autoscroll checkbox.
6567
((DefaultCaret) textArea.getCaret()).setUpdatePolicy(DefaultCaret.NEVER_UPDATE);
6668

69+
// Add "CTRL scroll" hotkey for font size adjustment.
70+
textArea.addMouseWheelListener((MouseWheelEvent e) -> {
71+
if (e.isControlDown()) {
72+
if (e.getWheelRotation() < 0) {
73+
base.handleFontSizeChange(1);
74+
} else {
75+
base.handleFontSizeChange(-1);
76+
}
77+
} else {
78+
e.getComponent().getParent().dispatchEvent(e);
79+
}
80+
});
81+
82+
// Add "CTRL (SHIFT) =/+" and "CTRL -" hotkeys for font size adjustment.
83+
textArea.addKeyListener(new KeyAdapter() {
84+
@Override
85+
public void keyPressed(KeyEvent e) {
86+
if (e.getModifiersEx() == KeyEvent.CTRL_DOWN_MASK
87+
|| e.getModifiersEx() == (KeyEvent.CTRL_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK)) {
88+
switch (e.getKeyCode()) {
89+
case KeyEvent.VK_PLUS:
90+
case KeyEvent.VK_EQUALS:
91+
base.handleFontSizeChange(1);
92+
break;
93+
case KeyEvent.VK_MINUS:
94+
if (!e.isShiftDown()) {
95+
base.handleFontSizeChange(-1);
96+
}
97+
break;
98+
}
99+
}
100+
}
101+
});
102+
67103
scrollPane = new JScrollPane(textArea);
68104

69105
mainPane.add(scrollPane, BorderLayout.CENTER);
@@ -110,12 +146,6 @@ public void actionPerformed(ActionEvent event) {
110146
noLineEndingAlert.setForeground(pane.getBackground());
111147
}
112148
});
113-
if (PreferencesData.get("serial.line_ending") != null) {
114-
lineEndings.setSelectedIndex(PreferencesData.getInteger("serial.line_ending"));
115-
}
116-
if (PreferencesData.get("serial.show_timestamp") != null) {
117-
addTimeStampBox.setSelected(PreferencesData.getBoolean("serial.show_timestamp"));
118-
}
119149
addTimeStampBox.addActionListener(new ActionListener() {
120150
public void actionPerformed(ActionEvent e) {
121151
PreferencesData.setBoolean("serial.show_timestamp", addTimeStampBox.isSelected());
@@ -142,6 +172,8 @@ public void actionPerformed(ActionEvent e) {
142172
pane.add(Box.createRigidArea(new Dimension(8, 0)));
143173
pane.add(clearButton);
144174

175+
applyPreferences();
176+
145177
mainPane.add(pane, BorderLayout.SOUTH);
146178
}
147179

@@ -189,6 +221,26 @@ protected void updateTextArea(String msg) {
189221
}
190222
}
191223

224+
@Override
225+
public void applyPreferences() {
226+
227+
// Apply font.
228+
Font consoleFont = Theme.getFont("console.font");
229+
Font editorFont = PreferencesData.getFont("editor.font");
230+
textArea.setFont(Theme.scale(new Font(
231+
consoleFont.getName(), consoleFont.getStyle(), editorFont.getSize())));
232+
233+
// Apply line endings.
234+
if (PreferencesData.get("serial.line_ending") != null) {
235+
lineEndings.setSelectedIndex(PreferencesData.getInteger("serial.line_ending"));
236+
}
237+
238+
// Apply timestamp visibility.
239+
if (PreferencesData.get("serial.show_timestamp") != null) {
240+
addTimeStampBox.setSelected(PreferencesData.getBoolean("serial.show_timestamp"));
241+
}
242+
}
243+
192244
private String addTimestamps(String text) {
193245
String now = new SimpleDateFormat("HH:mm:ss.SSS -> ").format(new Date());
194246
final StringBuilder sb = new StringBuilder(text.length() + now.length());

app/src/processing/app/Editor.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,9 @@ public void applyPreferences() {
495495
tab.applyPreferences();
496496
}
497497
console.applyPreferences();
498+
if (serialMonitor != null) {
499+
serialMonitor.applyPreferences();
500+
}
498501
}
499502

500503

@@ -2211,7 +2214,7 @@ public void handleSerial() {
22112214
return;
22122215
}
22132216

2214-
serialMonitor = new MonitorFactory().newMonitor(port);
2217+
serialMonitor = new MonitorFactory().newMonitor(base, port);
22152218

22162219
if (serialMonitor == null) {
22172220
String board = port.getPrefs().get("board");

app/src/processing/app/NetworkMonitor.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ public class NetworkMonitor extends AbstractTextMonitor implements MessageConsum
3131
private Channel channel;
3232
private int connectionAttempts;
3333

34-
public NetworkMonitor(BoardPort port) {
35-
super(port);
34+
public NetworkMonitor(Base base, BoardPort port) {
35+
super(base, port);
3636

3737
onSendCommand(new ActionListener() {
3838
public void actionPerformed(ActionEvent event) {

app/src/processing/app/SerialMonitor.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ public class SerialMonitor extends AbstractTextMonitor {
3333
private Serial serial;
3434
private int serialRate;
3535

36-
public SerialMonitor(BoardPort port) {
37-
super(port);
36+
public SerialMonitor(Base base, BoardPort port) {
37+
super(base, port);
3838

3939
serialRate = PreferencesData.getInteger("serial.debug_rate");
4040
serialRates.setSelectedItem(serialRate + " " + tr("baud"));

0 commit comments

Comments
 (0)