refactored feature tooltip generation code to static method for use by IdPanel
[jalview.git] / src / jalview / gui / SeqPanel.java
index bdfcef4..63a57f8 100755 (executable)
@@ -679,123 +679,140 @@ public class SeqPanel extends JPanel implements MouseListener,
     // use aa to see if the mouse pointer is on a
     if (av.showSequenceFeatures)
     {
+      int rpos;
       SequenceFeature[] features = findFeaturesAtRes(sequence
-              .getDatasetSequence(), sequence.findPosition(res));
+              .getDatasetSequence(), rpos = sequence.findPosition(res));
+      appendFeatures(tooltipText, linkImageURL.toString(), rpos, features);
+    }
+    if (tooltipText.length() == 6) // <html></html>
+    {
+      setToolTipText(null);
+    }
+    else
+    {
+      tooltipText.append("</html>");
+      if (lastTooltip == null
+              || !lastTooltip.equals(tooltipText.toString()))
+        setToolTipText(tooltipText.toString());
+
+      lastTooltip = tooltipText.toString();
+    }
 
-      if (features != null)
+  }
+  /**
+   * 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 static void appendFeatures(StringBuffer tooltipText2, String linkImageURL,
+          int rpos, SequenceFeature[] features)
+  {
+    String tmpString;
+    if (features != null)
+    {
+      for (int i = 0; i < features.length; i++)
       {
-        for (int i = 0; i < features.length; i++)
+        if (features[i].getType().equals("disulfide bond"))
         {
-          if (features[i].getType().equals("disulfide bond"))
+          if (features[i].getBegin() == rpos
+                  || features[i].getEnd() == rpos)
           {
-            if (features[i].getBegin() == sequence.findPosition(res)
-                    || features[i].getEnd() == sequence.findPosition(res))
+            if (tooltipText2.length() > 6)
             {
-              if (tooltipText.length() > 6)
-              {
-                tooltipText.append("<br>");
-              }
-              tooltipText.append("disulfide bond " + features[i].getBegin()
-                      + ":" + features[i].getEnd());
-              if (features[i].links != null)
-              {
-                tooltipText.append(" <img src=\"" + linkImageURL + "\">");
-              }
+              tooltipText2.append("<br>");
+            }
+            tooltipText2.append("disulfide bond " + features[i].getBegin()
+                    + ":" + features[i].getEnd());
+            if (features[i].links != null)
+            {
+              tooltipText2.append(" <img src=\"" + linkImageURL + "\">");
             }
           }
-          else
+        }
+        else
+        {
+          if (tooltipText2.length() > 6)
+          {
+            tooltipText2.append("<br>");
+          }
+
+          tooltipText2.append(features[i].getType() + " ");
+          if (rpos!=0)
+          {
+            // we are marking a positional feature
+            tooltipText2.append(features[i].begin);
+          }
+          if (features[i].begin != features[i].end)
           {
-            if (tooltipText.length() > 6)
+            tooltipText2.append(" " + features[i].end);
+          }
+
+          if (features[i].getDescription() != null
+                  && !features[i].description.equals(features[i]
+                          .getType()))
+          {
+            tmpString = features[i].getDescription();
+            int startTag = tmpString.toUpperCase().indexOf("<HTML>");
+            if (startTag > -1)
             {
-              tooltipText.append("<br>");
+              tmpString = tmpString.substring(startTag + 6);
             }
-
-            tooltipText.append(features[i].getType() + " "
-                    + features[i].begin);
-            if (features[i].begin != features[i].end)
+            int endTag = tmpString.toUpperCase().indexOf("</BODY>");
+            if (endTag > -1)
             {
-              tooltipText.append(" " + features[i].end);
+              tmpString = tmpString.substring(0, endTag);
+            }
+            endTag = tmpString.toUpperCase().indexOf("</HTML>");
+            if (endTag > -1)
+            {
+              tmpString = tmpString.substring(0, endTag);
             }
 
-            if (features[i].getDescription() != null
-                    && !features[i].description.equals(features[i]
-                            .getType()))
+            if (startTag > -1)
             {
-              tmpString = features[i].getDescription();
-              int startTag = tmpString.toUpperCase().indexOf("<HTML>");
-              if (startTag > -1)
-              {
-                tmpString = tmpString.substring(startTag + 6);
-              }
-              int endTag = tmpString.toUpperCase().indexOf("</BODY>");
-              if (endTag > -1)
-              {
-                tmpString = tmpString.substring(0, endTag);
-              }
-              endTag = tmpString.toUpperCase().indexOf("</HTML>");
-              if (endTag > -1)
+              tooltipText2.append("; " + tmpString);
+            }
+            else
+            {
+              if (tmpString.indexOf("<") > -1
+                      || tmpString.indexOf(">") > -1)
               {
-                tmpString = tmpString.substring(0, endTag);
-              }
+                // The description does not specify html is to
+                // be used, so we must remove < > symbols
+                tmpString = tmpString.replaceAll("<", "&lt;");
+                tmpString = tmpString.replaceAll(">", "&gt;");
+
+                tooltipText2.append("; ");
+                tooltipText2.append(tmpString);
 
-              if (startTag > -1)
-              {
-                tooltipText.append("; " + tmpString);
               }
               else
               {
-                if (tmpString.indexOf("<") > -1
-                        || tmpString.indexOf(">") > -1)
-                {
-                  // The description does not specify html is to
-                  // be used, so we must remove < > symbols
-                  tmpString = tmpString.replaceAll("<", "&lt;");
-                  tmpString = tmpString.replaceAll(">", "&gt;");
-
-                  tooltipText.append("; ");
-                  tooltipText.append(tmpString);
-
-                }
-                else
-                {
-                  tooltipText.append("; " + tmpString);
-                }
-              }
-            }
-            if (features[i].getValue("status") != null)
-            {
-              String status = features[i].getValue("status").toString();
-              if (status.length() > 0)
-              {
-                tooltipText.append("; (" + features[i].getValue("status")
-                        + ")");
+                tooltipText2.append("; " + tmpString);
               }
             }
-
-            if (features[i].links != null)
+          }
+          if (features[i].getValue("status") != null)
+          {
+            String status = features[i].getValue("status").toString();
+            if (status.length() > 0)
             {
-              tooltipText.append(" <img src=\"" + linkImageURL + "\">");
+              tooltipText2.append("; (" + features[i].getValue("status")
+                      + ")");
             }
+          }
 
+          if (features[i].links != null)
+          {
+            tooltipText2.append(" <img src=\"" + linkImageURL + "\">");
           }
+
         }
       }
     }
-
-    if (tooltipText.length() == 6) // <html></html>
-    {
-      setToolTipText(null);
-    }
-    else
-    {
-      tooltipText.append("</html>");
-      if (lastTooltip == null
-              || !lastTooltip.equals(tooltipText.toString()))
-        setToolTipText(tooltipText.toString());
-
-      lastTooltip = tooltipText.toString();
-    }
-
   }
 
   String lastTooltip;