-
Notifications
You must be signed in to change notification settings - Fork 89
Expand file tree
/
Copy pathSimpleEditor.java
More file actions
95 lines (77 loc) · 2.4 KB
/
SimpleEditor.java
File metadata and controls
95 lines (77 loc) · 2.4 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
package nodebox.client.editor;
import nodebox.client.CodeArea;
import nodebox.client.PaneView;
import nodebox.client.Theme;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.util.ArrayList;
public class SimpleEditor extends JPanel implements PaneView, DocumentListener {
private ArrayList<ChangeListener> changeListeners = new ArrayList<ChangeListener>();
private CodeArea codeArea;
private boolean changed = false;
public SimpleEditor() {
setLayout(new BorderLayout());
codeArea = new CodeArea();
codeArea.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
codeArea.getDocument().addDocumentListener(this);
JScrollPane codeScroll = new JScrollPane(codeArea);
codeScroll.setBorder(null);
add(codeScroll, BorderLayout.CENTER);
}
public String getSource() {
return codeArea.getText();
}
public void setSource(String source) {
codeArea.setText(source);
codeArea.setCaretPosition(0);
codeArea.discardAllEdits();
changed = false;
}
@Override
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
codeArea.setEnabled(enabled);
if (enabled) {
codeArea.setBackground(Color.white);
} else {
codeArea.setBackground(Theme.EDITOR_DISABLED_BACKGROUND_COLOR);
}
}
public boolean isChanged() {
return changed;
}
public void setChanged(boolean changed) {
this.changed = changed;
if (changed) {
fireDocumentChanged();
}
}
public void insertUpdate(DocumentEvent e) {
setChanged(true);
}
public void removeUpdate(DocumentEvent e) {
setChanged(true);
}
public void changedUpdate(DocumentEvent e) {
setChanged(true);
}
public void addCaretListener(CaretListener l) {
codeArea.addCaretListener(l);
}
public void removeCaretListener(CaretListener l) {
codeArea.removeCaretListener(l);
}
public void addChangeListener(ChangeListener l) {
changeListeners.add(l);
}
public void removeChangeListener(ChangeListener l) {
changeListeners.remove(l);
}
public void fireDocumentChanged() {
ChangeEvent e = new ChangeEvent(this);
for (ChangeListener l : changeListeners) {
l.stateChanged(e);
}
}
}