View Javadoc

1   /*
2    *  XNap Commons
3    *
4    *  Copyright (C) 2005  Felix Berger
5    *
6    *  This library is free software; you can redistribute it and/or
7    *  modify it under the terms of the GNU Lesser General Public
8    *  License as published by the Free Software Foundation; either
9    *  version 2.1 of the License, or (at your option) any later version.
10   *
11   *  This library is distributed in the hope that it will be useful,
12   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14   *  Lesser General Public License for more details.
15   *
16   *  You should have received a copy of the GNU Lesser General Public
17   *  License along with this library; if not, write to the Free Software
18   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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 provides automatic completion similar to the one provided in
28   * KDE.
29   * 
30   * It inserts the first match it finds into the text component after the
31   * cursor.
32   *
33   * @author Felix Berger
34   */
35  public class AutomaticCompletionMode extends ShortAutomaticCompletionMode
36  {
37  
38      protected void complete(String prefix)
39      {
40      	if (getModel().complete(prefix)) {
41      		Object obj = getModel().getElementAt(0);
42      		if (obj != null && obj.toString().length() > prefix.length()) {
43      			setText(obj.toString(), obj.toString().length(), prefix.length());
44      		}
45      	}
46      }
47      
48      private class DocumentHandler implements DocumentListener
49      {
50      	public void insertUpdate(DocumentEvent e)
51      	{
52      		if (e.getLength() == 1) {
53      			final String text = getText();
54      			Runnable r = new Runnable()
55      			{
56      				public void run()
57      				{
58      					complete(text);	
59      				}
60      			};
61      			SwingUtilities.invokeLater(r);
62      		}
63      	}
64  
65  		/*
66  		 * @see javax.swing.event.DocumentListener#removeUpdate(javax.swing.event.DocumentEvent)
67  		 */
68  		public void removeUpdate(DocumentEvent e)
69  		{
70  
71  		}
72  
73  		/*
74  		 * @see javax.swing.event.DocumentListener#changedUpdate(javax.swing.event.DocumentEvent)
75  		 */
76  		public void changedUpdate(DocumentEvent e)
77  		{
78  
79  		}
80      }
81  }