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