forked from facchinm/Arduino
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEditorConsole.java
More file actions
126 lines (98 loc) · 4.54 KB
/
Copy pathEditorConsole.java
File metadata and controls
126 lines (98 loc) · 4.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/*
Part of the Processing project - http://processing.org
Copyright (c) 2004-06 Ben Fry and Casey Reas
Copyright (c) 2001-04 Massachusetts Institute of Technology
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package processing.app;
import cc.arduino.ConsoleOutputStream;
import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
import java.io.PrintStream;
/**
* Message console that sits below the editing area.
*/
public class EditorConsole extends JScrollPane {
private static ConsoleOutputStream out;
private static ConsoleOutputStream err;
public static synchronized void init(SimpleAttributeSet outStyle, PrintStream outStream, SimpleAttributeSet errStyle, PrintStream errStream) {
if (out != null) {
return;
}
out = new ConsoleOutputStream(outStyle, outStream);
System.setOut(new PrintStream(out, true));
err = new ConsoleOutputStream(errStyle, errStream);
System.setErr(new PrintStream(err, true));
}
public static void setCurrentEditorConsole(EditorConsole console) {
out.setCurrentEditorConsole(console);
err.setCurrentEditorConsole(console);
}
private final DefaultStyledDocument document;
private final JTextPane consoleTextPane;
public EditorConsole() {
document = new DefaultStyledDocument();
consoleTextPane = new JTextPane(document);
consoleTextPane.setEditable(false);
DefaultCaret caret = (DefaultCaret) consoleTextPane.getCaret();
caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE);
Color backgroundColour = Theme.getColor("console.color");
consoleTextPane.setBackground(backgroundColour);
Font consoleFont = Theme.getFont("console.font");
Font editorFont = PreferencesData.getFont("editor.font");
Font actualFont = new Font(consoleFont.getName(), consoleFont.getStyle(), editorFont.getSize());
SimpleAttributeSet stdOutStyle = new SimpleAttributeSet();
StyleConstants.setForeground(stdOutStyle, Theme.getColor("console.output.color"));
StyleConstants.setBackground(stdOutStyle, backgroundColour);
StyleConstants.setFontSize(stdOutStyle, actualFont.getSize());
StyleConstants.setFontFamily(stdOutStyle, actualFont.getFamily());
StyleConstants.setBold(stdOutStyle, actualFont.isBold());
StyleConstants.setItalic(stdOutStyle, actualFont.isItalic());
consoleTextPane.setParagraphAttributes(stdOutStyle, true);
SimpleAttributeSet stdErrStyle = new SimpleAttributeSet();
StyleConstants.setForeground(stdErrStyle, Theme.getColor("console.error.color"));
StyleConstants.setBackground(stdErrStyle, backgroundColour);
StyleConstants.setFontSize(stdErrStyle, actualFont.getSize());
StyleConstants.setFontFamily(stdErrStyle, actualFont.getFamily());
StyleConstants.setBold(stdErrStyle, actualFont.isBold());
StyleConstants.setItalic(stdErrStyle, actualFont.isItalic());
JPanel noWrapPanel = new JPanel(new BorderLayout());
noWrapPanel.add(consoleTextPane);
setViewportView(noWrapPanel);
getVerticalScrollBar().setUnitIncrement(7);
// calculate height of a line of text in pixels
// and size window accordingly
FontMetrics metrics = getFontMetrics(actualFont);
int height = metrics.getAscent() + metrics.getDescent();
int lines = PreferencesData.getInteger("console.lines");
int sizeFudge = 6; //10; // unclear why this is necessary, but it is
setPreferredSize(new Dimension(1024, (height * lines) + sizeFudge));
setMinimumSize(new Dimension(1024, (height * 5) + sizeFudge));
EditorConsole.init(stdOutStyle, System.out, stdErrStyle, System.err);
}
public void clear() {
try {
document.remove(0, document.getLength());
} catch (BadLocationException e) {
// ignore the error otherwise this will cause an infinite loop
// maybe not a good idea in the long run?
}
}
public String getText() {
return consoleTextPane.getText().trim();
}
public Document getDocument() {
return document;
}
}