[autocomplete] 16/143: Adding ToolTipSupplier to RTextArea so hosting apps can supply tooltips without subclassing RSTA. AutoComplete has optional support for this through CCompletionProvider (to be expanded on later). Fixed recently-broken hyperlinks in description autocomplete window. Made command+c the copy shortcut for the description window on OS X.
Benjamin Mesing
ben at alioth.debian.org
Sat Oct 19 12:53:10 UTC 2013
This is an automated email from the git hooks/post-receive script.
ben pushed a commit to branch master
in repository autocomplete.
commit 2cc629346a5f5b17a362c43b9351fa66015a51bd
Author: bobbylight <robert at fifesoft.com>
Date: Thu Feb 5 21:31:20 2009 +0000
Adding ToolTipSupplier to RTextArea so hosting apps can supply tooltips without subclassing RSTA. AutoComplete has optional support for this through CCompletionProvider (to be expanded on later). Fixed recently-broken hyperlinks in description autocomplete window. Made command+c the copy shortcut for the description window on OS X.
---
.../fife/ui/autocomplete/AbstractCompletion.java | 11 +
.../autocomplete/AbstractCompletionProvider.java | 8 +-
.../ui/autocomplete/AutoCompleteDescWindow.java | 2 +-
.../ui/autocomplete/AutoCompletePopupWindow.java | 22 +-
src/org/fife/ui/autocomplete/AutoCompletion.java | 2 +-
.../fife/ui/autocomplete/CCompletionProvider.java | 61 ++++-
src/org/fife/ui/autocomplete/Completion.java | 21 ++
.../fife/ui/autocomplete/CompletionProvider.java | 17 +-
.../ui/autocomplete/DefaultCompletionProvider.java | 76 +++++-
.../fife/ui/autocomplete/FunctionCompletion.java | 23 ++
.../ui/autocomplete/JarCompletionProvider.java | 282 --------------------
.../fife/ui/autocomplete/VariableCompletion.java | 32 ++-
12 files changed, 253 insertions(+), 304 deletions(-)
diff --git a/src/org/fife/ui/autocomplete/AbstractCompletion.java b/src/org/fife/ui/autocomplete/AbstractCompletion.java
index 4faf659..7a9d36c 100644
--- a/src/org/fife/ui/autocomplete/AbstractCompletion.java
+++ b/src/org/fife/ui/autocomplete/AbstractCompletion.java
@@ -108,6 +108,17 @@ public abstract class AbstractCompletion implements Completion, Comparable {
/**
+ * The default implementation returns <code>null</code>. Subclasses
+ * can override this method.
+ *
+ * @return The tool tip text.
+ */
+ public String getToolTipText() {
+ return null;
+ }
+
+
+ /**
* Returns a string representation of this completion. The default
* implementation returns {@link #getInputText()}.
*
diff --git a/src/org/fife/ui/autocomplete/AbstractCompletionProvider.java b/src/org/fife/ui/autocomplete/AbstractCompletionProvider.java
index 1113b50..24b098e 100644
--- a/src/org/fife/ui/autocomplete/AbstractCompletionProvider.java
+++ b/src/org/fife/ui/autocomplete/AbstractCompletionProvider.java
@@ -49,9 +49,9 @@ public abstract class AbstractCompletionProvider
protected List completions;
/**
- * The case-insensitive {@link Completion} comparator.
+ * Compares a {@link Completion} against a String.
*/
- private Comparator comparator;
+ protected Comparator comparator;
/**
@@ -246,8 +246,8 @@ public abstract class AbstractCompletionProvider
/**
- * A comparator that compares the input text of two {@link Completion}s
- * lexicographically, ignoring case.
+ * A comparator that compares the input text of a {@link Completion}
+ * against a String lexicographically, ignoring case.
*
* @author Robert Futrell
* @version 1.0
diff --git a/src/org/fife/ui/autocomplete/AutoCompleteDescWindow.java b/src/org/fife/ui/autocomplete/AutoCompleteDescWindow.java
index dfed8c5..022a7fa 100644
--- a/src/org/fife/ui/autocomplete/AutoCompleteDescWindow.java
+++ b/src/org/fife/ui/autocomplete/AutoCompleteDescWindow.java
@@ -367,7 +367,7 @@ class AutoCompleteDescWindow extends JWindow implements HyperlinkListener {
descArea.setSelectionColor(selBG);
}
-// descArea.setEditable(false);
+ descArea.setEditable(false); // Required for links to work!
// Make selection visible even though we are not focusable.
descArea.getCaret().setSelectionVisible(true);
diff --git a/src/org/fife/ui/autocomplete/AutoCompletePopupWindow.java b/src/org/fife/ui/autocomplete/AutoCompletePopupWindow.java
index f96284c..09e2c80 100644
--- a/src/org/fife/ui/autocomplete/AutoCompletePopupWindow.java
+++ b/src/org/fife/ui/autocomplete/AutoCompletePopupWindow.java
@@ -26,9 +26,9 @@ package org.fife.ui.autocomplete;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Rectangle;
+import java.awt.Toolkit;
import java.awt.Window;
import java.awt.event.ActionEvent;
-import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
@@ -132,7 +132,7 @@ class AutoCompletePopupWindow extends JWindow implements CaretListener,
super(parent);
this.ac = ac;
- model = new CompletionListModel();//DefaultListModel();
+ model = new CompletionListModel();
list = new JList(model);
list.setCellRenderer(new DelegatingCellRenderer());
list.addListSelectionListener(this);
@@ -242,6 +242,18 @@ class AutoCompletePopupWindow extends JWindow implements CaretListener,
/**
+ * Returns the copy keystroke to use for this platform.
+ *
+ * @return The copy keystroke.
+ */
+ private static final KeyStroke getCopyKeyStroke() {
+ int key = KeyEvent.VK_C;
+ int mask = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
+ return KeyStroke.getKeyStroke(key, mask);
+ }
+
+
+ /**
* Returns the default list cell renderer used when a completion provider
* does not supply its own.
*
@@ -314,8 +326,7 @@ class AutoCompletePopupWindow extends JWindow implements CaretListener,
// Make Ctrl+C copy from description window. This isn't done
// automagically because the desc. window is not focusable, and copying
// from text components can only be done from focused components.
- int key = KeyEvent.VK_C;
- KeyStroke ks = KeyStroke.getKeyStroke(key, InputEvent.CTRL_MASK);
+ KeyStroke ks = getCopyKeyStroke();
oldCtrlC.key = im.get(ks);
im.put(ks, ctrlCKap.key);
oldCtrlC.action = am.get(ctrlCKap.key);
@@ -668,8 +679,7 @@ class AutoCompletePopupWindow extends JWindow implements CaretListener,
putBackAction(im, am, KeyEvent.VK_PAGE_DOWN, oldPageDown);
// Ctrl+C
- int key = KeyEvent.VK_C;
- KeyStroke ks = KeyStroke.getKeyStroke(key, InputEvent.CTRL_MASK);
+ KeyStroke ks = getCopyKeyStroke();
am.put(im.get(ks), oldCtrlC.action); // Original action
im.put(ks, oldCtrlC.key); // Original key
diff --git a/src/org/fife/ui/autocomplete/AutoCompletion.java b/src/org/fife/ui/autocomplete/AutoCompletion.java
index a36bce8..cc2802c 100644
--- a/src/org/fife/ui/autocomplete/AutoCompletion.java
+++ b/src/org/fife/ui/autocomplete/AutoCompletion.java
@@ -941,7 +941,7 @@ try {
return;
}
List completions = provider.
- getParameterizedCompletionsAt(textComponent);
+ getParameterizedCompletions(textComponent);
if (completions!=null && completions.size()>0) {
// TODO: Have tooltip let you select between multiple, like VS
ParameterizedCompletion pc =
diff --git a/src/org/fife/ui/autocomplete/CCompletionProvider.java b/src/org/fife/ui/autocomplete/CCompletionProvider.java
index 4821122..a237a22 100644
--- a/src/org/fife/ui/autocomplete/CCompletionProvider.java
+++ b/src/org/fife/ui/autocomplete/CCompletionProvider.java
@@ -23,6 +23,8 @@
*/
package org.fife.ui.autocomplete;
+import java.awt.Point;
+import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.text.JTextComponent;
@@ -31,6 +33,8 @@ import org.fife.ui.rsyntaxtextarea.RSyntaxDocument;
import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities;
import org.fife.ui.rsyntaxtextarea.Token;
+import org.fife.ui.rtextarea.RTextArea;
+import org.fife.ui.rtextarea.ToolTipSupplier;
/**
@@ -39,19 +43,28 @@ import org.fife.ui.rsyntaxtextarea.Token;
* depending on whether the caret is in:
*
* <ul>
+ * <li>Code (plain text)</li>
* <li>A string</li>
* <li>A comment</li>
* <li>A documentation comment</li>
- * <li>Plain text</li>
* </ul>
*
* This allows for different completion choices in comments than in code,
- * for example.
+ * for example.<p>
+ *
+ * This provider also implements the
+ * <tt>org.fife.ui.rtextarea.ToolTipSupplier</tt> interface, which allows it
+ * to display tooltips for completion choices. Thus the standard
+ * {@link VariableCompletion} and {@link FunctionCompletion} completions should
+ * be able to display tooltips with the variable declaration or function
+ * definition (provided the <tt>RSyntaxTextArea</tt> was registered with the
+ * <tt>javax.swing.ToolTipManager</tt>).
*
* @author Robert Futrell
* @version 1.0
*/
-public class CCompletionProvider extends CompletionProviderBase {
+public class CCompletionProvider extends CompletionProviderBase
+ implements ToolTipSupplier {
/**
* The provider to use when no provider is assigned to a particular token
@@ -124,6 +137,14 @@ public class CCompletionProvider extends CompletionProviderBase {
/**
+ * {@inheritDoc}
+ */
+ public List getCompletionsAt(JTextComponent tc, Point p) {
+ return defaultProvider==null ? null :
+ defaultProvider.getCompletionsAt(tc, p);
+ }
+
+ /**
* Does the dirty work of creating a list of completions.
*
* @param comp The text component to look in.
@@ -166,13 +187,13 @@ public class CCompletionProvider extends CompletionProviderBase {
/**
* {@inheritDoc}
*/
- public List getParameterizedCompletionsAt(JTextComponent tc) {
+ public List getParameterizedCompletions(JTextComponent tc) {
// Parameterized completions can only come from the "code" completion
// provider. We do not do function/method completions while editing
// strings or comments.
CompletionProvider provider = getProviderFor(tc);
return provider==defaultProvider ?
- provider.getParameterizedCompletionsAt(tc) : null;
+ provider.getParameterizedCompletions(tc) : null;
}
@@ -350,4 +371,34 @@ public class CCompletionProvider extends CompletionProviderBase {
}
+ /**
+ * Returns the tool tip to display for a mouse event.<p>
+ *
+ * For this method to be called, the <tt>RSyntaxTextArea</tt> must be
+ * registered with the <tt>javax.swing.ToolTipManager</tt> like so:
+ *
+ * <pre>
+ * ToolTipManager.sharedInstance().registerComponent(textArea);
+ * </pre>
+ *
+ * @param textArea The text area.
+ * @param e The mouse event.
+ * @return The tool tip text, or <code>null</code> if none.
+ */
+ public String getToolTipText(RTextArea textArea, MouseEvent e) {
+
+ String tip = null;
+
+ List completions = getCompletionsAt(textArea, e.getPoint());
+ if (completions!=null && completions.size()>0) {
+ // Only ever 1 match for us in C...
+ Completion c = (Completion)completions.get(0);
+ tip = c.getToolTipText();
+ }
+
+ return tip;
+
+ }
+
+
}
\ No newline at end of file
diff --git a/src/org/fife/ui/autocomplete/Completion.java b/src/org/fife/ui/autocomplete/Completion.java
index b912ede..a5b9eb8 100644
--- a/src/org/fife/ui/autocomplete/Completion.java
+++ b/src/org/fife/ui/autocomplete/Completion.java
@@ -41,6 +41,8 @@ import javax.swing.text.JTextComponent;
* completion list. This may be <code>null</code>. It may also be
* lazily generated to cut down on memory usage.
* <li>The <tt>CompletionProvider</tt> that returned this completion.
+ * <li>Tool tip text that can be displayed when a mouse hovers over this
+ * completion in a text component.
* </ul>
*
* @author Robert Futrell
@@ -107,4 +109,23 @@ public interface Completion {
public String getSummary();
+ /**
+ * Returns the tool tip text to display for mouse hovers over this
+ * completion.<p>
+ *
+ * Note that for this functionality to be enabled, a
+ * <tt>JTextComponent</tt> must be registered with the
+ * <tt>ToolTipManager</tt>, and the text component must know to search
+ * for this value. In the case of an
+ * <a href="http://fifesoft.com/rsyntaxtextarea">RSyntaxTextArea</a>, this
+ * can be done with a <tt>org.fife.ui.rtextarea.ToolTipSupplier</tt> that
+ * calls into
+ * {@link CompletionProvider#getCompletionsAt(JTextComponent, java.awt.Point)}.
+ *
+ * @return The tool tip text for this completion, or <code>null</code> if
+ * none.
+ */
+ public String getToolTipText();
+
+
}
\ No newline at end of file
diff --git a/src/org/fife/ui/autocomplete/CompletionProvider.java b/src/org/fife/ui/autocomplete/CompletionProvider.java
index db9a9b4..0e9d69b 100644
--- a/src/org/fife/ui/autocomplete/CompletionProvider.java
+++ b/src/org/fife/ui/autocomplete/CompletionProvider.java
@@ -23,6 +23,7 @@
*/
package org.fife.ui.autocomplete;
+import java.awt.Point;
import java.util.List;
import javax.swing.ListCellRenderer;
@@ -68,12 +69,24 @@ public interface CompletionProvider {
*
* @param comp The text component.
* @return The list of {@link Completion}s. If no completions are
- * available, an empty list is returned.
+ * available, this may be <code>null</code>.
*/
public List getCompletions(JTextComponent comp);
/**
+ * Returns the completions that have been entered at the specified visual
+ * location. This can be used for tool tips when the user hovers the
+ * mouse over completed text.
+ *
+ * @param comp The text component.
+ * @param p The position, usually from a <tt>MouseEvent</tt>.
+ * @return The completions, or an empty list if there are none.
+ */
+ public List getCompletionsAt(JTextComponent comp, Point p);
+
+
+ /**
* Returns the cell renderer for completions returned from this provider.
*
* @return The cell renderer, or <code>null</code> if the default should
@@ -92,7 +105,7 @@ public interface CompletionProvider {
* @return The list of {@link ParameterizedCompletion}s. If no completions
* are available, this may be <code>null</code>.
*/
- public List getParameterizedCompletionsAt(JTextComponent tc);
+ public List getParameterizedCompletions(JTextComponent tc);
/**
diff --git a/src/org/fife/ui/autocomplete/DefaultCompletionProvider.java b/src/org/fife/ui/autocomplete/DefaultCompletionProvider.java
index f3c8319..62dc1e5 100644
--- a/src/org/fife/ui/autocomplete/DefaultCompletionProvider.java
+++ b/src/org/fife/ui/autocomplete/DefaultCompletionProvider.java
@@ -22,6 +22,7 @@
*/
package org.fife.ui.autocomplete;
+import java.awt.Point;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
@@ -53,6 +54,19 @@ public class DefaultCompletionProvider extends AbstractCompletionProvider {
protected Segment seg;
+ /**
+ * Used to speed up {@link #getCompletionsAt(JTextComponent, Point)}.
+ */
+ private String lastCompletionsAtText;
+
+ /**
+ * Used to speed up {@link #getCompletionsAt(JTextComponent, Point)},
+ * since this may be called multiple times in succession (this is usually
+ * called by <tt>JTextComponent.getToolTipText()</tt>, and if the user
+ * wiggles the mouse while a tool tip is displayed, this method gets
+ * repeatedly called. It can be costly so we try to speed it up a tad).
+ */
+ private List lastParameterizedCompletionsAt;
/**
* Constructor. The returned provider will not be aware of any completions.
@@ -121,7 +135,67 @@ public class DefaultCompletionProvider extends AbstractCompletionProvider {
/**
* {@inheritDoc}
*/
- public List getParameterizedCompletionsAt(JTextComponent tc) {
+ public List getCompletionsAt(JTextComponent tc, Point p) {
+
+ int offset = tc.viewToModel(p);
+ if (offset<0 || offset>=tc.getDocument().getLength()) {
+ lastCompletionsAtText = null;
+ return lastParameterizedCompletionsAt = null;
+ }
+
+ Segment s = new Segment();
+ Document doc = tc.getDocument();
+ Element root = doc.getDefaultRootElement();
+ int line = root.getElementIndex(offset);
+ Element elem = root.getElement(line);
+ int start = elem.getStartOffset();
+ int end = elem.getEndOffset() - 1;
+
+ try {
+
+ doc.getText(start, end-start, s);
+
+ // Get the valid chars before the specified offset.
+ int startOffs = s.offset + (offset-start) - 1;
+ while (startOffs>=s.offset && isValidChar(s.array[startOffs])) {
+ startOffs--;
+ }
+
+ // Get the valid chars at and after the specified offset.
+ int endOffs = s.offset;
+ while (endOffs<s.offset+s.count && isValidChar(s.array[endOffs])) {
+ endOffs++;
+ }
+
+ int len = endOffs - startOffs - 1;
+ if (len<=0) {
+ return lastParameterizedCompletionsAt = null;
+ }
+ String text = new String(s.array, startOffs+1, len);
+
+ if (text.equals(lastCompletionsAtText)) {
+ return lastParameterizedCompletionsAt;
+ }
+
+ // Get a list of all Completions matching the text.
+ List list = getCompletionByInputText(text);
+ lastCompletionsAtText = text;
+ return lastParameterizedCompletionsAt = list;
+
+ } catch (BadLocationException ble) {
+ ble.printStackTrace(); // Never happens
+ }
+
+ lastCompletionsAtText = null;
+ return lastParameterizedCompletionsAt = null;
+
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public List getParameterizedCompletions(JTextComponent tc) {
List list = null;
diff --git a/src/org/fife/ui/autocomplete/FunctionCompletion.java b/src/org/fife/ui/autocomplete/FunctionCompletion.java
index c911a33..25cfd71 100644
--- a/src/org/fife/ui/autocomplete/FunctionCompletion.java
+++ b/src/org/fife/ui/autocomplete/FunctionCompletion.java
@@ -25,6 +25,8 @@ package org.fife.ui.autocomplete;
import java.util.ArrayList;
import java.util.List;
+import javax.swing.text.JTextComponent;
+
/**
* A completion choice representing a function.
@@ -198,6 +200,27 @@ public class FunctionCompletion extends VariableCompletion
/**
+ * Returns the tool tip text to display for mouse hovers over this
+ * completion.<p>
+ *
+ * Note that for this functionality to be enabled, a
+ * <tt>JTextComponent</tt> must be registered with the
+ * <tt>ToolTipManager</tt>, and the text component must know to search
+ * for this value. In the case of an
+ * <a href="http://fifesoft.com/rsyntaxtextarea">RSyntaxTextArea</a>, this
+ * can be done with a <tt>org.fife.ui.rtextarea.ToolTipSupplier</tt> that
+ * calls into
+ * {@link CompletionProvider#getCompletionsAt(JTextComponent, java.awt.Point)}.
+ *
+ * @return The tool tip text for this completion, or <code>null</code> if
+ * none.
+ */
+ public String getToolTipText() {
+ return getDefinitionString();
+ }
+
+
+ /**
* Sets the parameters to this function.
*
* @param params The parameters. This should be a list of
diff --git a/src/org/fife/ui/autocomplete/JarCompletionProvider.java b/src/org/fife/ui/autocomplete/JarCompletionProvider.java
deleted file mode 100644
index b6a0839..0000000
--- a/src/org/fife/ui/autocomplete/JarCompletionProvider.java
+++ /dev/null
@@ -1,282 +0,0 @@
-package org.fife.ui.autocomplete;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.SortedMap;
-import java.util.TreeMap;
-import java.util.jar.JarFile;
-import java.util.zip.ZipEntry;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.Document;
-import javax.swing.text.Element;
-import javax.swing.text.JTextComponent;
-import javax.swing.text.Segment;
-
-
-/**
- * The beginnings of a provider that uses reflection to offer completions for
- * all classes in a jar.<p>
- *
- * This class is unfinished and should not be used.
- *
- * @author Robert Futrell
- * @version 1.0
- */
-public class JarCompletionProvider extends AbstractCompletionProvider {
-
- private Segment seg;
- private boolean loaded;
- private TreeMap packageSet;
-
-
- public JarCompletionProvider() {
- seg = new Segment();
- completions = new ArrayList(0);
- packageSet = new TreeMap();
- }
-
-
- public String getAlreadyEnteredText(JTextComponent comp) {
-
- Document doc = comp.getDocument();
-
- int dot = comp.getCaretPosition();
- Element root = doc.getDefaultRootElement();
- int index = root.getElementIndex(dot);
- Element elem = root.getElement(index);
- int start = elem.getStartOffset();
- int len = dot-start;
- try {
- doc.getText(start, len, seg);
- } catch (BadLocationException ble) {
- ble.printStackTrace();
- return EMPTY_STRING;
- }
-
- int segEnd = seg.offset + len;
- start = segEnd - 1;
- while (start>=seg.offset && isValidChar(seg.array[start])) {
- start--;
- }
- start++;
-
- len = segEnd - start;
- return len==0 ? EMPTY_STRING : new String(seg.array, start, len);
-
- }
-
-
- private String getAlreadyEnteredText2(JTextComponent comp) {
-
- Document doc = comp.getDocument();
-
- int dot = comp.getCaretPosition();
- Element root = doc.getDefaultRootElement();
- int index = root.getElementIndex(dot);
- Element elem = root.getElement(index);
- int start = elem.getStartOffset();
- int len = dot-start;
- try {
- doc.getText(start, len, seg);
- } catch (BadLocationException ble) {
- ble.printStackTrace();
- return EMPTY_STRING;
- }
-
- int segEnd = seg.offset + len;
- start = segEnd - 1;
- while (start>=seg.offset && isValidChar2(seg.array[start])) {
- start--;
- }
- start++;
-
- len = segEnd - start;
- return len==0 ? EMPTY_STRING : new String(seg.array, start, len);
-
- }
-
-
- /**
- * Does the dirty work of creating a list of completions.
- *
- * @param comp The text component to look in.
- * @return The list of possible completions, or an empty list if there
- * are none.
- */
- protected List getCompletionsImpl(JTextComponent comp) {
-
- if (!loaded) {
- loadCompletions();
- }
-
- List retVal = new ArrayList();
-
- String text2 = getAlreadyEnteredText2(comp);
- String[] pkgNames = splitOnChar(text2, '.');
-
- TreeMap map = packageSet;
- for (int i=0; i<pkgNames.length-1; i++) {
-
- Object obj = map.get(pkgNames[i]);
-
- if (obj==null) {
- return retVal; // empty
- }
-
- if (obj instanceof TreeMap) {
- map = (TreeMap)obj;
- }
- else {
- return retVal; // Will be empty
- }
-
- }
-
- String fromKey = pkgNames[pkgNames.length-1];
- String toKey = fromKey + '{'; // Ascii char > largest valid class char
- SortedMap sm = map.subMap(fromKey, toKey);
-
- for (Iterator i=sm.keySet().iterator(); i.hasNext(); ) {
- Object obj = i.next();
- retVal.add(new BasicCompletion(this, obj.toString()));
- }
-
- return retVal;
-
- }
-
-
- /**
- * {@inheritDoc}
- */
- public List getParameterizedCompletionsAt(JTextComponent tc) {
- return null; // This provider knows no functions or methods.
- }
-
-
- /**
- * Returns whether the specified character is valid in an auto-completion.
- *
- * @param ch The character.
- * @return Whether the character is valid.
- */
- protected boolean isValidChar(char ch) {
- return Character.isLetterOrDigit(ch) || ch=='_';
- }
-
-
- /**
- * Returns whether the specified character is valid in an auto-completion.
- *
- * @param ch The character.
- * @return Whether the character is valid.
- */
- protected boolean isValidChar2(char ch) {
- return Character.isLetterOrDigit(ch) || ch=='.' || ch=='_';
- }
-
-
- protected void loadCompletions() {
-
- loaded = true;
-
- String javaHome = System.getProperty("java.home");
- //System.out.println(javaHome);
- JarFile jar = null;
- try {
- jar = new JarFile(new File(javaHome, "lib/rt.jar"));
- } catch (Exception e) {
- e.printStackTrace();
- return;
- }
-
- java.util.Enumeration e = jar.entries();
- while (e.hasMoreElements()) {
- ZipEntry entry = (ZipEntry)e.nextElement();
- String entryName = entry.getName();
- if (entryName.endsWith(".class")) {
- entryName = entryName.substring(0, entryName.length()-6);
- String[] items = splitOnChar(entryName, '/');
- TreeMap m = packageSet;
- for (int i=0; i<items.length-1; i++) {
- TreeMap submap = (TreeMap)m.get(items[i]);
- if (submap==null) {
- submap = new TreeMap();
- m.put(items[i], submap);
- }
- m = submap;
- }
- String className = items[items.length-1];
- m.put(className, null);
- }
- }
-
- }
-
-
- /**
- * A faster way to split on a single char than String#split(), since
- * we'll be doing this in a tight loop possibly thousands of times (rt.jar).
- *
- * @param str The string to split.
- * @return The string, split on '<tt>/</tt>'.
- */
- private String[] splitOnChar(String str, int ch) {
- List list = new ArrayList(3);
- int pos = 0;
- int old = 0;
- while ((pos=str.indexOf(ch, old))>-1) {
- list.add(str.substring(old, pos));
- old = pos+1;
- }
- // If str ends in ch, this adds an empty item to the end of the list.
- // This is what we want.
- list.add(str.substring(old));
- String[] array = new String[list.size()];
- return (String[])list.toArray(array);
- }
-
-/*
- private class ClassOrInterfaceCompletion extends AbstractCompletion {
-
- private String replacementText;
-
- public ClassOrInterfaceCompletion(String name) {
- super(JarCompletionProvider.this);
- this.replacementText = name;
- }
-
- public String getReplacementText() {
- return replacementText;
- }
-
- public String getSummary() {
- return null;
- }
-
- }
-
-
- private class PackageCompletion extends AbstractCompletion {
-
- private String replacementText;
-
- public PackageCompletion(String name) {
- super(JarCompletionProvider.this);
- this.replacementText = name;
- }
-
- public String getReplacementText() {
- return replacementText;
- }
-
- public String getSummary() {
- return null;
- }
-
- }
-*/
-
-}
\ No newline at end of file
diff --git a/src/org/fife/ui/autocomplete/VariableCompletion.java b/src/org/fife/ui/autocomplete/VariableCompletion.java
index c3fa77f..20c5c65 100644
--- a/src/org/fife/ui/autocomplete/VariableCompletion.java
+++ b/src/org/fife/ui/autocomplete/VariableCompletion.java
@@ -22,6 +22,8 @@
*/
package org.fife.ui.autocomplete;
+import javax.swing.text.JTextComponent;
+
/**
* A completion for a variable (or constant) in a programming language.<p>
@@ -64,8 +66,13 @@ public class VariableCompletion extends BasicCompletion {
protected void addDefinitionString(StringBuffer sb) {
+ sb.append("<html><b>").append(getDefinitionString()).append("</b>");
+ }
- sb.append("<html><b>");
+
+ public String getDefinitionString() {
+
+ StringBuffer sb = new StringBuffer();
// Add the return type if applicable (C macros like NULL have no type).
if (type!=null) {
@@ -75,7 +82,7 @@ public class VariableCompletion extends BasicCompletion {
// Add the item being described's name.
sb.append(getName());
- sb.append("</b>");
+ return sb.toString();
}
@@ -114,6 +121,27 @@ public class VariableCompletion extends BasicCompletion {
/**
+ * Returns the tool tip text to display for mouse hovers over this
+ * completion.<p>
+ *
+ * Note that for this functionality to be enabled, a
+ * <tt>JTextComponent</tt> must be registered with the
+ * <tt>ToolTipManager</tt>, and the text component must know to search
+ * for this value. In the case of an
+ * <a href="http://fifesoft.com/rsyntaxtextarea">RSyntaxTextArea</a>, this
+ * can be done with a <tt>org.fife.ui.rtextarea.ToolTipSupplier</tt> that
+ * calls into
+ * {@link CompletionProvider#getCompletionsAt(JTextComponent, java.awt.Point)}.
+ *
+ * @return The tool tip text for this completion, or <code>null</code> if
+ * none.
+ */
+ public String getToolTipText() {
+ return getDefinitionString();
+ }
+
+
+ /**
* Returns the type of this variable.
*
* @return The type.
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/autocomplete.git
More information about the pkg-java-commits
mailing list