EditCommand added to AlignFrame
[jalview.git] / src / jalview / gui / RedundancyPanel.java
index fa6e616..3df55c1 100755 (executable)
 package jalview.gui;\r
 \r
 import jalview.datamodel.*;\r
-\r
 import jalview.jbgui.*;\r
+import jalview.util.Comparison;\r
+import jalview.commands.*;\r
 \r
 import java.awt.event.*;\r
 \r
 import java.util.*;\r
 \r
 import javax.swing.event.*;\r
-import jalview.util.Comparison;\r
+\r
 import javax.swing.*;\r
 \r
 \r
@@ -223,16 +224,6 @@ public class RedundancyPanel extends GSliderPanel implements Runnable
      */\r
     public void applyButton_actionPerformed(ActionEvent e)\r
     {\r
-        historyList.push(new HistoryItem("Remove redundancy",\r
-                    ap.av.alignment, HistoryItem.HIDE));\r
-\r
-        if ((historyList.size() == 1) ||\r
-                !af.historyList.contains(historyList.firstElement()))\r
-        {\r
-            af.addHistoryItem((HistoryItem) historyList.firstElement());\r
-            af.updateEditMenuBar();\r
-        }\r
-\r
         Vector del = new Vector();\r
 \r
         undoButton.setEnabled(true);\r
@@ -244,30 +235,47 @@ public class RedundancyPanel extends GSliderPanel implements Runnable
         {\r
           if (value <= redundancy[i])\r
           {\r
-            SequenceI seq = originalSequences[i];\r
-            ap.av.alignment.deleteSequence(seq);\r
-            del.add(seq);\r
-            if (sg != null)\r
-            {\r
-              sg.deleteSequence(seq, false);\r
-            }\r
+            del.addElement(originalSequences[i]);\r
           }\r
         }\r
 \r
-\r
         // This has to be done before the restoreHistoryItem method of alignFrame will\r
         // actually restore these sequences.\r
         if (del.size() > 0)\r
         {\r
-            for (int i = 0, j = del.size(); i < j; i++)\r
+          SequenceI [] deleted = new SequenceI[del.size()];\r
+\r
+          int width = 0;\r
+          for (int i = 0; i < del.size(); i++)\r
+          {\r
+            deleted[i] = (SequenceI)del.elementAt(i);\r
+            if(deleted[i].getLength()>width)\r
+              width = deleted[i].getLength();\r
+          }\r
+\r
+          EditCommand cut = new EditCommand("Remove Redundancy",\r
+              EditCommand.CUT, deleted,0,width,ap.av.alignment);\r
+\r
+          for (int i = 0; i < del.size(); i++)\r
+          {\r
+            ap.av.alignment.deleteSequence( deleted[i] );\r
+            PaintRefresher.Refresh(this,\r
+                                   ap.av.getSequenceSetId(),\r
+                                   deleted[i], null);\r
+            if (sg != null)\r
             {\r
-                SequenceI sq = (SequenceI) del.elementAt(i);\r
-                sq.deleteChars(0, sq.getLength());\r
+              sg.deleteSequence(deleted[i], false);\r
             }\r
+          }\r
+\r
+          historyList.push(cut);\r
+\r
+          ap.alignFrame.addHistoryItem(cut);\r
+\r
+          ap.av.firePropertyChange("alignment", null, ap.av.getAlignment().getSequences());\r
         }\r
 \r
-        ap.av.firePropertyChange("alignment", null, ap.av.getAlignment().getSequences());\r
-        af.updateEditMenuBar();\r
+\r
     }\r
 \r
 \r
@@ -278,18 +286,20 @@ public class RedundancyPanel extends GSliderPanel implements Runnable
      */\r
     public void undoButton_actionPerformed(ActionEvent e)\r
     {\r
-      HistoryItem hi = (HistoryItem) historyList.pop();\r
-      af.restoreHistoryItem(hi);\r
+      CommandI command = (CommandI) historyList.pop();\r
+      command.undoCommand();\r
+\r
+      if (af.historyList.contains(command))\r
+      {\r
+        af.historyList.remove(command);\r
+        af.updateEditMenuBar();\r
+      }\r
+\r
+      ap.repaint();\r
 \r
       if (historyList.size() == 0)\r
       {\r
         undoButton.setEnabled(false);\r
-\r
-        if (af.historyList.contains(hi))\r
-        {\r
-          af.historyList.remove(hi);\r
-          af.updateEditMenuBar();\r
-        }\r
       }\r
     }\r
 \r