Does edit affect any groups?
authoramwaterhouse <Andrew Waterhouse>
Wed, 24 Aug 2005 10:57:00 +0000 (10:57 +0000)
committeramwaterhouse <Andrew Waterhouse>
Wed, 24 Aug 2005 10:57:00 +0000 (10:57 +0000)
src/jalview/appletgui/SeqPanel.java
src/jalview/gui/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
index 4d5b080..cab15c4 100755 (executable)
@@ -575,51 +575,102 @@ public class SeqPanel extends JPanel
      */\r
     void editOccurred(int i)\r
     {\r
-        if (endEdit == startEdit)\r
+      if (endEdit == startEdit)\r
+      {\r
+        ap.alignFrame.historyList.pop();\r
+        ap.alignFrame.updateEditMenuBar();\r
+      }\r
+\r
+      av.updateConservation();\r
+      av.updateConsensus();\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
+        groupsToUpdate.addElement(av.getSelectionGroup());\r
+        int sSize = sg.getSize();\r
+        for (s = 0; s < sSize; s++)\r
+        {\r
+          SequenceI seq = sg.getSequenceAt(s);\r
+\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
-            ap.alignFrame.historyList.pop();\r
-            ap.alignFrame.updateEditMenuBar();\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
-        av.updateConservation();\r
-        av.updateConsensus();\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
         // Y O Y CLUSTALX\r
         ColourSchemeI cs = av.getGlobalColourScheme();\r
-\r
-        if (av.getSelectionGroup() != null)\r
-        {\r
-            av.getSelectionGroup().recalcConservation();\r
-        }\r
-\r
-        if (cs.conservationApplied())\r
+        if(cs!=null)\r
         {\r
+          if (cs.conservationApplied())\r
+          {\r
             Conservation c = new Conservation("All",\r
-                    ResidueProperties.propHash, 3, av.alignment.getSequences(),\r
-                    0, av.alignment.getWidth() - 1);\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
+              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
+              cs.setConservation(c);\r
+              av.setGlobalColourScheme(cs);\r
             }\r
-        }\r
 \r
-        if (cs instanceof ClustalxColourScheme)\r
-        {\r
-            ((ClustalxColourScheme) cs).resetClustalX(av.alignment.getSequences(),\r
-                av.alignment.getWidth());\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