This is an automated email from the git hooks/post-receive script. ben pushed a commit to branch master in repository autocomplete.
commit 5656fca92951db207778390e49741a04c4e71674 Author: bobbylight <[email protected]> Date: Fri Jan 16 00:05:49 2009 +0000 Fixing keybinding bug when switching from autocomplete choices to parameter assistance. Making size grip look better on OS X. --- .../ui/autocomplete/AutoCompleteDescWindow.java | 5 +- .../ui/autocomplete/AutoCompletePopupWindow.java | 10 +- src/org/fife/ui/autocomplete/AutoCompletion.java | 113 +++++++++++++++----- .../ParameterizedCompletionDescriptionToolTip.java | 9 ++ src/org/fife/ui/autocomplete/SizeGrip.java | 91 +++++++++++++--- src/org/fife/ui/autocomplete/osx_sizegrip.png | Bin 0 -> 4876 bytes 6 files changed, 180 insertions(+), 48 deletions(-) diff --git a/src/org/fife/ui/autocomplete/AutoCompleteDescWindow.java b/src/org/fife/ui/autocomplete/AutoCompleteDescWindow.java index 32567a1..1284db3 100644 --- a/src/org/fife/ui/autocomplete/AutoCompleteDescWindow.java +++ b/src/org/fife/ui/autocomplete/AutoCompleteDescWindow.java @@ -115,9 +115,6 @@ class AutoCompleteDescWindow extends JWindow implements HyperlinkListener { private static final String MSG = "org.fife.ui.autocomplete.AutoCompleteDescWindow"; -// private static final boolean IS_OS_X = System.getProperty("os.name"). -// indexOf("OS X")>-1; - /** * Constructor. @@ -131,7 +128,7 @@ class AutoCompleteDescWindow extends JWindow implements HyperlinkListener { this.ac = ac; JPanel cp = new JPanel(new BorderLayout()); - cp.setBorder(BorderFactory.createLineBorder(Color.BLACK)); +// cp.setBorder(BorderFactory.createLineBorder(Color.BLACK)); descArea = new JEditorPane("text/html", null); tweakDescArea(); diff --git a/src/org/fife/ui/autocomplete/AutoCompletePopupWindow.java b/src/org/fife/ui/autocomplete/AutoCompletePopupWindow.java index 6d4adc3..100ed45 100644 --- a/src/org/fife/ui/autocomplete/AutoCompletePopupWindow.java +++ b/src/org/fife/ui/autocomplete/AutoCompletePopupWindow.java @@ -88,8 +88,6 @@ class AutoCompletePopupWindow extends JWindow implements CaretListener, private AutoCompleteDescWindow descWindow; private boolean aboveCaret; - private static final boolean DEBUG = true; - public AutoCompletePopupWindow(Window parent, AutoCompletion ac) { @@ -146,7 +144,7 @@ lastLine = -1; doAutocomplete(); } } - else if (DEBUG) { + else if (AutoCompletion.DEBUG) { Thread.dumpStack(); } } @@ -236,7 +234,7 @@ lastLine = -1; */ private void installKeyBindings() { - if (DEBUG) { + if (AutoCompletion.DEBUG) { System.out.println("PopupWindow: Installing keybindings"); } @@ -249,7 +247,7 @@ lastLine = -1; ActionMap am = comp.getActionMap(); replaceAction(im, am, KeyEvent.VK_ESCAPE, escapeKap, oldEscape); - if (DEBUG && oldEscape.action==escapeKap.action) { + if (AutoCompletion.DEBUG && oldEscape.action==escapeKap.action) { Thread.dumpStack(); } replaceAction(im, am, KeyEvent.VK_UP, upKap, oldUp); @@ -522,7 +520,7 @@ lastLine = -1; */ public void uninstallKeyBindings() { - if (DEBUG) { + if (AutoCompletion.DEBUG) { System.out.println("PopupWindow: Removing keybindings"); } diff --git a/src/org/fife/ui/autocomplete/AutoCompletion.java b/src/org/fife/ui/autocomplete/AutoCompletion.java index 2727327..9df2c65 100644 --- a/src/org/fife/ui/autocomplete/AutoCompletion.java +++ b/src/org/fife/ui/autocomplete/AutoCompletion.java @@ -137,6 +137,18 @@ public class AutoCompletion implements HierarchyListener { private Action oldTriggerAction; /** + * The previous key in the text component's <code>InputMap</code> for the + * parameter completion trigger key. + */ + private Object oldParenKey; + + /** + * The action previously assigned to the parameter completion key, so we + * can reset it when we uninstall. + */ + private Action oldParenAction; + + /** * Listens for events in the parent window that affect the visibility of * the popup window. */ @@ -145,7 +157,14 @@ public class AutoCompletion implements HierarchyListener { /** * The key used in the input map for the AutoComplete action. */ - private static final String ACTION_MAP_KEY = "AutoComplete"; + private static final String PARAM_TRIGGER_KEY = "AutoComplete"; + + /** + * Key used in the input map for the parameter completion action. + */ + private static final String PARAM_COMPLETE_KEY = "AutoCompletion.FunctionStart"; + + static final boolean DEBUG = true; /** @@ -443,27 +462,18 @@ try { this.textComponent = c; installTriggerKey(getTriggerKey()); - // TODO: Fix me - InputMap im = c.getInputMap(); - ActionMap am = c.getActionMap(); - KeyStroke ks = KeyStroke.getKeyStroke('('); - Object oldParenKey = im.get(ks); - im.put(ks, "AutoCompletion.FunctionStart"); - Action oldParenAction = am.get("AutoCompletion.FunctionStart"); - am.put("AutoCompletion.FunctionStart", new javax.swing.AbstractAction() { - public void actionPerformed(java.awt.event.ActionEvent e) { - textComponent.replaceSelection("("); - if (!isParameterAssistanceEnabled()) { - return; - } - List completions = provider.getParameterizedCompletionsAt(textComponent); - if (completions!=null && completions.size()>0) { - // TODO: Have tooltip let you select between multiple, like VS - ParameterizedCompletion pc = (ParameterizedCompletion)completions.get(0); - displayDescriptionToolTip(pc, false); - } - } - }); + // Install the function completion key, if there is one. + char start = provider.getParameterListStart(); + if (start!=0) { + InputMap im = c.getInputMap(); + ActionMap am = c.getActionMap(); + KeyStroke ks = KeyStroke.getKeyStroke(start); + oldParenKey = im.get(ks); + im.put(ks, PARAM_COMPLETE_KEY); + oldParenAction = am.get(PARAM_COMPLETE_KEY); + am.put(PARAM_COMPLETE_KEY, + new ParameterizedCompletionStartAction(start)); + } this.textComponent.addHierarchyListener(this); hierarchyChanged(null); // In case textComponent is already in a window @@ -480,10 +490,10 @@ try { private void installTriggerKey(KeyStroke ks) { InputMap im = textComponent.getInputMap(); oldTriggerKey = im.get(ks); - im.put(ks, ACTION_MAP_KEY); + im.put(ks, PARAM_TRIGGER_KEY); ActionMap am = textComponent.getActionMap(); - oldTriggerAction = am.get(ACTION_MAP_KEY); - am.put(ACTION_MAP_KEY, new AutoCompleteAction()); + oldTriggerAction = am.get(PARAM_TRIGGER_KEY); + am.put(PARAM_TRIGGER_KEY, new AutoCompleteAction()); } @@ -718,15 +728,32 @@ try { * @see #install(JTextComponent) */ public void uninstall() { + if (textComponent!=null) { + hidePopupWindow(); // Unregisters listeners, actions, etc. + uninstallTriggerKey(); + + // Uninstall the function completion key. + char start = provider.getParameterListStart(); + if (start!=0) { + KeyStroke ks = KeyStroke.getKeyStroke(start); + InputMap im = textComponent.getInputMap(); + im.put(ks, oldParenKey); + ActionMap am = textComponent.getActionMap(); + am.put(PARAM_COMPLETE_KEY, oldParenAction); + } + textComponent.removeHierarchyListener(this); if (parentWindow!=null) { parentWindowListener.removeFrom(parentWindow); } + textComponent = null; + } + } @@ -740,7 +767,7 @@ try { InputMap im = textComponent.getInputMap(); im.put(trigger, oldTriggerKey); ActionMap am = textComponent.getActionMap(); - am.put(ACTION_MAP_KEY, oldTriggerAction); + am.put(PARAM_TRIGGER_KEY, oldTriggerAction); } @@ -826,4 +853,38 @@ 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) { + hidePopupWindow(); // Prevents keystrokes from messing up + textComponent.replaceSelection(start); + if (!isParameterAssistanceEnabled()) { + return; + } + List completions = provider. + getParameterizedCompletionsAt(textComponent); + if (completions!=null && completions.size()>0) { + // TODO: Have tooltip let you select between multiple, like VS + ParameterizedCompletion pc = + (ParameterizedCompletion)completions.get(0); + displayDescriptionToolTip(pc, false); + } + } + + } + + } \ No newline at end of file diff --git a/src/org/fife/ui/autocomplete/ParameterizedCompletionDescriptionToolTip.java b/src/org/fife/ui/autocomplete/ParameterizedCompletionDescriptionToolTip.java index df89cb2..5d1d3c2 100644 --- a/src/org/fife/ui/autocomplete/ParameterizedCompletionDescriptionToolTip.java +++ b/src/org/fife/ui/autocomplete/ParameterizedCompletionDescriptionToolTip.java @@ -209,6 +209,10 @@ class ParameterizedCompletionDescriptionToolTip { */ private void installKeyBindings() { + if (AutoCompletion.DEBUG) { + System.out.println("ToolTip: Installing keybindings"); + } + JTextComponent tc = ac.getTextComponent(); InputMap im = tc.getInputMap(); ActionMap am = tc.getActionMap(); @@ -410,6 +414,11 @@ class ParameterizedCompletionDescriptionToolTip { */ private void uninstallKeyBindings() { + if (AutoCompletion.DEBUG) { + System.out.println("PopupWindow: Installing keybindings"); + } + + JTextComponent tc = ac.getTextComponent(); InputMap im = tc.getInputMap(); ActionMap am = tc.getActionMap(); diff --git a/src/org/fife/ui/autocomplete/SizeGrip.java b/src/org/fife/ui/autocomplete/SizeGrip.java index 0552b82..00ade96 100644 --- a/src/org/fife/ui/autocomplete/SizeGrip.java +++ b/src/org/fife/ui/autocomplete/SizeGrip.java @@ -28,9 +28,16 @@ import java.awt.ComponentOrientation; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Graphics; +import java.awt.Image; import java.awt.Point; import java.awt.Window; import java.awt.event.MouseEvent; +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import javax.imageio.ImageIO; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.UIManager; @@ -45,6 +52,11 @@ import javax.swing.UIManager; */ class SizeGrip extends JPanel { + /** + * The size grip to use if we're on OS X. + */ + private Image osxSizeGrip; + public SizeGrip() { MouseHandler adapter = new MouseHandler(); @@ -56,6 +68,52 @@ class SizeGrip extends JPanel { /** + * Overridden to ensure that the cursor for this component is appropriate + * for the orientation. + * + * @param o The new orientation. + */ + public void applyComponentOrientation(ComponentOrientation o) { + possiblyFixCursor(o); + super.applyComponentOrientation(o); + } + + + /** + * Creates and returns the OS X size grip image. + * + * @return The OS X size grip. + */ + private Image createOSXSizeGrip() { + ClassLoader cl = getClass().getClassLoader(); + URL url = cl.getResource("org.fife.ui.autocomplete.osx_sizegrip.png"); + if (url==null) { + // We're not running in a jar - we may be debugging in Eclipse, + // for example + File f = new File("../AutoComplete/src/org/fife/ui/autocomplete/osx_sizegrip.png"); + if (f.isFile()) { + try { + url = f.toURI().toURL(); + } catch (MalformedURLException mue) { // Never happens + mue.printStackTrace(); + return null; + } + } + else { + return null; // Can't find resource or image file + } + } + Image image = null; + try { + image = ImageIO.read(url); + } catch (IOException ioe) { // Never happens + ioe.printStackTrace(); + } + return image; + } + + + /** * Paints this panel. * * @param g The graphics context. @@ -68,6 +126,11 @@ class SizeGrip extends JPanel { Color c1 = UIManager.getColor("Label.disabledShadow"); Color c2 = UIManager.getColor("Label.disabledForeground"); + if (osxSizeGrip!=null) { + g.drawImage(osxSizeGrip, dim.width-16, dim.height-16, null); + return; + } + ComponentOrientation orientation = getComponentOrientation(); if (orientation.isLeftToRight()) { @@ -110,18 +173,6 @@ class SizeGrip extends JPanel { /** - * Overridden to ensure that the cursor for this component is appropriate - * for the orientation. - * - * @param o The new orientation. - */ - public void applyComponentOrientation(ComponentOrientation o) { - possiblyFixCursor(o); - super.applyComponentOrientation(o); - } - - - /** * Ensures that the cursor for this component is appropriate for the * orientation. * @@ -138,6 +189,22 @@ class SizeGrip extends JPanel { } + public void updateUI() { + super.updateUI(); + // TODO: Key off of Aqua LaF, not just OS X, as this size grip looks + // bad on other LaFs on Mac such as Nimbus. + if (System.getProperty("os.name").indexOf("OS X")>-1) { + if (osxSizeGrip==null) { + osxSizeGrip = createOSXSizeGrip(); + } + } + else { // Clear memory in case of runtime LaF change. + osxSizeGrip = null; + } + + } + + /** * Listens for mouse events on this panel and resizes the parent window * appropriately. diff --git a/src/org/fife/ui/autocomplete/osx_sizegrip.png b/src/org/fife/ui/autocomplete/osx_sizegrip.png new file mode 100644 index 0000000..07fa8b1 Binary files /dev/null and b/src/org/fife/ui/autocomplete/osx_sizegrip.png differ -- 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

