Does edit affect any groups?
[jalview.git] / src / jalview / appletgui / SeqPanel.java
index ebde2cf..53562cb 100755 (executable)
@@ -445,40 +445,109 @@ public class SeqPanel
   {\r
     if (endEdit == startEdit)\r
     {\r
-      ap.alignFrame.historyList.pop();\r
-      ap.alignFrame.updateEditMenuBar();\r
+        ap.alignFrame.historyList.pop();\r
+        ap.alignFrame.updateEditMenuBar();\r
     }\r
 \r
     av.updateConservation();\r
     av.updateConsensus();\r
 \r
-    // Y O Y CLUSTALX\r
-    ColourSchemeI cs = av.getGlobalColourScheme();\r
-    if (cs.conservationApplied())\r
+\r
+    //Does the edit affect any groups?\r
+    //////////////////////////////\r
+    Vector groupsToUpdate = new Vector();\r
+    SequenceGroup sg = av.getSelectionGroup();\r
+\r
+    int s, g, gSize = av.alignment.getGroups().size();\r
+    if (sg != null)\r
     {\r
-      if (cs instanceof ClustalxColourScheme)\r
+      groupsToUpdate.addElement(av.getSelectionGroup());\r
+      int sSize = sg.getSize();\r
+      for (s = 0; s < sSize; s++)\r
       {\r
-        jalview.analysis.Conservation c = new jalview.analysis.Conservation\r
-            ("All",\r
-             ResidueProperties.propHash, 3,\r
-             av.alignment.getSequences(), 0,\r
-             av.alignment.getWidth() - 1);\r
-        c.calculate();\r
-        c.verdict(false, av.ConsPercGaps);\r
+        SequenceI seq = sg.getSequenceAt(s);\r
 \r
-        ((ClustalxColourScheme)cs).resetClustalX(av.alignment.getSequences(), av.alignment.getWidth());\r
-        cs.setConservation(c);\r
-        av.setGlobalColourScheme(cs);\r
+        for (g = 0; g < gSize; g++)\r
+        {\r
+          SequenceGroup sg2 = (SequenceGroup) av.alignment.getGroups().\r
+              elementAt(\r
+                  g);\r
+          if (sg2.sequences.contains(seq))\r
+          {\r
+            if (!groupsToUpdate.contains(sg2))\r
+              groupsToUpdate.addElement(sg2);\r
+            continue;\r
+          }\r
+        }\r
       }\r
     }\r
+    else\r
+    {\r
+      SequenceI seq = av.alignment.getSequenceAt(startseq);\r
+      for (g = 0; g < gSize; g++)\r
+      {\r
+        SequenceGroup sg2 = (SequenceGroup) av.alignment.getGroups().elementAt(\r
+            g);\r
+        if (sg2.sequences.contains(seq))\r
+        {\r
+          if (!groupsToUpdate.contains(sg2))\r
+            groupsToUpdate.addElement(sg2);\r
+          continue;\r
+        }\r
+      }\r
+    }\r
+\r
+    gSize = groupsToUpdate.size();\r
+    for (g = 0; g < gSize; g++)\r
+    {\r
+      ( (SequenceGroup) groupsToUpdate.elementAt(g)).recalcConservation();\r
+    }\r
+    ////End of updating groups\r
+      //////////////////////////////////////////\r
 \r
-    if (cs instanceof ClustalxColourScheme)\r
+\r
+    // Y O Y CLUSTALX\r
+    ColourSchemeI cs = av.getGlobalColourScheme();\r
+\r
+    if (av.getSelectionGroup() != null)\r
     {\r
-      ( (ClustalxColourScheme) cs).resetClustalX(av.alignment.getSequences(),\r
-                                                 av.alignment.getWidth());\r
-      av.setGlobalColourScheme(cs);\r
+        av.getSelectionGroup().recalcConservation();\r
     }\r
 \r
+    if(cs!=null)\r
+    {\r
+      if (cs.conservationApplied())\r
+      {\r
+        jalview.analysis.Conservation c = new jalview.analysis.Conservation("All",\r
+                                          ResidueProperties.propHash, 3,\r
+                                          av.alignment.getSequences(),\r
+                                          0, av.alignment.getWidth() - 1);\r
+        c.calculate();\r
+        c.verdict(false, av.ConsPercGaps);\r
+\r
+        if (cs instanceof ClustalxColourScheme)\r
+        {\r
+          ClustalxColourScheme cxs = (ClustalxColourScheme) cs;\r
+          cxs.resetClustalX(av.alignment.getSequences(),\r
+                            av.alignment.getWidth());\r
+          cs.setConservation(c);\r
+          av.setGlobalColourScheme(cs);\r
+        }\r
+        else\r
+        {\r
+          cs.setConservation(c);\r
+          av.setGlobalColourScheme(cs);\r
+        }\r
+\r
+      }\r
+\r
+      if (cs instanceof ClustalxColourScheme)\r
+      {\r
+        ( (ClustalxColourScheme) cs).resetClustalX(av.alignment.getSequences(),\r
+                                                   av.alignment.getWidth());\r
+        av.setGlobalColourScheme(cs);\r
+      }\r
+        }\r
   }\r
 \r
 //////////////////////////////////////////\r