+ if (obj != "")\r
+ {\r
+ text.append(obj + " (" + sequence.findPosition(res) + ")");\r
+ }\r
+ }\r
+\r
+ ap.alignFrame.statusBar.setText(text.toString());\r
+\r
+ StringBuffer tooltipText = new StringBuffer();\r
+ SequenceGroup[] groups = av.alignment.findAllGroups(sequence);\r
+ if (groups != null)\r
+ {\r
+ for (int g = 0; g < groups.length; g++)\r
+ {\r
+ if (groups[g].getStartRes() <= res && groups[g].getEndRes() >= res)\r
+ {\r
+ if (!groups[g].getName().startsWith("JTreeGroup") &&\r
+ !groups[g].getName().startsWith("JGroup"))\r
+ {\r
+ tooltipText.append(groups[g].getName() + " ");\r
+ }\r
+ if (groups[g].getDescription() != null)\r
+ {\r
+ tooltipText.append(groups[g].getDescription());\r
+ }\r
+ tooltipText.append("\n");\r
+ }\r
+ }\r
+ }\r
+\r
+ // use aa to see if the mouse pointer is on a\r
+ SequenceFeature [] allFeatures = findFeaturesAtRes(sequence,\r
+ sequence.findPosition(res));\r
+\r
+ int index = 0;\r
+ while (index < allFeatures.length)\r
+ {\r
+ SequenceFeature sf = allFeatures[index];\r
+\r
+ tooltipText.append(sf.getType() + " " + sf.begin + ":" + sf.end);\r
+\r
+ if (sf.getDescription() != null)\r
+ {\r
+ tooltipText.append(" " + sf.getDescription());\r
+ }\r
+\r
+ if (sf.getValue("status") != null)\r
+ {\r
+ String status = sf.getValue("status").toString();\r
+ if (status.length() > 0)\r
+ {\r
+ tooltipText.append(" (" + sf.getValue("status") + ")");\r
+ }\r
+ }\r
+ tooltipText.append("\n");\r
+\r
+ index++;\r
+ }\r
+\r
+ if (tooltip == null)\r
+ {\r
+ tooltip = new Tooltip(tooltipText.toString(), seqCanvas);\r
+ }\r
+ else\r
+ {\r
+ tooltip.setTip(tooltipText.toString());\r
+ }\r
+ }\r
+\r
+ SequenceFeature[] findFeaturesAtRes(SequenceI sequence, int res)\r
+ {\r
+ Vector tmp = new Vector();\r
+ SequenceFeature[] features = sequence.getSequenceFeatures();\r
+ if (features != null)\r
+ {\r
+ for (int i = 0; i < features.length; i++)\r
+ {\r
+ if (av.featuresDisplayed == null\r
+ || !av.featuresDisplayed.containsKey(features[i].getType()))\r
+ {\r
+ continue;\r
+ }\r
+\r
+ if ( (features[i].getBegin() <= res) &&\r
+ (features[i].getEnd() >= res))\r
+ {\r
+ tmp.addElement(features[i]);\r
+ }\r
+ }\r
+ }\r
+\r
+ features = new SequenceFeature[tmp.size()];\r
+ tmp.copyInto(features);\r
+\r
+ return features;\r
+ }\r
+\r
+\r
+ Tooltip tooltip;\r
+\r
+ public void mouseDragged(MouseEvent evt)\r
+ {\r
+ if (mouseWheelPressed)\r
+ {\r
+ int oldWidth = av.charWidth;\r
+\r
+ //Which is bigger, left-right or up-down?\r
+ if (Math.abs(evt.getY() - lastMousePress.y)\r
+ > Math.abs(evt.getX() - lastMousePress.x))\r
+ {\r
+ int fontSize = av.font.getSize();\r
+\r
+ if (evt.getY() < lastMousePress.y && av.charHeight > 1)\r
+ {\r
+ fontSize--;\r
+ }\r
+ else if (evt.getY() > lastMousePress.y)\r
+ {\r
+ fontSize++;\r
+ }\r
+\r
+ if (fontSize < 1)\r
+ {\r
+ fontSize = 1;\r
+ }\r
+\r
+ av.setFont(new Font(av.font.getName(), av.font.getStyle(), fontSize));\r
+ av.charWidth = oldWidth;\r
+ }\r
+ else\r
+ {\r
+ if (evt.getX() < lastMousePress.x && av.charWidth > 1)\r
+ {\r
+ av.charWidth--;\r
+ }\r
+ else if (evt.getX() > lastMousePress.x)\r
+ {\r
+ av.charWidth++;\r
+ }\r
+\r
+ if (av.charWidth < 1)\r
+ {\r
+ av.charWidth = 1;\r
+ }\r
+ }\r
+\r
+ ap.fontChanged();\r
+\r
+ FontMetrics fm = getFontMetrics(av.getFont());\r
+ av.validCharWidth = fm.charWidth('M') <= av.charWidth;\r
+\r
+ lastMousePress = evt.getPoint();\r
+\r
+ ap.paintAlignment(false);\r
+ ap.annotationPanel.image = null;\r