1 21 22 package org.armedbear.j; 23 24 import java.awt.Dimension ; 25 import java.awt.Font ; 26 import java.awt.Graphics ; 27 import java.awt.event.FocusEvent ; 28 import java.awt.event.FocusListener ; 29 import java.awt.event.MouseEvent ; 30 import java.awt.event.MouseListener ; 31 import java.awt.event.TextListener ; 32 import javax.swing.JTextField ; 33 import javax.swing.SwingUtilities ; 34 35 public class HistoryTextField extends JTextField implements FocusListener , 36 MouseListener 37 { 38 private History history; 39 40 private Object owner; 41 42 private TextListener textListener; 44 45 protected TextFieldHandler handler; 46 47 public HistoryTextField(Editor editor, int columns) 48 { 49 super(columns); 50 final Preferences preferences = Editor.preferences(); 51 final String fontName = 52 preferences.getStringProperty(Property.TEXT_FIELD_FONT_NAME); 53 if (fontName != null) { 54 int fontSize = 55 preferences.getIntegerProperty(Property.TEXT_FIELD_FONT_SIZE); 56 if (fontSize == 0) 57 fontSize = 58 preferences.getIntegerProperty(Property.DIALOG_FONT_SIZE); 59 setFont(new Font (fontName, Font.PLAIN, fontSize)); 60 } 61 setAlignmentX(LEFT_ALIGNMENT); 62 setHandler(new DefaultTextFieldHandler(editor, this)); 63 addFocusListener(this); 64 addMouseListener(this); 65 } 66 67 public HistoryTextField(int columns) 68 { 69 this(Editor.currentEditor(), columns); 70 } 71 72 public Dimension getPreferredSize() { 73 Dimension size = super.getPreferredSize(); 74 size.width = getColumns() * 11; 75 return size; 76 } 77 78 public final Object getOwner() 79 { 80 return owner; 81 } 82 83 public final void setOwner(Object owner) 84 { 85 this.owner = owner; 86 } 87 88 public void addTextListener(TextListener textListener) 89 { 90 Debug.assertTrue(this.textListener == null); 91 this.textListener = textListener; 92 } 93 94 public final TextListener getTextListener() 95 { 96 return textListener; 97 } 98 99 public final TextFieldHandler getHandler() 100 { 101 return handler; 102 } 103 104 public final void setHandler(TextFieldHandler handler) 105 { 106 Debug.assertTrue(handler != null); 107 if (this.handler != null) 108 removeKeyListener(this.handler); 109 this.handler = handler; 110 addKeyListener(handler); 111 } 112 113 public void setHistory(History history) 114 { 115 this.history = history; 116 resetHistory(); 117 } 118 119 public final History getHistory() 120 { 121 return history; 122 } 123 124 public final void resetHistory() 125 { 126 if (history != null) 127 history.reset(); 128 } 129 130 public String getText() 131 { 132 String s = super.getText(); 133 int length = s.length(); 134 FastStringBuffer sb = new FastStringBuffer(length); 135 for (int i = 0; i < length; i++) { 137 char c = s.charAt(i); 138 if (!Character.isISOControl(c)) 139 sb.append(c); 140 } 141 return sb.toString(); 142 } 143 144 public void previousHistory() 145 { 146 if (history != null) { 147 final String text = super.getText(); 148 while (true) { 149 String s = history.getPrevious(); 150 if (s == null) 151 break; 152 if (!s.equals(text)) { 153 setText(s); 154 selectAll(); 155 break; 156 } 157 } 158 } 159 } 160 161 public void nextHistory() 162 { 163 if (history != null) { 164 final String text = super.getText(); 165 while (true) { 166 String s = history.getNext(); 167 if (s == null) 168 break; 169 if (!s.equals(text)) { 170 setText(s); 171 selectAll(); 172 break; 173 } 174 } 175 } 176 } 177 178 public void recallLast() 179 { 180 if (history != null) { 181 String s = history.getPrevious(); 182 setText(s != null ? s : ""); 183 } 184 } 185 186 public void paintComponent(Graphics g) 187 { 188 Display.setRenderingHints(g); 189 super.paintComponent(g); 190 } 191 192 public void focusGained(FocusEvent e) 193 { 194 selectAll(); 195 } 196 197 public void focusLost(FocusEvent e) 198 { 199 int length = getText().length(); 200 select(length, length); 201 } 202 203 public void mouseClicked(MouseEvent e) {} 204 205 public void mouseEntered(MouseEvent e) {} 206 207 public void mouseExited(MouseEvent e) {} 208 209 public void mousePressed(MouseEvent e) {} 210 211 public void mouseReleased(MouseEvent e) 212 { 213 final int dot = getCaretPosition(); 214 final int mark = getCaret().getMark(); 215 Runnable r = new Runnable () { 216 public void run() 217 { 218 setCaretPosition(mark); 219 moveCaretPosition(dot); 220 } 221 }; 222 SwingUtilities.invokeLater(r); 223 } 224 } 225 | Popular Tags |