REmove excessive painting
[jalview.git] / src / jalview / appletgui / IdPanel.java
index 33463d4..c510803 100755 (executable)
@@ -1,6 +1,6 @@
 /*\r
  * Jalview - A Sequence Alignment Editor and Viewer\r
- * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
+ * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
  *\r
  * This program is free software; you can redistribute it and/or\r
  * modify it under the terms of the GNU General Public License\r
@@ -37,6 +37,7 @@ public class IdPanel
   int width;\r
   int lastid = -1;\r
   boolean mouseDragging = false;\r
+  java.util.Vector links = new java.util.Vector();\r
 \r
   public IdPanel(AlignViewport av, AlignmentPanel parent)\r
   {\r
@@ -47,26 +48,64 @@ public class IdPanel
     add(idCanvas, BorderLayout.CENTER);\r
     idCanvas.addMouseListener(this);\r
     idCanvas.addMouseMotionListener(this);\r
+\r
+    String label, url;\r
+    if (av.applet != null)\r
+    {\r
+      for (int i = 1; i < 10; i++)\r
+      {\r
+        label = av.applet.getParameter("linkLabel_" + i);\r
+        url = av.applet.getParameter("linkURL_" + i);\r
+\r
+        if (label != null && url != null)\r
+        {\r
+          links.addElement(label + "|" + url);\r
+        }\r
+\r
+      }\r
+    }\r
+    if (links.size() < 1)\r
+    {\r
+      links = new java.util.Vector();\r
+      links.addElement("SRS|http://srs.ebi.ac.uk/srsbin/cgi-bin/wgetz?-newId+(([uniprot-all:$SEQUENCE_ID$]))+-view+SwissEntry");\r
+    }\r
   }\r
 \r
+  Tooltip tooltip;\r
   public void mouseMoved(MouseEvent e)\r
-  {}\r
-\r
-  public void mouseDragged(MouseEvent e)\r
   {\r
-    mouseDragging = true;\r
+    int seq = alignPanel.seqPanel.findSeq(e);\r
 \r
-    int y = e.getY();\r
-    if (av.getWrapAlignment())\r
+    SequenceI sequence = av.getAlignment().getSequenceAt(seq);\r
+\r
+    if (sequence.getDescription() == null)\r
     {\r
-      y -= 2 * av.charHeight;\r
+      if (tooltip != null)\r
+      {\r
+        tooltip.setVisible(false);\r
+      }\r
+      tooltip = null;\r
+      return;\r
     }\r
-    int seq = av.getIndex(y);\r
 \r
-    if (seq < 0)\r
+    if (tooltip == null)\r
     {\r
-      return;\r
+      tooltip = new Tooltip(\r
+          sequence.getDisplayId(true)\r
+          + "\n" + sequence.getDescription(), idCanvas);\r
+    }\r
+    else\r
+    {\r
+      tooltip.setTip(sequence.getDisplayId(true)\r
+                     + "\n" + sequence.getDescription());\r
     }\r
+  }\r
+\r
+  public void mouseDragged(MouseEvent e)\r
+  {\r
+    mouseDragging = true;\r
+\r
+    int seq = Math.max(0, alignPanel.seqPanel.findSeq(e));\r
 \r
     if (seq < lastid)\r
     {\r
@@ -78,34 +117,41 @@ public class IdPanel
     }\r
 \r
     lastid = seq;\r
-    alignPanel.repaint();\r
+    alignPanel.paintAlignment(false);\r
   }\r
 \r
   public void mouseClicked(MouseEvent e)\r
   {\r
-    if (e.getClickCount() == 2)\r
+    if (e.getClickCount() < 2)\r
     {\r
-      int y = e.getY();\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
+      return;\r
+    }\r
 \r
-      try\r
-      {\r
-        jalview.bin.JalviewLite.showURL(\r
-            "http://srs.ebi.ac.uk/srs7bin/cgi-bin/wgetz?-e+[swall-id:" + id +\r
-            "]+-vn+2");\r
-      }\r
-      catch (Exception ex)\r
-      {\r
-        ex.printStackTrace();\r
-      }\r
+    //DEFAULT LINK IS FIRST IN THE LINK LIST\r
+    int seq = alignPanel.seqPanel.findSeq(e);\r
+    String id = av.getAlignment().getSequenceAt(seq).getName();\r
+    if (id.indexOf("|") > -1)\r
+    {\r
+      id = id.substring(id.lastIndexOf("|") + 1);\r
     }\r
 \r
+    String target = links.elementAt(0).toString();\r
+    target = target.substring(0, target.indexOf("|"));\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
+\r
+      alignPanel.alignFrame.showURL(url, target);\r
+    }\r
+    catch (Exception ex)\r
+    {\r
+      ex.printStackTrace();\r
+    }\r
   }\r
 \r
   public void mouseEntered(MouseEvent e)\r
@@ -137,7 +183,7 @@ public class IdPanel
 \r
   public void mousePressed(MouseEvent e)\r
   {\r
-    if (e.getClickCount() == 2)\r
+    if (e.getClickCount() > 1)\r
     {\r
       return;\r
     }\r
@@ -148,47 +194,27 @@ public class IdPanel
       y -= 2 * av.charHeight;\r
     }\r
 \r
-    int seq = av.getIndex(y);\r
-    if (seq == -1)\r
-    {\r
-      return;\r
-    }\r
+    int seq = alignPanel.seqPanel.findSeq(e);\r
 \r
     if ( (e.getModifiers() & InputEvent.BUTTON3_MASK) ==\r
         InputEvent.BUTTON3_MASK)\r
     {\r
-      APopupMenu popup = new APopupMenu(alignPanel, null);\r
+      APopupMenu popup = new APopupMenu(alignPanel,\r
+                                        (Sequence) av.getAlignment().\r
+                                        getSequenceAt(seq), links);\r
       this.add(popup);\r
       popup.show(this, e.getX(), e.getY());\r
       return;\r
     }\r
 \r
-    if (!e.isControlDown() && !e.isShiftDown() &&\r
-        av.alignment.findGroup(av.alignment.getSequenceAt(seq)) != null)\r
-    {\r
-\r
-      SequenceGroup selection = new SequenceGroup();\r
-      SequenceGroup sg = av.alignment.findGroup(av.alignment.getSequenceAt(seq));\r
-      selection.setStartRes(0);\r
-      selection.setEndRes(av.alignment.getWidth() - 1);\r
-      for (int i = 0; i < sg.getSize(); i++)\r
-      {\r
-        selection.addSequence(sg.getSequenceAt(i), true);\r
-      }\r
-\r
-      av.setSelectionGroup(selection);\r
-      return;\r
-    }\r
-\r
-    if (av.getSelectionGroup() == null ||\r
-        (!e.isControlDown() && av.getSelectionGroup() != null))\r
+    if ( (av.getSelectionGroup() == null) ||\r
+        ( (!e.isControlDown() && !e.isShiftDown()) && av.getSelectionGroup() != null))\r
     {\r
       av.setSelectionGroup(new SequenceGroup());\r
+      av.getSelectionGroup().setStartRes(0);\r
+      av.getSelectionGroup().setEndRes(av.alignment.getWidth() - 1);\r
     }\r
 \r
-    av.getSelectionGroup().setStartRes(0);\r
-    av.getSelectionGroup().setEndRes(av.alignment.getWidth() - 1);\r
-\r
     if (e.isShiftDown() && lastid != -1)\r
     {\r
       selectSeqs(lastid, seq);\r
@@ -198,7 +224,7 @@ public class IdPanel
       selectSeq(seq);\r
     }\r
 \r
-    alignPanel.repaint();\r
+    alignPanel.paintAlignment(false);\r
   }\r
 \r
   void selectSeq(int seq)\r
@@ -212,6 +238,12 @@ public class IdPanel
   {\r
 \r
     lastid = start;\r
+\r
+    if (end >= av.getAlignment().getHeight())\r
+    {\r
+      end = av.getAlignment().getHeight() - 1;\r
+    }\r
+\r
     if (end < start)\r
     {\r
       int tmp = start;\r
@@ -234,11 +266,13 @@ public class IdPanel
       scrollThread.running = false;\r
     }\r
 \r
-    if(av.getSelectionGroup()!=null)\r
+    if (av.getSelectionGroup() != null)\r
+    {\r
       av.getSelectionGroup().recalcConservation();\r
+    }\r
 \r
     mouseDragging = false;\r
-    PaintRefresher.Refresh(this);\r
+    PaintRefresher.Refresh(this, av.getSequenceSetId());\r
   }\r
 \r
   public void highlightSearchResults(java.util.Vector found)\r
@@ -294,7 +328,7 @@ public class IdPanel
           {\r
             selectSeqs(lastid - 1, seq);\r
           }\r
-          else if (seq > lastid)\r
+          else if (seq > lastid && seq < av.alignment.getHeight())\r
           {\r
             selectSeqs(lastid + 1, seq);\r
           }\r
@@ -306,7 +340,7 @@ public class IdPanel
           running = false;\r
         }\r
 \r
-        alignPanel.repaint();\r
+        alignPanel.paintAlignment(true);\r
         try\r
         {\r
           Thread.sleep(100);\r