Author: tilman
Date: Sat Dec  5 11:47:48 2020
New Revision: 1884124

URL: http://svn.apache.org/viewvc?rev=1884124&view=rev
Log:
PDFBOX-2941: change mouse cursor to hand when URI, launch URI when clicked

Modified:
    
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java

Modified: 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java?rev=1884124&r1=1884123&r2=1884124&view=diff
==============================================================================
--- 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java
 (original)
+++ 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java
 Sat Dec  5 11:47:48 2020
@@ -37,6 +37,8 @@ import javax.swing.SwingWorker;
 import javax.swing.event.AncestorEvent;
 import javax.swing.event.AncestorListener;
 import java.awt.Component;
+import java.awt.Cursor;
+import java.awt.Desktop;
 import java.awt.Font;
 import java.awt.GraphicsDevice;
 import java.awt.GraphicsEnvironment;
@@ -48,6 +50,8 @@ import java.awt.event.MouseMotionListene
 import java.awt.geom.AffineTransform;
 import java.awt.image.BufferedImage;
 import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
@@ -57,6 +61,7 @@ import java.util.concurrent.ExecutionExc
 import java.util.concurrent.TimeUnit;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.pdfbox.debugger.ui.ErrorDialog;
 import org.apache.pdfbox.debugger.ui.HighResolutionImageIcon;
 import org.apache.pdfbox.debugger.ui.ImageTypeMenu;
 import org.apache.pdfbox.debugger.ui.RenderDestinationMenu;
@@ -98,6 +103,7 @@ public class PagePane implements ActionL
     private RenderDestinationMenu renderDestinationMenu;
     private ViewMenu viewMenu;
     private String labelText = "";
+    private String currentURI = "";
     private final Map<PDRectangle,String> rectMap = new HashMap<>();
     private final AffineTransform defaultTransform = 
GraphicsEnvironment.getLocalGraphicsEnvironment().
                         
getDefaultScreenDevice().getDefaultConfiguration().getDefaultTransform();
@@ -418,16 +424,25 @@ public class PagePane implements ActionL
                 break;
         }
         String text = "x: " + x1 + ", y: " + y1;
-        
-        // are we in a field widget?
+
+        // are we in a field widget or a link annotation?
+        Cursor cursor = Cursor.getDefaultCursor();
+        currentURI = "";
         for (Entry<PDRectangle,String> entry : rectMap.entrySet())
         {
             if (entry.getKey().contains(x1, y1))
             {
-                text += ", " + rectMap.get(entry.getKey());
+                String s = rectMap.get(entry.getKey());
+                text += ", " + s;
+                if (s.startsWith("URI: "))
+                {
+                    currentURI = s.substring(5);
+                    cursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
+                }
                 break;
             }
         }
+        panel.setCursor(cursor);
 
         statuslabel.setText(text);
     }
@@ -435,7 +450,20 @@ public class PagePane implements ActionL
     @Override
     public void mouseClicked(MouseEvent e)
     {
-        // do nothing
+        if (!currentURI.isEmpty())
+        {
+            if (Desktop.isDesktopSupported() && 
Desktop.getDesktop().isSupported(Desktop.Action.BROWSE))
+            {
+                try
+                {
+                    Desktop.getDesktop().browse(new URI(currentURI));
+                }
+                catch (URISyntaxException | IOException ex)
+                {
+                    new ErrorDialog(ex).setVisible(true);
+                }
+            }
+        }
     }
 
     @Override


Reply via email to