+/**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @author $author$\r
+ * @version $Revision$\r
+ */\r
+public class IdPanel extends JPanel implements MouseListener,\r
+ MouseMotionListener\r
+{\r
+ protected IdCanvas idCanvas;\r
+ protected AlignViewport av;\r
+ protected AlignmentPanel alignPanel;\r
+ ScrollThread scrollThread = null;\r
+ int offy;\r
+ int width;\r
+ int lastid = -1;\r
+ boolean mouseDragging = false;\r
+\r
+ /**\r
+ * Creates a new IdPanel object.\r
+ *\r
+ * @param av DOCUMENT ME!\r
+ * @param parent DOCUMENT ME!\r
+ */\r
+ public IdPanel(AlignViewport av, AlignmentPanel parent)\r
+ {\r
+ this.av = av;\r
+ alignPanel = parent;\r
+ idCanvas = new IdCanvas(av);\r
+ setLayout(new BorderLayout());\r
+ add(idCanvas, BorderLayout.CENTER);\r
+ addMouseListener(this);\r
+ addMouseMotionListener(this);\r
+ ToolTipManager.sharedInstance().registerComponent(this);\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @param e DOCUMENT ME!\r
+ */\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
+ final int seq = av.getIndex(y);\r
+ if(seq!=-1)\r
+ {\r
+ SequenceI sequence = av.alignment.getSequenceAt(seq);\r
+ StringBuffer tip = new StringBuffer("<html>");\r
+ tip.append(sequence.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
+\r
+ //ADD NON POSITIONAL SEQUENCE INFO\r
+ SequenceFeature [] features = sequence.getDatasetSequence().getSequenceFeatures();\r
+ if(features!=null)\r
+ {\r
+ for(int i=0; i<features.length; i++)\r
+ {\r
+ if(features[i].begin == 0 && features[i].end ==0)\r
+ {\r
+ tip.append("<br>"+features[i].featureGroup\r
+ +" "+ features[i].getType()+" "+features[i].description);\r
+ }\r
+ }\r
+ }\r
+\r
+ tip.append("</i></td></tr></table>");\r
+ }\r
+ tip.append("</html>");\r
+ setToolTipText(tip.toString());\r
+ }\r
+ }\r