1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.xnap.commons.gui.completion;
21
22 import javax.swing.SwingUtilities;
23 import javax.swing.event.DocumentEvent;
24 import javax.swing.event.DocumentListener;
25
26 /***
27 * This mode mimics KDE's short automatic completion mode.
28 *
29 * While typing possible unique completions are inserted into the text
30 * component after the cursor and set selected, so the user can type over
31 * them in case they are not wished for.
32 *
33 * @author Felix Berger
34 */
35 public class ShortAutomaticCompletionMode extends AbstractCompletionMode
36 {
37
38 private DocumentListener docListener = new DocumentHandler();
39
40 protected void complete(String prefix)
41 {
42 String comp = getModel().completeUniquePrefix(prefix);
43
44 if (comp.length() > prefix.length()) {
45 setText(comp, comp.length(), prefix.length());
46 }
47 }
48
49 public void disable()
50 {
51 getTextComponent().getDocument().removeDocumentListener(docListener);
52 }
53
54 protected void enable()
55 {
56 getTextComponent().getDocument().addDocumentListener(docListener);
57 }
58
59 private class DocumentHandler implements DocumentListener
60 {
61
62 public void insertUpdate(DocumentEvent e)
63 {
64 if (e.getLength() == 1) {
65 final String text = getText();
66 Runnable r = new Runnable()
67 {
68
69 public void run()
70 {
71 complete(text);
72 }
73 };
74 SwingUtilities.invokeLater(r);
75 }
76 }
77
78
79
80
81 public void removeUpdate(DocumentEvent e)
82 {
83 }
84
85
86
87
88 public void changedUpdate(DocumentEvent e)
89 {
90 }
91 }
92 }