[autocomplete] 62/143: AutoComplete: Hopefully improved sizing and behavior of ParameterizedComletionChoicesWindow. AutoComplete: Added "PopupWindowDecorator" hook to allow hosting applications to style AutoComplete's popup windows (e.g. with drop shadows). RSTALanguageSupport: Added CodeBlock class and friends, to enable simple parsing for simple LanguageSupports resembling C. RSTALanguageSupport: Updated Perl support to only suggest variables that are in scope at caret position. RSTALanguageSupport: Added beginnings of Groovy support. Very broken at the moment. RSTALanguageSupport: Fixed bug in SourceParamChoicesProvider when parent TypeDeclaration had no modifiers (NPE).
Benjamin Mesing
ben at alioth.debian.org
Sat Oct 19 12:53:18 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 957b086c4c12a1a1d07dde0b359e6fcd6ec5872c
Author: bobbylight <robert at fifesoft.com>
Date: Tue Jan 11 23:28:05 2011 +0000
AutoComplete: Hopefully improved sizing and behavior of ParameterizedComletionChoicesWindow.
AutoComplete: Added "PopupWindowDecorator" hook to allow hosting applications to style AutoComplete's popup windows (e.g. with drop shadows).
RSTALanguageSupport: Added CodeBlock class and friends, to enable simple parsing for simple LanguageSupports resembling C.
RSTALanguageSupport: Updated Perl support to only suggest variables that are in scope at caret position.
RSTALanguageSupport: Added beginnings of Groovy support. Very broken at the moment.
RSTALanguageSupport: Fixed bug in SourceParamChoicesProvider when parent TypeDeclaration had no modifiers (NPE).
---
.../ui/autocomplete/ParameterChoicesProvider.java | 2 +-
.../ParameterizedCompletionChoicesWindow.java | 47 +++++++++--
.../ParameterizedCompletionDescriptionToolTip.java | 66 ++++++++++++----
.../fife/ui/autocomplete/PopupWindowDecorator.java | 82 ++++++++++++++++++++
4 files changed, 174 insertions(+), 23 deletions(-)
diff --git a/src/org/fife/ui/autocomplete/ParameterChoicesProvider.java b/src/org/fife/ui/autocomplete/ParameterChoicesProvider.java
index 9e38ad1..723d893 100644
--- a/src/org/fife/ui/autocomplete/ParameterChoicesProvider.java
+++ b/src/org/fife/ui/autocomplete/ParameterChoicesProvider.java
@@ -43,7 +43,7 @@ public interface ParameterChoicesProvider {
* Returns a list of choices for a specific parameter.
*
* @param tc The text component.
- * @param p The currently focused parameter.
+ * @param param The currently focused parameter.
* @return The list of parameters. This may be <code>null</code> for
* "no parameters," but might also be an empty list.
*/
diff --git a/src/org/fife/ui/autocomplete/ParameterizedCompletionChoicesWindow.java b/src/org/fife/ui/autocomplete/ParameterizedCompletionChoicesWindow.java
index 34e89ed..e54b895 100644
--- a/src/org/fife/ui/autocomplete/ParameterizedCompletionChoicesWindow.java
+++ b/src/org/fife/ui/autocomplete/ParameterizedCompletionChoicesWindow.java
@@ -24,8 +24,11 @@
package org.fife.ui.autocomplete;
import java.awt.ComponentOrientation;
+import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Window;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@@ -73,6 +76,11 @@ public class ParameterizedCompletionChoicesWindow extends JWindow {
private List choicesListList;
/**
+ * The scroll pane containing the list.
+ */
+ private JScrollPane sp;
+
+ /**
* Comparator used to sort completions by their relevance before sorting
* them lexicographically.
*/
@@ -85,9 +93,11 @@ public class ParameterizedCompletionChoicesWindow extends JWindow {
*
* @param parent The parent window (hosting the text component).
* @param ac The auto-completion instance.
+ * @param tip The parent parameter description tool tip.
*/
public ParameterizedCompletionChoicesWindow(Window parent,
- AutoCompletion ac) {
+ AutoCompletion ac,
+ final ParameterizedCompletionDescriptionToolTip tip) {
super(parent);
this.ac = ac;
@@ -98,14 +108,25 @@ public class ParameterizedCompletionChoicesWindow extends JWindow {
if (ac.getParamChoicesRenderer()!=null) {
list.setCellRenderer(ac.getParamChoicesRenderer());
}
- JScrollPane sp = new JScrollPane(list);
- // Required to easily keep popup wide enough for no horiz. scroll bar
- sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
+ list.addMouseListener(new MouseAdapter() {
+ public void mouseClicked(MouseEvent e) {
+ if (e.getClickCount()==2) {
+ tip.insertSelectedChoice();
+ }
+ }
+ });
+ sp = new JScrollPane(list);
setContentPane(sp);
applyComponentOrientation(o);
setFocusableWindowState(false);
+ // Give apps a chance to decorate us with drop shadows, etc.
+ PopupWindowDecorator decorator = PopupWindowDecorator.get();
+ if (decorator!=null) {
+ decorator.decorate(this);
+ }
+
}
@@ -137,7 +158,7 @@ public class ParameterizedCompletionChoicesWindow extends JWindow {
selection %= model.getSize();
}
list.setSelectedIndex(selection);
- list.setSelectedIndex(selection);
+ list.ensureIndexIsVisible(selection);
}
@@ -247,8 +268,22 @@ public class ParameterizedCompletionChoicesWindow extends JWindow {
setVisible(false);
}
else if (visibleRowCount>0) {
- pack();
+ Dimension size = getPreferredSize();
+ if (size.width<150) {
+ setSize(150, size.height);
+ }
+ else {
+ pack();
+ }
+ // Make sure nothing is ever obscured by vertical scroll bar.
+ if (sp.getVerticalScrollBar()!=null &&
+ sp.getVerticalScrollBar().isVisible()) {
+ size = getSize();
+ int w = size.width + sp.getVerticalScrollBar().getWidth()+5;
+ setSize(w, size.height);
+ }
list.setSelectedIndex(0);
+ list.ensureIndexIsVisible(0);
if (!isVisible()) {
setVisible(true);
}
diff --git a/src/org/fife/ui/autocomplete/ParameterizedCompletionDescriptionToolTip.java b/src/org/fife/ui/autocomplete/ParameterizedCompletionDescriptionToolTip.java
index e73353f..61f4534 100644
--- a/src/org/fife/ui/autocomplete/ParameterizedCompletionDescriptionToolTip.java
+++ b/src/org/fife/ui/autocomplete/ParameterizedCompletionDescriptionToolTip.java
@@ -23,6 +23,7 @@
*/
package org.fife.ui.autocomplete;
+import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Point;
import java.awt.Rectangle;
@@ -40,6 +41,7 @@ import javax.swing.ActionMap;
import javax.swing.BorderFactory;
import javax.swing.InputMap;
import javax.swing.JLabel;
+import javax.swing.JPanel;
import javax.swing.JWindow;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
@@ -162,6 +164,7 @@ class ParameterizedCompletionDescriptionToolTip {
AutoCompletion ac, ParameterizedCompletion pc) {
tooltip = new JWindow(owner);
+
this.ac = ac;
this.pc = pc;
@@ -171,7 +174,21 @@ class ParameterizedCompletionDescriptionToolTip {
BorderFactory.createEmptyBorder(2, 5, 2, 5)));
descLabel.setOpaque(true);
descLabel.setBackground(TipUtil.getToolTipBackground());
- tooltip.setContentPane(descLabel);
+ // It appears that if a JLabel is set as a content pane directly, when
+ // using the JDK's opacity API's, it won't paint its background, even
+ // if label.setOpaque(true) is called. You have to have a container
+ // underneath it for it to paint its background. Thus, we embed our
+ // label in a parent JPanel to handle this case.
+ //tooltip.setContentPane(descLabel);
+ JPanel panel = new JPanel(new BorderLayout());
+ panel.add(descLabel);
+ tooltip.setContentPane(panel);
+
+ // Give apps a chance to decorate us with drop shadows, etc.
+ PopupWindowDecorator decorator = PopupWindowDecorator.get();
+ if (decorator!=null) {
+ decorator.decorate(tooltip);
+ }
lastSelectedParam = -1;
updateText(0);
@@ -194,7 +211,8 @@ class ParameterizedCompletionDescriptionToolTip {
*/
private ParameterizedCompletionChoicesWindow createParamChoicesWindow() {
ParameterizedCompletionChoicesWindow pcw =
- new ParameterizedCompletionChoicesWindow(tooltip.getOwner(), ac);
+ new ParameterizedCompletionChoicesWindow(tooltip.getOwner(),
+ ac, this);
pcw.initialize(pc);
return pcw;
}
@@ -255,6 +273,35 @@ class ParameterizedCompletionDescriptionToolTip {
/**
+ * Inserts the choice selected in the parameter choices window.
+ *
+ * @return Whether the choice was inserted. This will be <code>false</code>
+ * if the window is not visible, or no choice is selected.
+ */
+ boolean insertSelectedChoice() {
+ if (paramChoicesWindow!=null && paramChoicesWindow.isVisible()) {
+ String choice = paramChoicesWindow.getSelectedChoice();
+ if (choice!=null) {
+ JTextComponent tc = ac.getTextComponent();
+ Highlight h = getCurrentParameterHighlight();
+ if (h!=null) {
+ // "+1" is a workaround for Java Highlight issues.
+ tc.setSelectionStart(h.getStartOffset()+1);
+ tc.setSelectionEnd(h.getEndOffset());
+ tc.replaceSelection(choice);
+ moveToNextParam();
+ }
+ else {
+ UIManager.getLookAndFeel().provideErrorFeedback(tc);
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+
+
+ /**
* Installs key bindings on the text component that facilitate the user
* editing this completion's parameters.
*
@@ -704,20 +751,7 @@ class ParameterizedCompletionDescriptionToolTip {
// If the param choices window is visible and something is chosen,
// replace the parameter with it and move to the next one.
if (paramChoicesWindow!=null && paramChoicesWindow.isVisible()) {
- String choice = paramChoicesWindow.getSelectedChoice();
- if (choice!=null) {
- JTextComponent tc = ac.getTextComponent();
- Highlight h = getCurrentParameterHighlight();
- if (h!=null) {
- // "+1" is a workaround for Java Highlight issues.
- tc.setSelectionStart(h.getStartOffset()+1);
- tc.setSelectionEnd(h.getEndOffset());
- tc.replaceSelection(choice);
- moveToNextParam();
- }
- else {
- UIManager.getLookAndFeel().provideErrorFeedback(tc);
- }
+ if (insertSelectedChoice()) {
return;
}
}
diff --git a/src/org/fife/ui/autocomplete/PopupWindowDecorator.java b/src/org/fife/ui/autocomplete/PopupWindowDecorator.java
new file mode 100644
index 0000000..0765210
--- /dev/null
+++ b/src/org/fife/ui/autocomplete/PopupWindowDecorator.java
@@ -0,0 +1,82 @@
+/*
+ * 01/11/2011
+ *
+ * PopupWindowDecorator.java - Hook allowing hosting applications to decorate
+ * JWindows created by the AutoComplete library.
+ * Copyright (C) 2011 Robert Futrell
+ * robert_futrell at users.sourceforge.net
+ * http://fifesoft.com/rsyntaxtextarea
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+package org.fife.ui.autocomplete;
+
+import javax.swing.JWindow;
+
+
+/**
+ * A hook allowing hosting applications to decorate JWindows created by the
+ * AutoComplete library. For example, you could use the
+ * <a href="http://jgoodies.com/">JGoodies</a> library to add drop shadows
+ * to the windows.
+ *
+ * @author Robert Futrell
+ * @version 1.0
+ */
+public abstract class PopupWindowDecorator {
+
+ /**
+ * The singleton instance of this class.
+ */
+ private static PopupWindowDecorator decorator;
+
+
+ /**
+ * Callback called whenever an appropriate JWindow is created by the
+ * AutoComplete library. Implementations can decorate the window however
+ * they see fit.
+ *
+ * @param window The newly-created window.
+ */
+ public abstract void decorate(JWindow window);
+
+
+ /**
+ * Returns the singleton instance of this class. This should only be
+ * called on the EDT.
+ *
+ * @return The singleton instance of this class, or <code>null</code>
+ * for none.
+ * @see #set(PopupWindowDecorator)
+ */
+ public static PopupWindowDecorator get() {
+ return decorator;
+ }
+
+
+ /**
+ * Sets the singleton instance of this class. This should only be called
+ * on the EDT.
+ *
+ * @param decorator The new instance of this class. This may be
+ * <code>null</code>.
+ * @see #get()
+ */
+ public static void set(PopupWindowDecorator decorator) {
+ PopupWindowDecorator.decorator = decorator;
+ }
+
+
+}
\ No newline at end of file
--
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