Statistics
| Revision:

gvsig-scripting / org.gvsig.scripting / trunk / org.gvsig.scripting / org.gvsig.scripting.swing / org.gvsig.scripting.swing.impl / src / main / java / org / gvsig / scripting / swing / impl / composer / editors / BaseTextEditor.java @ 977

History | View | Annotate | Download (5.02 KB)

1
package org.gvsig.scripting.swing.impl.composer.editors;
2

    
3
import java.awt.BorderLayout;
4
import java.awt.event.ActionListener;
5
import java.awt.event.KeyEvent;
6
import java.awt.event.KeyListener;
7
import java.beans.PropertyChangeListener;
8
import javax.swing.JPanel;
9
import javax.swing.event.DocumentEvent;
10
import javax.swing.event.DocumentListener;
11
import javax.swing.text.JTextComponent;
12
import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
13
import org.gvsig.scripting.swing.api.JTextEditor;
14
import org.gvsig.scripting.swing.api.ScriptingSwingLocator;
15
import org.gvsig.scripting.swing.api.ScriptingUIManager;
16
import org.gvsig.scripting.swing.api.SyntaxtHighlightTextComponent;
17
import org.gvsig.scripting.swing.impl.composer.ChangeListenerSupport;
18

    
19
public class BaseTextEditor extends JPanel implements JTextEditor {
20

    
21
    private static final long serialVersionUID = -4217823183731699721L;
22

    
23
    private final ChangeListenerSupport changeListeners;
24
    final ScriptingUIManager uimanager;
25
    private SyntaxtHighlightTextComponent editorText;
26
    private final int menuShortcutKeyMask;
27

    
28
    
29
    public BaseTextEditor() {
30
        this.menuShortcutKeyMask = getToolkit().getMenuShortcutKeyMask();
31
        this.uimanager = ScriptingSwingLocator.getUIManager();
32
        this.changeListeners = new ChangeListenerSupport();
33
        this.initComponent();
34
    }
35

    
36
    public ChangeListenerSupport getChangeListenerSupport() {
37
        return this.changeListeners;
38
    }
39
    
40
    @Override
41
    public void addUpdateCaretPositionActionListener(ActionListener actionlistener) {
42
        editorText.addUpdateCaretPositionActionListener(actionlistener);
43
    }
44

    
45
    public void addChangeListener(PropertyChangeListener listener) {
46
        this.changeListeners.addChangeListener(listener);
47
    }
48

    
49
    private void initComponent() {
50
        this.setLayout(new BorderLayout());
51
        editorText = (SyntaxtHighlightTextComponent) uimanager.createSyntaxHighlightingPanel();
52
//        editorText.addKeyListener(new KeyListener() {
53
//
54
//            @Override
55
//            public void keyTyped(KeyEvent e) {
56
//                doKeyTyped(e);
57
//            }
58
//
59
//            @Override
60
//            public void keyPressed(KeyEvent e) {
61
//            }
62
//
63
//            @Override
64
//            public void keyReleased(KeyEvent e) {
65
//            }
66
//        });
67
        editorText.getJTextComponent().getDocument().addDocumentListener(new DocumentListener() {
68
            @Override
69
            public void insertUpdate(DocumentEvent e) {
70
                changeListeners.fireChange("code", null);
71
            }
72

    
73
            @Override
74
            public void removeUpdate(DocumentEvent e) {
75
                changeListeners.fireChange("code", null);
76
            }
77

    
78
            @Override
79
            public void changedUpdate(DocumentEvent e) {
80
                changeListeners.fireChange("code", null);
81
            }
82
        });
83
        this.add(editorText.asJComponent(), BorderLayout.CENTER);
84
    }
85

    
86
//    public void doKeyTyped(KeyEvent e) {
87
//        if (e.getKeyChar() == KeyEvent.CHAR_UNDEFINED) {
88
//            return;
89
//        }
90
//        if ((e.getModifiers() & this.menuShortcutKeyMask) == this.menuShortcutKeyMask) {
91
//            return;
92
//        }
93
//        this.changeListeners.fireChange("code", null);
94
//    }
95

    
96
    public void setText(String mimeType, String text) {
97
        boolean enabled = this.changeListeners.setEnabled(false);
98
        try {
99
            editorText.setContentType(mimeType);
100
            editorText.setText(text);
101
            editorText.discardAllEdits();
102
        } finally {
103
            this.changeListeners.setEnabled(enabled);
104
        }
105
    }
106
    
107
    public String getText() {
108
        return this.editorText.getText();
109
    }
110

    
111
    @Override
112
    public JTextComponent getJTextComponent() {
113
        return this.editorText.getJTextComponent();
114
    }
115

    
116
    @Override
117
    public void selectLine(int line) {
118
        JTextComponent editor = this.getJTextComponent();
119
        editor.requestFocusInWindow();
120

    
121
        String code = editor.getText();
122
        int lineCounter = 0;
123
        int initialSelection = 0;
124
        int finalSelection = 0;
125
        for (int j = 0; j < code.length(); j++) {
126
            if (code.charAt(j) == '\n') {
127
                lineCounter++;
128
                if (lineCounter == line - 1) {
129
                    initialSelection = j;
130
                }
131
                if (lineCounter == line || (finalSelection == 0 && j == code.length() - 1)) {
132
                    finalSelection = j;
133
                }
134
            }
135
        }
136

    
137
        editor.select(initialSelection, finalSelection);
138
    }
139
    
140
    @Override
141
    public SyntaxtHighlightTextComponent getSyntaxtHighlightTextComponent() {
142
        return this.editorText;
143
    }
144

    
145
    @Override
146
    public void gotoline(int line) {
147
        getSyntaxtHighlightTextComponent().gotoline(line);
148
    }
149

    
150
    @Override
151
    public int getLineCount() {
152
        JTextComponent textComponent = this.getJTextComponent();
153
        if( textComponent instanceof RSyntaxTextArea ) {
154
            return ((RSyntaxTextArea)textComponent).getLineCount();
155
        }
156
        return 0; 
157
    }
158
}