This is an automated email from the git hooks/post-receive script. ben pushed a commit to branch master in repository autocomplete.
commit 86ac7ba6c6e62adf5d88effc3259adde4d846e98 Author: bobbylight <[email protected]> Date: Fri May 28 03:06:09 2010 +0000 Refactoring of AutoCompletion, popup windows now auto-hide when text component loses focus. Improved API for tweaking features of Java, PHP and Shell code completion. --- src/org/fife/ui/autocomplete/AutoCompletion.java | 148 ++++++++++++-------- .../ui/autocomplete/CompletionCellRenderer.java | 10 +- src/org/fife/ui/autocomplete/FastListUI.java | 4 +- 3 files changed, 97 insertions(+), 65 deletions(-) diff --git a/src/org/fife/ui/autocomplete/AutoCompletion.java b/src/org/fife/ui/autocomplete/AutoCompletion.java index 3e077a5..1932545 100644 --- a/src/org/fife/ui/autocomplete/AutoCompletion.java +++ b/src/org/fife/ui/autocomplete/AutoCompletion.java @@ -59,7 +59,7 @@ import javax.swing.text.*; * It also handles communication between the CompletionProvider and the actual * popup Window. */ -public class AutoCompletion implements HierarchyListener { +public class AutoCompletion { /** * The text component we're providing completion for. @@ -167,9 +167,15 @@ public class AutoCompletion implements HierarchyListener { /** * Listens for events in the parent window that affect the visibility of - * the popup window. + * the popup windows. */ - private Listener parentWindowListener; + private ParentWindowListener parentWindowListener; + + /** + * Listens for events from the text component that affect the visibility + * of the popup windows. + */ + private TextComponentListener textComponentListener; /** * The key used in the input map for the AutoComplete action. @@ -204,7 +210,8 @@ public class AutoCompletion implements HierarchyListener { setAutoCompleteEnabled(true); setAutoCompleteSingleChoices(true); setShowDescWindow(false); - parentWindowListener = new Listener(); + parentWindowListener = new ParentWindowListener(); + textComponentListener = new TextComponentListener(); // Automatically update LAF of popup windows on LookAndFeel changes UIManager.addPropertyChangeListener(new PropertyChangeListener() { @@ -416,32 +423,6 @@ public class AutoCompletion implements HierarchyListener { /** - * Called when the component hierarchy for our text component changes. - * When the text component is added to a new {@link Window}, this method - * registers listeners on that <code>Window</code>. - * - * @param e The event. - */ - public void hierarchyChanged(HierarchyEvent e) { - - // NOTE: e many be null as we call this method at other times. - //System.out.println("Hierarchy changed! " + e); - - Window oldParentWindow = parentWindow; - parentWindow = SwingUtilities.getWindowAncestor(textComponent); - if (parentWindow!=oldParentWindow) { - if (oldParentWindow!=null) { - parentWindowListener.removeFrom(oldParentWindow); - } - if (parentWindow!=null) { - parentWindowListener.addTo(parentWindow); - } - } - - } - - - /** * Hides any child windows being displayed by the auto-completion system. * * @return Whether any windows were visible. @@ -581,8 +562,9 @@ try { new ParameterizedCompletionStartAction(start)); } - this.textComponent.addHierarchyListener(this); - hierarchyChanged(null); // In case textComponent is already in a window + textComponentListener.addTo(this.textComponent); + // In case textComponent is already in a window... + textComponentListener.hierarchyChanged(null); } @@ -905,7 +887,7 @@ try { am.put(PARAM_COMPLETE_KEY, oldParenAction); } - textComponent.removeHierarchyListener(this); + textComponentListener.removeFrom(textComponent); if (parentWindow!=null) { parentWindowListener.removeFrom(parentWindow); } @@ -969,13 +951,50 @@ try { /** + * Action that starts a parameterized completion, e.g. after '(' is + * typed. + * + * @author Robert Futrell + * @version 1.0 + */ + private class ParameterizedCompletionStartAction extends AbstractAction { + + private String start; + + public ParameterizedCompletionStartAction(char ch) { + this.start = Character.toString(ch); + } + + public void actionPerformed(ActionEvent e) { + + // Prevents keystrokes from messing up + boolean wasVisible = hidePopupWindow(); + + // Only proceed if they were selecting a completion + if (!wasVisible || !isParameterAssistanceEnabled()) { + textComponent.replaceSelection(start); + return; + } + + Completion c = popupWindow.getSelection(); + if (c instanceof ParameterizedCompletion) { // Should always be true + // Fixes capitalization of the entered text. + insertCompletion(c); + } + + } + + } + + + /** * Listens for events in the parent window of the text component with * auto-completion enabled. * * @author Robert Futrell * @version 1.0 */ - private class Listener extends ComponentAdapter + private class ParentWindowListener extends ComponentAdapter implements WindowFocusListener { public void addTo(Window w) { @@ -1011,37 +1030,52 @@ try { /** - * Action that starts a parameterized completion, e.g. after '(' is - * typed. - * - * @author Robert Futrell - * @version 1.0 + * Listens for events from the text component we're installed on. */ - private class ParameterizedCompletionStartAction extends AbstractAction { - - private String start; + private class TextComponentListener extends FocusAdapter + implements HierarchyListener { - public ParameterizedCompletionStartAction(char ch) { - this.start = Character.toString(ch); + void addTo(JTextComponent tc) { + tc.addFocusListener(this); + tc.addHierarchyListener(this); } - public void actionPerformed(ActionEvent e) { - - // Prevents keystrokes from messing up - boolean wasVisible = hidePopupWindow(); + /** + * Hide the auto-completion windows when the text component loses + * focus. + */ + public void focusLost(FocusEvent e) { + hideChildWindows(); + } - // Only proceed if they were selecting a completion - if (!wasVisible || !isParameterAssistanceEnabled()) { - textComponent.replaceSelection(start); - return; + /** + * Called when the component hierarchy for our text component changes. + * When the text component is added to a new {@link Window}, this + * method registers listeners on that <code>Window</code>. + * + * @param e The event. + */ + public void hierarchyChanged(HierarchyEvent e) { + + // NOTE: e many be null as we call this method at other times. + //System.out.println("Hierarchy changed! " + e); + + Window oldParentWindow = parentWindow; + parentWindow = SwingUtilities.getWindowAncestor(textComponent); + if (parentWindow!=oldParentWindow) { + if (oldParentWindow!=null) { + parentWindowListener.removeFrom(oldParentWindow); + } + if (parentWindow!=null) { + parentWindowListener.addTo(parentWindow); + } } - Completion c = popupWindow.getSelection(); - if (c instanceof ParameterizedCompletion) { // Should always be true - // Fixes capitalization of the entered text. - insertCompletion(c); - } + } + public void removeFrom(JTextComponent tc) { + tc.removeFocusListener(this); + tc.removeHierarchyListener(this); } } diff --git a/src/org/fife/ui/autocomplete/CompletionCellRenderer.java b/src/org/fife/ui/autocomplete/CompletionCellRenderer.java index 61a4345..a702fd6 100644 --- a/src/org/fife/ui/autocomplete/CompletionCellRenderer.java +++ b/src/org/fife/ui/autocomplete/CompletionCellRenderer.java @@ -28,7 +28,6 @@ import java.awt.Component; import java.awt.Font; import java.awt.Graphics; import java.awt.Rectangle; - import javax.swing.DefaultListCellRenderer; import javax.swing.JList; import javax.swing.plaf.basic.BasicHTML; @@ -56,7 +55,7 @@ public class CompletionCellRenderer extends DefaultListCellRenderer { * The alternating background color, or <code>null</code> if alternating * row colors should not be used. */ - private Color altBG; + private static Color altBG; /** * The font to use when rendering items, or <code>null</code> if the @@ -86,7 +85,6 @@ private Rectangle paintTextR; */ public CompletionCellRenderer() { //setDisplayFont(new Font("Monospaced", Font.PLAIN, 12)); - setAlternateBackground(new Color(0xf4f4f4)); setShowTypes(true); paintTextR = new Rectangle(); } @@ -99,7 +97,7 @@ private Rectangle paintTextR; * alternating colors are not used. * @see #setAlternateBackground(Color) */ - public Color getAlternateBackground() { + public static Color getAlternateBackground() { return altBG; } @@ -365,8 +363,8 @@ this.realBG = altBG!=null && (index&1)==0 ? altBG : list.getBackground(); * background colors. * @see #getAlternateBackground() */ - public void setAlternateBackground(Color altBG) { - this.altBG = altBG; + public static void setAlternateBackground(Color altBG) { + CompletionCellRenderer.altBG = altBG; } diff --git a/src/org/fife/ui/autocomplete/FastListUI.java b/src/org/fife/ui/autocomplete/FastListUI.java index 14d6a80..6dafa08 100644 --- a/src/org/fife/ui/autocomplete/FastListUI.java +++ b/src/org/fife/ui/autocomplete/FastListUI.java @@ -42,7 +42,7 @@ import javax.swing.plaf.basic.BasicListUI; * with no performance penalty. With standard BasicListUI subclasses, this can * cause very poor performance <b>each time</b> the list is displayed, which * is bad for lists that are repeatedly hidden and re-displayed, such as - * completion choices. This is all becasue the calculation to get the + * completion choices. This is all because the calculation to get the * preferred size of each list item, when it is displayed with HTML, is slow. * * @author Robert Futrell @@ -176,7 +176,7 @@ class FastListUI extends BasicListUI { if (list.getParent() instanceof JViewport) { // Always true for us cellWidth = list.getParent().getWidth(); } - System.out.println(cellWidth); + //System.out.println(cellWidth); // We're getting a fixed cell height for all cells cellHeights = null; -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/autocomplete.git _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

