Amend features/annotations in applet
[jalview.git] / src / jalview / appletgui / SeqPanel.java
index f4f2cfd..f9304cf 100755 (executable)
@@ -448,7 +448,40 @@ public class SeqPanel
   }\r
 \r
   public void mouseClicked(MouseEvent evt)\r
-  {}\r
+  {\r
+    SequenceI sequence = av.alignment.getSequenceAt(findSeq(evt));\r
+    if (evt.getClickCount() > 1)\r
+    {\r
+      if (av.getSelectionGroup().getSize() == 1\r
+          && av.getSelectionGroup().getEndRes()\r
+          - av.getSelectionGroup().getStartRes() < 2)\r
+      {\r
+        av.setSelectionGroup(null);\r
+      }\r
+\r
+      SequenceFeature[] features = findFeaturesAtRes(\r
+          sequence,\r
+          sequence.findPosition(findRes(evt))\r
+          );\r
+\r
+      if (features != null && features.length > 0)\r
+      {\r
+        SearchResults highlight = new SearchResults();\r
+        highlight.addResult(sequence,\r
+                            features[0].getBegin(),\r
+                            features[0].getEnd());\r
+        seqCanvas.highlightSearchResults(highlight);\r
+      }\r
+      if (features != null && features.length > 0)\r
+      {\r
+        seqCanvas.getFeatureRenderer().amendFeatures(\r
+            new SequenceI[]\r
+            {sequence}, features, false, ap);\r
+\r
+        seqCanvas.highlightSearchResults(null);\r
+      }\r
+    }\r
+  }\r
 \r
   public void mouseReleased(MouseEvent evt)\r
   {\r
@@ -554,6 +587,8 @@ public class SeqPanel
     return seq;\r
   }\r
 \r
+\r
+\r
   public void doMousePressed(MouseEvent evt)\r
   {\r
 \r
@@ -691,18 +726,13 @@ public class SeqPanel
     }\r
 \r
     // use aa to see if the mouse pointer is on a\r
-    if (av.showSequenceFeatures\r
-        && sequence.getSequenceFeatures() != null\r
-        && av.featuresDisplayed != null)\r
-    {\r
-\r
-      Vector allFeatures = getAllFeaturesAtRes(sequence,\r
+    SequenceFeature [] allFeatures = findFeaturesAtRes(sequence,\r
                                                sequence.findPosition(res));\r
 \r
       int index = 0;\r
-      while (index < allFeatures.size())\r
+      while (index < allFeatures.length)\r
       {\r
-        SequenceFeature sf = (SequenceFeature) allFeatures.elementAt(index);\r
+        SequenceFeature sf = allFeatures[index];\r
 \r
         tooltipText.append(sf.getType() + " " + sf.begin + ":" + sf.end);\r
 \r
@@ -723,7 +753,6 @@ public class SeqPanel
 \r
         index++;\r
       }\r
-    }\r
 \r
     if (tooltip == null)\r
     {\r
@@ -735,29 +764,35 @@ public class SeqPanel
     }\r
   }\r
 \r
-  Vector getAllFeaturesAtRes(SequenceI seq, int res)\r
+  SequenceFeature[] findFeaturesAtRes(SequenceI sequence, int res)\r
   {\r
-    Vector allFeatures = new Vector();\r
-    int index = 0;\r
-    if (seq.getSequenceFeatures() != null)\r
+    Vector tmp = new Vector();\r
+    SequenceFeature[] features = sequence.getSequenceFeatures();\r
+    if (features != null)\r
     {\r
-      while (index < seq.getSequenceFeatures().length)\r
+      for (int i = 0; i < features.length; i++)\r
       {\r
-        SequenceFeature sf = seq.getSequenceFeatures()[index];\r
-        if (sf.getBegin() <= res &&\r
-            sf.getEnd() >= res)\r
+        if (av.featuresDisplayed == null\r
+            || !av.featuresDisplayed.containsKey(features[i].getType()))\r
         {\r
-          if (av.featuresDisplayed.containsKey(sf.getType()))\r
-          {\r
-            allFeatures.addElement(sf);\r
-          }\r
+          continue;\r
+        }\r
+\r
+        if ( (features[i].getBegin() <= res) &&\r
+            (features[i].getEnd() >= res))\r
+        {\r
+          tmp.addElement(features[i]);\r
         }\r
-        index++;\r
       }\r
     }\r
-    return allFeatures;\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
@@ -1320,21 +1355,20 @@ public class SeqPanel
     if ( (evt.getModifiers() & InputEvent.BUTTON3_MASK) ==\r
         InputEvent.BUTTON3_MASK)\r
     {\r
-      Vector allFeatures = getAllFeaturesAtRes(sequence,\r
+      SequenceFeature [] allFeatures = findFeaturesAtRes(sequence,\r
                                                sequence.findPosition(res));\r
 \r
       Vector links = null;\r
       if (allFeatures != null)\r
       {\r
-        for (int i = 0; i < allFeatures.size(); i++)\r
+        for (int i = 0; i < allFeatures.length; i++)\r
         {\r
-          SequenceFeature sf = (SequenceFeature) allFeatures.elementAt(i);\r
-          if (sf.links != null)\r
+          if (allFeatures[i].links != null)\r
           {\r
             links = new Vector();\r
-            for (int j = 0; j < sf.links.size(); j++)\r
+            for (int j = 0; j < allFeatures[i].links.size(); j++)\r
             {\r
-              links.addElement(sf.links.elementAt(j));\r
+              links.addElement(allFeatures[i].links.elementAt(j));\r
             }\r
           }\r
         }\r