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

Reply via email to