KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > genimen > djeneric > ui > DjCodeCompleter


1 /*
2  * Copyright (c) 2001-2005 by Genimen BV (www.genimen.com) All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, is permitted provided that the following conditions are met: -
6  * Redistributions of source code must retain the above copyright notice, this
7  * list of conditions and the following disclaimer. - Redistributions in binary
8  * form must reproduce the above copyright notice, this list of conditions and
9  * the following disclaimer in the documentation and/or other materials
10  * provided with the distribution. - All advertising materials mentioning
11  * features or use of this software must display the following acknowledgment:
12  * "This product includes Djeneric." - Products derived from this software may
13  * not be called "Djeneric" nor may "Djeneric" appear in their names without
14  * prior written permission of Genimen BV. - Redistributions of any form
15  * whatsoever must retain the following acknowledgment: "This product includes
16  * Djeneric."
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
19  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  * ARE DISCLAIMED. IN NO EVENT SHALL GENIMEN BV, DJENERIC.ORG, OR CONTRIBUTORS
22  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28  * POSSIBILITY OF SUCH DAMAGE.
29  */

30 package com.genimen.djeneric.ui;
31
32 import java.awt.event.ActionEvent JavaDoc;
33 import java.awt.event.ActionListener JavaDoc;
34 import java.util.ArrayList JavaDoc;
35 import java.util.Collections JavaDoc;
36 import java.util.HashMap JavaDoc;
37 import java.util.Iterator JavaDoc;
38
39 import javax.swing.JMenuItem JavaDoc;
40 import javax.swing.JPopupMenu JavaDoc;
41 import javax.swing.text.JTextComponent JavaDoc;
42
43 import com.genimen.djeneric.util.DjString;
44 import com.genimen.djeneric.util.DjStringReplacer;
45
46 public class DjCodeCompleter extends JPopupMenu JavaDoc implements ActionListener JavaDoc
47 {
48   private static final long serialVersionUID = 3257571706699658544L;
49
50   DjEditorPositionInfo _wi;
51
52   public DjCodeCompleter(HashMap JavaDoc selection, JTextComponent JavaDoc editor, DjEditorPositionInfo wi)
53   {
54     super("Code completion");
55     ArrayList JavaDoc keys = new ArrayList JavaDoc();
56     Iterator JavaDoc it = selection.keySet().iterator();
57     while (it.hasNext())
58     {
59       keys.add(it.next());
60     }
61     Collections.sort(keys);
62     _wi = wi;
63     for (int i = 0; i < keys.size(); i++)
64     {
65       JMenuItem JavaDoc itm = new JMenuItem JavaDoc(keys.get(i).toString());
66       itm.setActionCommand(selection.get(keys.get(i)).toString());
67       itm.addActionListener(this);
68       add(itm);
69     }
70   }
71
72   public void actionPerformed(ActionEvent JavaDoc e)
73   {
74     int indent = _wi.getStart() - _wi.getLineStart();
75     String JavaDoc indentStr = "";
76     if (indent > 0) indentStr = DjString.appendToLength("", " ", indent);
77     String JavaDoc value = e.getActionCommand();
78     int idx = value.indexOf("|");
79     if (idx != -1)
80     {
81       DjStringReplacer sr = new DjStringReplacer(value);
82       sr.replace("\n", "\n" + indentStr);
83       idx = value.indexOf("|");
84       value = sr.replace("|", "").trim() + "\n";
85     }
86     else idx = value.length();
87
88     _wi.replaceRange(value, idx);
89   }
90 }
Popular Tags