+ int rpos;
+ SequenceFeature[] features = findFeaturesAtRes(sequence
+ .getDatasetSequence(), rpos = sequence.findPosition(res));
+ appendFeatures(tooltipText, linkImageURL.toString(), rpos, features,
+ this.ap.seqPanel.seqCanvas.fr.minmax);
+ }
+ if (tooltipText.length() == 6) // <html></html>
+ {
+ setToolTipText(null);
+ lastTooltip = null;
+ }
+ else
+ {
+ tooltipText.append("</html>");
+ if (lastTooltip == null
+ || !lastTooltip.equals(tooltipText.toString()))
+ {
+ setToolTipText(tooltipText.toString());
+ lastTooltip = tooltipText.toString();
+ }
+
+ }
+
+ }
+
+ private Point lastp = null;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see javax.swing.JComponent#getToolTipLocation(java.awt.event.MouseEvent)
+ */
+ public Point getToolTipLocation(MouseEvent event)
+ {
+ int x = event.getX(), w = getWidth();
+ int wdth = (w - x < 200) ? -(w / 2) : 5; // switch sides when tooltip is too
+ // close to edge
+ Point p = lastp;
+ if (!event.isShiftDown() || p == null)
+ {
+ p = (tooltipText != null && tooltipText.length() > 6) ? new Point(
+ event.getX() + wdth, event.getY() - 20) : null;
+ }
+ /*
+ * TODO: try to modify position region is not obcured by tooltip
+ */
+ return lastp = p;
+ }
+
+ /**
+ * appends the features at rpos to the given stringbuffer ready for display in
+ * a tooltip
+ *
+ * @param tooltipText2
+ * @param linkImageURL
+ * @param rpos
+ * @param features
+ * TODO refactor to Jalview 'utilities' somehow.
+ */
+ public void appendFeatures(StringBuffer tooltipText2,
+ String linkImageURL, int rpos, SequenceFeature[] features)
+ {
+ appendFeatures(tooltipText2, linkImageURL, rpos, features, null);
+ }