X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fcommands%2FEditCommand.java;h=aece057c845053b69bfdfb59bee3c1e364ff8816;hb=a0205942210037198f48eb20480efe88d5eb951e;hp=4cd599249bbbb321f3a2b64515f068cfb42078f2;hpb=4dd6f7576368b0ee67087eadabfd82dd91173694;p=jalview.git diff --git a/src/jalview/commands/EditCommand.java b/src/jalview/commands/EditCommand.java index 4cd5992..aece057 100644 --- a/src/jalview/commands/EditCommand.java +++ b/src/jalview/commands/EditCommand.java @@ -73,7 +73,7 @@ public class EditCommand new Edit(command, seqs, position, number, al)}; } - performEdit(0); + performEdit(0, null); } public EditCommand(String description, @@ -91,7 +91,7 @@ public class EditCommand { new Edit(command, seqs, position, number, al, replace)}; } - performEdit(0); + performEdit(0, null); } final public String getDescription() @@ -109,12 +109,42 @@ public class EditCommand return edits[0].al; } + /** + * append a new editCommand + * Note. this shouldn't be called if the edit is an operation affects more alignment objects than the one referenced + * in al (for example, cut or pasting whole sequences). Use the form with an additional AlignmentI[] views parameter. + * @param command + * @param seqs + * @param position + * @param number + * @param al + * @param performEdit + */ + final public void appendEdit(int command, + SequenceI[] seqs, + int position, + int number, + AlignmentI al, + boolean performEdit) + { + appendEdit(command, seqs, position, number, al, performEdit, null); + } + /** + * append a new edit command with a set of alignment views that may be operated on + * @param command + * @param seqs + * @param position + * @param number + * @param al + * @param performEdit + * @param views + */ final public void appendEdit(int command, SequenceI[] seqs, int position, int number, AlignmentI al, - boolean performEdit) + boolean performEdit, AlignmentI[] views) { Edit edit = new Edit(command, seqs, position, number, al.getGapCharacter()); if (al.getHeight() == seqs.length) @@ -139,11 +169,11 @@ public class EditCommand if (performEdit) { - performEdit(edits.length - 1); + performEdit(edits.length - 1, views); } } - final void performEdit(int commandIndex) + final void performEdit(int commandIndex, AlignmentI[] views) { int eSize = edits.length; for (int e = commandIndex; e < eSize; e++) @@ -157,10 +187,10 @@ public class EditCommand deleteGap(edits[e]); break; case CUT: - cut(edits[e]); + cut(edits[e], views); break; case PASTE: - paste(edits[e]); + paste(edits[e], views); break; case REPLACE: replace(edits[e]); @@ -169,12 +199,12 @@ public class EditCommand } } - final public void doCommand() + final public void doCommand(AlignmentI[] views) { - performEdit(0); + performEdit(0,views); } - final public void undoCommand() + final public void undoCommand(AlignmentI[] views) { int e = 0, eSize = edits.length; for (e = eSize - 1; e > -1; e--) @@ -188,10 +218,10 @@ public class EditCommand insertGap(edits[e]); break; case CUT: - paste(edits[e]); + paste(edits[e], views); break; case PASTE: - cut(edits[e]); + cut(edits[e], views); break; case REPLACE: replace(edits[e]); @@ -209,7 +239,7 @@ public class EditCommand command.gapChar); } - adjustAnnotations(command, true, false); + adjustAnnotations(command, true, false, null); } final void deleteGap(Edit command) @@ -220,10 +250,10 @@ public class EditCommand command.position + command.number); } - adjustAnnotations(command, false, false); + adjustAnnotations(command, false, false, null); } - void cut(Edit command) + void cut(Edit command, AlignmentI[] views) { boolean seqDeleted=false; command.string = new char[command.seqs.length][]; @@ -264,10 +294,10 @@ public class EditCommand } } - adjustAnnotations(command, false, seqDeleted); + adjustAnnotations(command, false, seqDeleted, views); } - void paste(Edit command) + void paste(Edit command, AlignmentI[] views) { StringBuffer tmp; boolean newDSNeeded; @@ -345,7 +375,7 @@ public class EditCommand adjustFeatures(command, i, start, end, true); } } - adjustAnnotations(command, true, seqWasDeleted); + adjustAnnotations(command, true, seqWasDeleted, views); command.string = null; } @@ -371,7 +401,7 @@ public class EditCommand } } - final void adjustAnnotations(Edit command, boolean insert, boolean modifyVisibility) + final void adjustAnnotations(Edit command, boolean insert, boolean modifyVisibility, AlignmentI[] views) { AlignmentAnnotation[] annotations = null; @@ -398,12 +428,55 @@ public class EditCommand // remove rows tmp = command.seqs[s].getAnnotation(); if (tmp!=null) { - command.deletedAnnotationRows.put(command.seqs[s], tmp); + int alen=tmp.length; for (int aa =0; aacommand.position) { + if (copylen>=command.position) { copylen = Math.min(command.number, annotations[a].annotations.length-command.position); if (copylen>0) {