null pointer in wrapped mode, click near sequence
[jalview.git] / src / jalview / gui / IdPanel.java
index 310276c..bb6efd7 100755 (executable)
@@ -59,6 +59,7 @@ public class IdPanel extends JPanel implements MouseListener,
         add(idCanvas, BorderLayout.CENTER);\r
         addMouseListener(this);\r
         addMouseMotionListener(this);\r
+        ToolTipManager.sharedInstance().registerComponent(this);\r
     }\r
 \r
     /**\r
@@ -68,8 +69,40 @@ public class IdPanel extends JPanel implements MouseListener,
      */\r
     public void mouseMoved(MouseEvent e)\r
     {\r
+      int y = e.getY();\r
+\r
+      if (av.getWrapAlignment())\r
+      {\r
+        y = getWrappedY(y);\r
+      }\r
+\r
+      int seq = av.getIndex(y);\r
+      if(seq!=-1)\r
+      {\r
+        StringBuffer tip = new StringBuffer("<html>");\r
+        tip.append(av.alignment.getSequenceAt(seq).getDisplayId(true));\r
+        if (av.alignment.getSequenceAt(seq).getDescription() != null)\r
+        {\r
+          tip.append("<table width=250 border=0><tr><td><i>");\r
+          tip.append(av.alignment.getSequenceAt(seq).getDescription());\r
+          tip.append("</i></td></tr></table>");\r
+        }\r
+        tip.append("</html>");\r
+        setToolTipText(tip.toString());\r
+      }\r
+\r
+    }\r
+\r
+    int getWrappedY(int y)\r
+    {\r
+      int hgap = av.charHeight;\r
+      if (av.scaleAboveWrapped)\r
+        hgap += av.charHeight;\r
+\r
+      return y - hgap;\r
     }\r
 \r
+\r
     /**\r
      * DOCUMENT ME!\r
      *\r
@@ -83,7 +116,7 @@ public class IdPanel extends JPanel implements MouseListener,
 \r
         if (av.getWrapAlignment())\r
         {\r
-            y -= (2 * av.charHeight);\r
+            y = getWrappedY(y);\r
         }\r
 \r
         int seq = av.getIndex(y);\r
@@ -106,6 +139,7 @@ public class IdPanel extends JPanel implements MouseListener,
         alignPanel.repaint();\r
     }\r
 \r
+\r
     /**\r
      * DOCUMENT ME!\r
      *\r
@@ -113,35 +147,48 @@ public class IdPanel extends JPanel implements MouseListener,
      */\r
     public void mouseClicked(MouseEvent e)\r
     {\r
-        if (e.getClickCount() == 2)\r
-        {\r
-            int y = e.getY();\r
-\r
-            if (av.getWrapAlignment())\r
-            {\r
-                y -= (2 * av.charHeight);\r
-            }\r
-\r
-            int seq = av.getIndex(y);\r
-            String id = av.getAlignment().getSequenceAt(seq).getName();\r
-\r
-            try\r
-            {\r
-                jalview.util.BrowserLauncher.openURL(\r
-                    "http://srs.ebi.ac.uk/srs7bin/cgi-bin/wgetz?-e+[uniprot-all:" +\r
-                    id + "]+-vn+2");\r
-            }\r
-            catch (Exception ex)\r
-            {\r
-                // TODO: JBPNote : state dependent error message for real browserLaunch problems rather than unix misconfiguration.\r
-                System.err.println(ex.getMessage() +\r
-                    "\nUnixers: Try adding this jalview.browser property line \n" +\r
-                    "in your jalview.properties file (/usr/local/bin/firefox is an exanmple browser path):\n" +\r
-                    "jalview.browser=/usr/local/bin/firefox\n");\r
-\r
-                //ex.printStackTrace();\r
-            }\r
-        }\r
+      if (e.getClickCount() < 2)\r
+        return;\r
+\r
+      java.util.Vector links = Preferences.sequenceURLLinks;\r
+      if (links == null || links.size() < 1)\r
+        return;\r
+\r
+      int y = e.getY();\r
+\r
+      if (av.getWrapAlignment())\r
+      {\r
+         y = getWrappedY(y);\r
+      }\r
+\r
+      //DEFAULT LINK IS FIRST IN THE LINK LIST\r
+      int seq = av.getIndex(y);\r
+      if(seq==-1)\r
+        return;\r
+\r
+      String id = av.getAlignment().getSequenceAt(seq).getName();\r
+      if (id.indexOf("|") > -1)\r
+        id = id.substring(id.lastIndexOf("|") + 1);\r
+\r
+\r
+      String url = links.elementAt(0).toString();\r
+      url = url.substring(url.indexOf("|")+1);\r
+\r
+      int index = url.indexOf("$SEQUENCE_ID$");\r
+      url = url.substring(0, index)+ id + url.substring(index+13);\r
+\r
+      try\r
+      {\r
+        jalview.util.BrowserLauncher.openURL(url);\r
+      }\r
+      catch (Exception ex)\r
+      {\r
+       JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
+           "Unixers: Couldn't find default web browser."\r
+          +"\nAdd the full path to your browser in Preferences.",\r
+          "Web browser not found", JOptionPane.WARNING_MESSAGE );\r
+        ex.printStackTrace();\r
+      }\r
     }\r
 \r
     /**\r
@@ -197,7 +244,7 @@ public class IdPanel extends JPanel implements MouseListener,
 \r
         if (av.getWrapAlignment())\r
         {\r
-            y -= (2 * av.charHeight);\r
+            y = getWrappedY(y);\r
         }\r
 \r
         int seq = av.getIndex(y);\r
@@ -277,6 +324,9 @@ public class IdPanel extends JPanel implements MouseListener,
      */\r
     void selectSeqs(int start, int end)\r
     {\r
+      if(av.getSelectionGroup()==null)\r
+            return;\r
+\r
         lastid = start;\r
 \r
         if (end < start)\r
@@ -289,7 +339,7 @@ public class IdPanel extends JPanel implements MouseListener,
 \r
         for (int i = start; i <= end; i++)\r
         {\r
-            av.getSelectionGroup().addSequence(av.getAlignment().getSequenceAt(i),\r
+          av.getSelectionGroup().addSequence(av.getAlignment().getSequenceAt(i),\r
                 true);\r
         }\r
     }\r