This is an automated email from the git hooks/post-receive script.

ben pushed a commit to branch master
in repository autocomplete.

commit 60bb8d718dc20858f800323c2a10f59c89965254
Author: bobbylight <[email protected]>
Date:   Sat May 12 04:20:46 2012 +0000

    JavaLanguageSupport: Better support for links in Javadoc.  Still a little 
work to do.
---
 .../ui/autocomplete/AutoCompleteDescWindow.java    |  178 +++++++++++++++-----
 .../fife/ui/autocomplete/DescWindowCallback.java   |   35 ++++
 .../fife/ui/autocomplete/ExternalURLHandler.java   |   17 +-
 3 files changed, 185 insertions(+), 45 deletions(-)

diff --git a/src/org/fife/ui/autocomplete/AutoCompleteDescWindow.java 
b/src/org/fife/ui/autocomplete/AutoCompleteDescWindow.java
index 2c3fed0..0fac65e 100644
--- a/src/org/fife/ui/autocomplete/AutoCompleteDescWindow.java
+++ b/src/org/fife/ui/autocomplete/AutoCompleteDescWindow.java
@@ -16,14 +16,12 @@ import java.awt.Graphics;
 import java.awt.Insets;
 import java.awt.Window;
 import java.awt.event.ActionEvent;
-import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.ResourceBundle;
-import javax.imageio.ImageIO;
 import javax.swing.AbstractAction;
 import javax.swing.Action;
 import javax.swing.BorderFactory;
@@ -53,7 +51,8 @@ import org.fife.ui.rsyntaxtextarea.PopupWindowDecorator;
  * @author Robert Futrell
  * @version 1.0
  */
-class AutoCompleteDescWindow extends JWindow implements HyperlinkListener {
+class AutoCompleteDescWindow extends JWindow implements HyperlinkListener,
+                               DescWindowCallback {
 
        /**
         * The parent AutoCompletion instance.
@@ -208,10 +207,10 @@ class AutoCompleteDescWindow extends JWindow implements 
HyperlinkListener {
        /**
         * Sets the currently displayed description and updates the history.
         *
-        * @param html The new description.
+        * @param historyItem The item to add to the history.
         */
-       private void addToHistory(String html) {
-               history.add(++historyPos, html);
+       private void addToHistory(HistoryEntry historyItem) {
+               history.add(++historyPos, historyItem);
                clearHistoryAfterCurrentPos();
                setActionStates();
        }
@@ -280,14 +279,20 @@ class AutoCompleteDescWindow extends JWindow implements 
HyperlinkListener {
                HyperlinkEvent.EventType type = e.getEventType();
 
                if (type.equals(HyperlinkEvent.EventType.ACTIVATED)) {
+
+                       // Custom hyperlink handler for this completion type
+                       ExternalURLHandler handler = ac.getExternalURLHandler();
+                       if (handler!=null) {
+                               HistoryEntry current = (HistoryEntry)history.
+                                                                               
                get(historyPos);
+                               handler.urlClicked(e, current.completion, this);
+                               return;
+                       }
+
+                       // No custom handler...
                        URL url = e.getURL();
                        if (url!=null) {
-                               ExternalURLHandler handler = 
ac.getExternalURLHandler();
-                               if (handler!=null) {
-                                       handler.urlClicked(url);
-                                       return;
-                               }
-                               // No handler - try loading in external browser 
(Java 6+ only).
+                               // Try loading in external browser (Java 6+ 
only).
                                try {
                                        Util.browse(new URI(url.toString()));
                                } catch (/*IO*/URISyntaxException ioe) {
@@ -315,6 +320,7 @@ class AutoCompleteDescWindow extends JWindow implements 
HyperlinkListener {
                                        }
                                }
                        }
+
                }
 
        }
@@ -324,8 +330,25 @@ class AutoCompleteDescWindow extends JWindow implements 
HyperlinkListener {
         * Enables or disables the back and forward actions as appropriate.
         */
        private void setActionStates() {
-               backAction.setEnabled(historyPos>0);
-               forwardAction.setEnabled(historyPos>-1 && 
historyPos<history.size()-1);
+               // TODO: Localize this text!
+               String desc = null;
+               if (historyPos>0) {
+                       backAction.setEnabled(true);
+                       desc = "Back to " + history.get(historyPos-1);
+               }
+               else {
+                       backAction.setEnabled(false);
+               }
+               backAction.putValue(Action.SHORT_DESCRIPTION, desc);
+               if (historyPos>-1 && historyPos<history.size()-1) {
+                       forwardAction.setEnabled(true);
+                       desc = "Forward to " + history.get(historyPos+1);
+               }
+               else {
+                       forwardAction.setEnabled(false);
+                       desc = null;
+               }
+               forwardAction.putValue(Action.SHORT_DESCRIPTION, desc);
        }
 
 
@@ -348,26 +371,51 @@ class AutoCompleteDescWindow extends JWindow implements 
HyperlinkListener {
         *        (as opposed to clearing it and starting anew).
         */
        protected void setDescriptionFor(Completion item, boolean addToHistory) 
{
+               setDescriptionFor(item, null, addToHistory);
+       }
+
+
+       /**
+        * Sets the description displayed in this window.
+        *
+        * @param item The item whose description you want to display.
+        * @parma anchor The anchor to jump to, or <code>null</code> if none.
+        * @param addToHistory Whether to add this page to the page history
+        *        (as opposed to clearing it and starting anew).
+        */
+       protected void setDescriptionFor(Completion item, String anchor,
+                                                                       boolean 
addToHistory) {
                timer.stop();
-               timerAction.setCompletion(item, addToHistory);
+               timerAction.setCompletion(item, anchor, addToHistory);
                timer.start();
        }
 
 
-       private void setDisplayedDesc(String desc, boolean addToHistory) {
+       private void setDisplayedDesc(Completion completion, final String 
anchor,
+                                                                       boolean 
addToHistory) {
 
+               String desc = completion==null ? null : completion.getSummary();
                if (desc==null) {
                        desc = "<html><em>" + getString("NoDescAvailable") + 
"</em>";
                }
                descArea.setText(desc);
-               descArea.setCaretPosition(0); // In case of scrolling
+               if (anchor!=null) {
+                       SwingUtilities.invokeLater(new Runnable() {
+                               public void run() {
+                                       descArea.scrollToReference(anchor);
+                               }
+                       });
+               }
+               else {
+                       descArea.setCaretPosition(0); // In case of scrolling
+               }
 
                if (!addToHistory) {
                        // Remove everything first if this is going to be the 
only
                        // thing in history.
                        clearHistory();
                }
-               addToHistory(desc);
+               addToHistory(new HistoryEntry(completion, desc, null));
 
        }
 
@@ -382,6 +430,19 @@ class AutoCompleteDescWindow extends JWindow implements 
HyperlinkListener {
                super.setVisible(visible);
        }
 
+
+       /**
+        * Callback for custom <code>ExternalURLHandler</code>s.
+        *
+        * @param completion The completion to display.
+        * @param anchor The anchor in the HTML to jump to, or <code>null</code>
+        *        if none.
+        */
+       public void showSummaryFor(Completion completion, String anchor) {
+               setDescriptionFor(completion, anchor, true);
+       }
+
+
        /**
         * Called by the parent completion popup window the LookAndFeel is 
updated.
         */
@@ -396,23 +457,54 @@ class AutoCompleteDescWindow extends JWindow implements 
HyperlinkListener {
 
 
        /**
+        * A completion and its cached summary text.
+        */
+       private static class HistoryEntry {
+
+               public Completion completion;
+               public String summary;
+               public String anchor;
+
+               public HistoryEntry(Completion completion, String summary,
+                                                                       String 
anchor) {
+                       this.completion = completion;
+                       this.summary = summary;
+                       this.anchor = anchor;
+               }
+
+               /**
+                * Overridden to display a short name for the completion, since 
it's
+                * used in the tool tips for the "back" and "forward" buttons.
+                *
+                * @return A string representation of this history entry.
+                */
+               public String toString() {
+                       return completion.getInputText();
+               }
+
+       }
+
+
+       /**
         * Action that actually updates the summary text displayed.
         */
        private class TimerAction extends AbstractAction {
 
                private Completion completion;
+               private String anchor;
                private boolean addToHistory;
 
                /**
                 * Called when the timer is fired.
                 */
                public void actionPerformed(ActionEvent e) {
-                       String desc = completion==null ? null : 
completion.getSummary();
-                       setDisplayedDesc(desc, addToHistory);
+                       setDisplayedDesc(completion, anchor, addToHistory);
                }
 
-               public void setCompletion(Completion c, boolean addToHistory) {
+               public void setCompletion(Completion c, String anchor,
+                                                                       boolean 
addToHistory) {
                        this.completion = c;
+                       this.anchor = anchor;
                        this.addToHistory = addToHistory;
                }
 
@@ -428,20 +520,22 @@ class AutoCompleteDescWindow extends JWindow implements 
HyperlinkListener {
                        String img = "org/fife/ui/autocomplete/arrow_" +
                                                (ltr ? "left.png" : 
"right.png");
                        ClassLoader cl = getClass().getClassLoader();
-                       URL url = cl.getResource(img);
-                       try {
-                               Icon icon = new ImageIcon(ImageIO.read(url));
-                               putValue(Action.SMALL_ICON, icon);
-                       } catch (IOException ioe) { // Never happens
-                               ioe.printStackTrace();
-                               putValue(Action.SHORT_DESCRIPTION, "Back");
-                       }
+                       Icon icon = new ImageIcon(cl.getResource(img));
+                       putValue(Action.SMALL_ICON, icon);
                }
 
                public void actionPerformed(ActionEvent e) {
                        if (historyPos>0) {
-                               
descArea.setText((String)history.get(--historyPos));
-                               descArea.setCaretPosition(0);
+                               HistoryEntry pair = (HistoryEntry)history.
+                                                                               
                        get(--historyPos);
+                               descArea.setText(pair.summary);
+                               if (pair.anchor!=null) {
+                                       System.out.println("Scrolling to: " + 
pair.anchor);
+                                       descArea.scrollToReference(pair.anchor);
+                               }
+                               else {
+                                       descArea.setCaretPosition(0);
+                               }
                                setActionStates();
                        }
                }
@@ -458,20 +552,22 @@ class AutoCompleteDescWindow extends JWindow implements 
HyperlinkListener {
                        String img = "org/fife/ui/autocomplete/arrow_" +
                                                        (ltr ? "right.png" : 
"left.png");
                        ClassLoader cl = getClass().getClassLoader();
-                       URL url = cl.getResource(img);
-                       try {
-                               Icon icon = new ImageIcon(ImageIO.read(url));
-                               putValue(Action.SMALL_ICON, icon);
-                       } catch (IOException ioe) { // Never happens
-                               ioe.printStackTrace();
-                               putValue(Action.SHORT_DESCRIPTION, "Forward");
-                       }
+                       Icon icon = new ImageIcon(cl.getResource(img));
+                       putValue(Action.SMALL_ICON, icon);
                }
 
                public void actionPerformed(ActionEvent e) {
                        if (history!=null && historyPos<history.size()-1) {
-                               
descArea.setText((String)history.get(++historyPos));
-                               descArea.setCaretPosition(0);
+                               HistoryEntry pair = (HistoryEntry)history.
+                                                                               
        get(++historyPos);
+                               descArea.setText(pair.summary);
+                               if (pair.anchor!=null) {
+                                       System.out.println("Scrolling to: " + 
pair.anchor);
+                                       descArea.scrollToReference(pair.anchor);
+                               }
+                               else {
+                                       descArea.setCaretPosition(0);
+                               }
                                setActionStates();
                        }
                }
diff --git a/src/org/fife/ui/autocomplete/DescWindowCallback.java 
b/src/org/fife/ui/autocomplete/DescWindowCallback.java
new file mode 100644
index 0000000..37334ca
--- /dev/null
+++ b/src/org/fife/ui/autocomplete/DescWindowCallback.java
@@ -0,0 +1,35 @@
+/*
+ * 05/11/2012
+ *
+ * Copyright (C) 2012 Robert Futrell
+ * robert_futrell at users.sourceforge.net
+ * http://fifesoft.com/rsyntaxtextarea
+ *
+ * This library is distributed under a modified BSD license.  See the included
+ * RSTALanguageSupport.License.txt file for details.
+ */
+package org.fife.ui.autocomplete;
+
+
+/**
+ * Passed to {@link ExternalURLHandler}s as a way for them to display a summary
+ * for a new completion in response to a link event.
+ *
+ * @author Robert Futrell
+ * @version 1.0
+ * @see ExternalURLHandler
+ */
+public interface DescWindowCallback {
+
+
+       /**
+        * Callback allowing a new code completion's description to be displayed
+        * in the description window.
+        *
+        * @param completion The new completion.
+        * @param anchor The anchor to scroll to, or <code>null</code> if none.
+        */
+       public void showSummaryFor(Completion completion, String anchor);
+
+
+}
\ No newline at end of file
diff --git a/src/org/fife/ui/autocomplete/ExternalURLHandler.java 
b/src/org/fife/ui/autocomplete/ExternalURLHandler.java
index b7c8622..08d4a50 100644
--- a/src/org/fife/ui/autocomplete/ExternalURLHandler.java
+++ b/src/org/fife/ui/autocomplete/ExternalURLHandler.java
@@ -9,7 +9,7 @@
  */
 package org.fife.ui.autocomplete;
 
-import java.net.URL;
+import javax.swing.event.HyperlinkEvent;
 
 
 /**
@@ -17,7 +17,12 @@ import java.net.URL;
  * If no handler is installed, and if running in Java 6, the system default
  * web browser is used to open the URL.  If not running Java 6, nothing will
  * happen.  If you want browser support for pre-Java 6 JRE's, you will need
- * to register one of these callbacks on your {@link AutoCompletion}.
+ * to register one of these callbacks on your {@link AutoCompletion}, and
+ * open the URL in a web browser yourself.<p>
+ *
+ * Alternatively, folks implementing robust code completion support for a
+ * language might install an <code>ExternalURLHandler</code> to handle
+ * navigating through linked documentation of objects, functions, etc.
  *
  * @author Robert Futrell
  * @version 1.0
@@ -29,9 +34,13 @@ public interface ExternalURLHandler {
        /**
         * Called when an external URL is clicked in the description window.
         *
-        * @param url The URL.
+        * @param e The event containing the hyperlink clicked.
+        * @param c The completion currently being displayed.
+        * @param callback Allows you to display new content in the description
+        *        window.
         */
-       public void urlClicked(URL url);
+       public void urlClicked(HyperlinkEvent e, Completion c,
+                                               DescWindowCallback callback);
 
 
 }
\ No newline at end of file

-- 
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