groupURL link prototype
[jalview.git] / src / jalview / gui / IdPanel.java
index a781830..52ac6ad 100755 (executable)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4)
- * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1)
+ * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
  * 
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -20,6 +20,8 @@ package jalview.gui;
 
 import java.awt.*;
 import java.awt.event.*;
+import java.util.Vector;
+
 import javax.swing.*;
 
 import jalview.datamodel.*;
@@ -41,7 +43,8 @@ public class IdPanel extends JPanel implements MouseListener,
   protected AlignmentPanel alignPanel;
 
   ScrollThread scrollThread = null;
-
+  String linkImageURL;
+  
   int offy;
 
   // int width;
@@ -62,6 +65,7 @@ public class IdPanel extends JPanel implements MouseListener,
     this.av = av;
     alignPanel = parent;
     idCanvas = new IdCanvas(av);
+    linkImageURL = getClass().getResource("/images/link.gif").toString();
     setLayout(new BorderLayout());
     add(idCanvas, BorderLayout.CENTER);
     addMouseListener(this);
@@ -78,7 +82,8 @@ public class IdPanel extends JPanel implements MouseListener,
    */
   public void mouseMoved(MouseEvent e)
   {
-    int seq = Math.max(0, alignPanel.seqPanel.findSeq(e));
+    SeqPanel sp = alignPanel.seqPanel;
+    int seq = Math.max(0, sp.findSeq(e));
     String tmp;
     if (seq > -1 && seq < av.alignment.getHeight())
     {
@@ -95,7 +100,7 @@ public class IdPanel extends JPanel implements MouseListener,
       }
 
       DBRefEntry[] dbrefs = sequence.getDatasetSequence().getDBRef();
-      if (dbrefs != null)
+      if (av.isShowDbRefs() && dbrefs != null)
       {
         for (int i = 0; i < dbrefs.length; i++)
         {
@@ -109,16 +114,18 @@ public class IdPanel extends JPanel implements MouseListener,
       // ADD NON POSITIONAL SEQUENCE INFO
       SequenceFeature[] features = sequence.getDatasetSequence()
               .getSequenceFeatures();
-      if (features != null)
+      SequenceFeature[] tfeat = new SequenceFeature[1];
+      if (av.isShowNpFeats() && features != null)
       {
         for (int i = 0; i < features.length; i++)
         {
           if (features[i].begin == 0 && features[i].end == 0)
           {
-            tmp = features[i].featureGroup + " " + features[i].getType()
-                    + " " + features[i].description;
-            tip.append("<br>" + tmp);
-            maxWidth = Math.max(maxWidth, tmp.length());
+            int sz = -tip.length();
+            tfeat[0] = features[i];
+            sp.appendFeatures(tip, linkImageURL, 0, tfeat,sp.seqCanvas.fr.minmax);
+            sz+=tip.length();
+            maxWidth = Math.max(maxWidth, sz);
           }
         }
       }
@@ -156,7 +163,7 @@ public class IdPanel extends JPanel implements MouseListener,
     {
       selectSeqs(lastid + 1, seq);
     }
-
+    
     lastid = seq;
     alignPanel.paintAlignment(true);
   }
@@ -302,9 +309,28 @@ public class IdPanel extends JPanel implements MouseListener,
 
     if (javax.swing.SwingUtilities.isRightMouseButton(e))
     {
+      Sequence sq = (Sequence) av
+      .getAlignment().getSequenceAt(seq);
+      // build a new links menu based on the current links + any non-positional features
+      Vector nlinks = new Vector(Preferences.sequenceURLLinks);
+      SequenceFeature sf[] = sq.getDatasetSequence().getSequenceFeatures();
+      for (int sl=0;sf!=null && sl<sf.length;sl++)
+      {
+        if (sf[sl].begin==sf[sl].end && sf[sl].begin==0)
+        {
+          if (sf[sl].links!=null && sf[sl].links.size()>0)
+          {
+            for (int l=0, lSize=sf[sl].links.size(); l<lSize; l++)
+            { 
+              nlinks.addElement(sf[sl].links.elementAt(l));
+            }
+          }
+        }
+      }
+      
       jalview.gui.PopupMenu pop = new jalview.gui.PopupMenu(alignPanel,
-              (Sequence) av.getAlignment().getSequenceAt(seq),
-              Preferences.sequenceURLLinks);
+              sq,
+              nlinks, new Vector(Preferences.groupURLLinks));
       pop.show(this, e.getX(), e.getY());
 
       return;
@@ -327,7 +353,6 @@ public class IdPanel extends JPanel implements MouseListener,
     {
       selectSeq(seq);
     }
-
     alignPanel.paintAlignment(true);
   }
 
@@ -381,7 +406,6 @@ public class IdPanel extends JPanel implements MouseListener,
               av.getAlignment().getSequenceAt(i), true);
     }
   }
-
   /**
    * DOCUMENT ME!
    * 
@@ -394,6 +418,12 @@ public class IdPanel extends JPanel implements MouseListener,
     {
       scrollThread.running = false;
     }
+//    if (mouseDragging)
+    {
+      // always send selection message when mouse is released
+      av.sendSelection();
+      
+    }
 
     mouseDragging = false;
     PaintRefresher.Refresh(this, av.getSequenceSetId());