From: amwaterhouse Date: Tue, 24 Oct 2006 11:24:39 +0000 (+0000) Subject: HistoryItem replaced by CommandI X-Git-Tag: Release_2_2~242 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=0c5b013392fa01e96dbff612eb1583129f153ad5;p=jalview.git HistoryItem replaced by CommandI --- diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 73872d0..260085d 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -34,9 +34,9 @@ import jalview.io.*; import jalview.jbgui.*; import jalview.schemes.*; import jalview.util.ShiftList; +import jalview.commands.*; import jalview.ws.*; import java.awt.dnd.*; -import org.biojava.dasobert.eventmodel.*; /** * DOCUMENT ME! @@ -824,12 +824,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ void updateEditMenuBar() { - /* if (historyList.size() > 0) + if (historyList.size() > 0) { undoMenuItem.setEnabled(true); - HistoryItem hi = (HistoryItem) historyList.peek(); - undoMenuItem.setText("Undo " + hi.getDescription()); + CommandI command = (CommandI) historyList.peek(); + undoMenuItem.setText("Undo " + command.getDescription()); } else { @@ -841,28 +841,26 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { redoMenuItem.setEnabled(true); - HistoryItem hi = (HistoryItem) redoList.peek(); - redoMenuItem.setText("Redo " + hi.getDescription()); + CommandI command = (CommandI) redoList.peek(); + redoMenuItem.setText("Redo " + command.getDescription()); } else { redoMenuItem.setEnabled(false); redoMenuItem.setText("Redo"); - }*/ + } } - /** - * DOCUMENT ME! - * - * @param hi DOCUMENT ME! - */ - public void addHistoryItem(HistoryItem hi) + + public void addHistoryItem(CommandI command) { - historyList.push(hi); + historyList.push(command); redoList.clear(); updateEditMenuBar(); } + + /** * DOCUMENT ME! * @@ -870,12 +868,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ protected void undoMenuItem_actionPerformed(ActionEvent e) { - HistoryItem nh,hi = (HistoryItem) historyList.pop(); - redoList.push(nh=new HistoryItem(hi.getDescription(), viewport.alignment, - HistoryItem.HIDE)); - if (hi.alColumnChanges!=null) - nh.alColumnChanges = hi.alColumnChanges.getInverse(); - restoreHistoryItem(hi); + CommandI command = (CommandI)historyList.pop(); + redoList.push(command); + command.undoCommand(); + + // HistoryItem nh,hi = (HistoryItem) historyList.pop(); + // redoList.push(nh=new HistoryItem(hi.getDescription(), viewport.alignment, + // HistoryItem.HIDE)); + // if (hi.alColumnChanges!=null) + // nh.alColumnChanges = hi.alColumnChanges.getInverse(); + // restoreHistoryItem(hi); + updateEditMenuBar(); viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); } @@ -886,27 +889,20 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ protected void redoMenuItem_actionPerformed(ActionEvent e) { - HistoryItem nh,hi = (HistoryItem) redoList.pop(); - historyList.push(nh=new HistoryItem(hi.getDescription(), viewport.alignment, - HistoryItem.HIDE)); - if (hi.alColumnChanges!=null) - nh.alColumnChanges=hi.alColumnChanges.getInverse(); - restoreHistoryItem(hi); + CommandI command = (CommandI) redoList.pop(); + historyList.push(command); + command.doCommand(); + + // HistoryItem nh,hi = (HistoryItem) redoList.pop(); + // historyList.push(nh=new HistoryItem(hi.getDescription(), viewport.alignment, + // HistoryItem.HIDE)); + // if (hi.alColumnChanges!=null) + // nh.alColumnChanges=hi.alColumnChanges.getInverse(); + // restoreHistoryItem(hi); updateEditMenuBar(); viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); } - // used by undo and redo - void restoreHistoryItem(HistoryItem hi) - { - - hi.restore(viewport.getColumnSelection()); - - updateEditMenuBar(); - - viewport.firePropertyChange("alignment", null, - viewport.getAlignment().getSequences()); - } /** * DOCUMENT ME! @@ -1069,8 +1065,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ protected void pasteThis_actionPerformed(ActionEvent e) { - addHistoryItem(new HistoryItem("Paste Sequences", viewport.alignment, - HistoryItem.PASTE)); paste(false); } @@ -1150,19 +1144,33 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener alignment = viewport.getAlignment(); //!newAlignment + SequenceI [] newseqs = new SequenceI[sequences.length]; for (int i = 0; i < sequences.length; i++) { - Sequence newseq = new Sequence(sequences[i].getName(), + newseqs[i] = new Sequence(sequences[i].getName(), sequences[i].getSequence(), sequences[i].getStart(), sequences[i].getEnd()); - alignment.addSequence(newseq); + alignment.addSequence(newseqs[i]); PaintRefresher.Refresh(alignPanel, alignPanel.av.getSequenceSetId(), - null,newseq); + null,newseqs[i]); } + /* + //ADD HISTORY ITEM + */ + addHistoryItem(new EditCommand( + "Add sequences", + EditCommand.PASTE, + newseqs, + 0, + alignment.getWidth(), + alignment) + ); + + viewport.setEndSeq(alignment.getHeight()); alignment.getWidth(); viewport.firePropertyChange("alignment", null, alignment.getSequences()); @@ -1265,37 +1273,48 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener protected void delete_actionPerformed(ActionEvent e) { - if (viewport.getSelectionGroup() == null) + SequenceGroup sg = viewport.getSelectionGroup(); + if (sg == null) { return; } + Vector seqs = new Vector(); + int cutLength = sg.getEndRes()-sg.getStartRes()+1; + SequenceI seq; + for (int i = 0; i < sg.getSize(false); i++) + { + seq = sg.getSequenceAt(i); + seqs.addElement(seq); + if(seq.getLength()<=cutLength) + PaintRefresher.Refresh(alignPanel, + alignPanel.av.getSequenceSetId(), + seq, + null); + } - SequenceGroup sg = viewport.getSelectionGroup(); - - - addHistoryItem(new HistoryItem("Delete Sequences", viewport.alignment, - HistoryItem.HIDE)); + // If the cut affects all sequences, remove highlighted columns + if (sg.getSize(false) == viewport.alignment.getHeight()) + { + viewport.getColumnSelection().removeElements(sg.getStartRes(), + sg.getEndRes() + 1); + } - for (int i = 0; i < sg.getSize(false); i++) - { - SequenceI seq = sg.getSequenceAt(i); - seq.deleteChars(sg.getStartRes(), sg.getEndRes() + 1); + SequenceI [] cut = new SequenceI[seqs.size()]; + for(int i=0; i 0) - { - HistoryItem edit; - addHistoryItem(edit=new HistoryItem("Remove Left", viewport.alignment, - HistoryItem.HIDE)); - - int min = colSel.getMin(); - viewport.getAlignment().trimLeft(min); - colSel.compensateForEdit(0, min); - edit.addShift(0,min); - if (viewport.getSelectionGroup() != null) - { - viewport.getSelectionGroup().adjustForRemoveLeft(min); - } - - Vector groups = viewport.alignment.getGroups(); - - for (int i = 0; i < groups.size(); i++) - { - SequenceGroup sg = (SequenceGroup) groups.get(i); - - if (!sg.adjustForRemoveLeft(min)) - { - viewport.alignment.deleteGroup(sg); - } - } - - viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); - } + trimAlignment(true); } /** @@ -1451,21 +1438,64 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ public void remove2RightMenuItem_actionPerformed(ActionEvent e) { + trimAlignment(false); + } + + void trimAlignment(boolean trimLeft) + { ColumnSelection colSel = viewport.getColumnSelection(); + int column; if (colSel.size() > 0) { - addHistoryItem(new HistoryItem("Remove Right", viewport.alignment, - HistoryItem.HIDE)); + if(trimLeft) + column = colSel.getMin(); + else + column = colSel.getMax(); - int max = colSel.getMax(); - viewport.getAlignment().trimRight(max); - // TODO: delete hidden column entries in colSel to right of max - // TODO: record hidden columns in history for undo. - if (viewport.getSelectionGroup() != null) + SequenceI [] seqs; + if(viewport.getSelectionGroup()!=null) + seqs = viewport.getSelectionGroup().getSequencesAsArray(true); + else + seqs = viewport.alignment.getSequencesArray(); + + + TrimRegionCommand trimRegion; + + if(trimLeft) { - viewport.getSelectionGroup().adjustForRemoveRight(max); + trimRegion = new TrimRegionCommand("Remove Left", + TrimRegionCommand.TRIM_LEFT, + seqs, + column, + viewport.alignment, + viewport.colSel); + + colSel.compensateForEdit(0, column); + + //AW edit.addShift(0,min); + if (viewport.getSelectionGroup() != null) + { + viewport.getSelectionGroup().adjustForRemoveLeft(column); + } } + else + { + trimRegion = new TrimRegionCommand("Remove Left", + TrimRegionCommand.TRIM_RIGHT, + seqs, + column, + viewport.alignment, + viewport.colSel); + // TODO: delete hidden column entries in colSel to right of max + // TODO: record hidden columns in history for undo. + if (viewport.getSelectionGroup() != null) + { + viewport.getSelectionGroup().adjustForRemoveRight(column); + } + } + + addHistoryItem(trimRegion); Vector groups = viewport.alignment.getGroups(); @@ -1473,7 +1503,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { SequenceGroup sg = (SequenceGroup) groups.get(i); - if (!sg.adjustForRemoveRight(max)) + if ( (trimLeft && !sg.adjustForRemoveLeft(column)) + || (!trimLeft && !sg.adjustForRemoveRight(column))) { viewport.alignment.deleteGroup(sg); } @@ -1490,20 +1521,34 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ public void removeGappedColumnMenuItem_actionPerformed(ActionEvent e) { - HistoryItem edit; - addHistoryItem(edit=new HistoryItem("Remove Gapped Columns", - viewport.alignment, HistoryItem.HIDE)); + int start = 0, end = viewport.alignment.getWidth(); + + SequenceI[] seqs; + if (viewport.getSelectionGroup() != null) + { + seqs = viewport.getSelectionGroup().getSequencesAsArray(true); + start = viewport.getSelectionGroup().getStartRes(); + end = viewport.getSelectionGroup().getEndRes(); + } + else + seqs = viewport.alignment.getSequencesArray(); + + + addHistoryItem(new RemoveGapColCommand("Remove Gapped Columns", + seqs, + start, end, + viewport.getGapCharacter())); //This is to maintain viewport position on first residue //of first sequence SequenceI seq = viewport.alignment.getSequenceAt(0); int startRes = seq.findPosition(viewport.startRes); - ShiftList shifts; - viewport.getAlignment().removeGaps(shifts=new ShiftList()); - edit.alColumnChanges=shifts.getInverse(); - if (viewport.hasHiddenColumns) - viewport.getColumnSelection().compensateForEdits(shifts); - viewport.setStartRes(seq.findIndex(startRes)-1); + // ShiftList shifts; + // viewport.getAlignment().removeGaps(shifts=new ShiftList()); + // edit.alColumnChanges=shifts.getInverse(); + // if (viewport.hasHiddenColumns) + // viewport.getColumnSelection().compensateForEdits(shifts); + viewport.setStartRes(seq.findIndex(startRes)-1); viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); } @@ -1515,71 +1560,27 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ public void removeAllGapsMenuItem_actionPerformed(ActionEvent e) { - // TODO: hidden regions should not be touched by removeAllGaps - a minimal number of gaps will remain in alignment segments containing uneven length subsequences - // TODO: columnSelection.compensateforedits should be called (and passed to history item) - addHistoryItem(new HistoryItem("Remove Gaps", viewport.alignment, - HistoryItem.HIDE)); + int start = 0, end = viewport.alignment.getWidth(); + + SequenceI[] seqs; + if (viewport.getSelectionGroup() != null) + { + seqs = viewport.getSelectionGroup().getSequencesAsArray(true); + start = viewport.getSelectionGroup().getStartRes(); + end = viewport.getSelectionGroup().getEndRes(); + } + else + seqs = viewport.alignment.getSequencesArray(); //This is to maintain viewport position on first residue //of first sequence SequenceI seq = viewport.alignment.getSequenceAt(0); int startRes = seq.findPosition(viewport.startRes); - - SequenceI current; - - Vector seqs = null; - - int start = 0; - int end = viewport.alignment.getWidth(); - - if (viewport.getSelectionGroup() != null - && viewport.getSelectionGroup().getSequences(true) != null - && viewport.getSelectionGroup().getSize(true) > 0) - { - seqs = viewport.getSelectionGroup().getSequences(true); - start = viewport.getSelectionGroup().getStartRes(); - end = viewport.getSelectionGroup().getEndRes()+1; - } - else - { - seqs = viewport.alignment.getSequences(); - } - /* Commented out regions below are partial implementation of todo above. - * divide start,end into visible chunks, and for each: - int diff=end-start+1; - int diffmax=0; - int dr[] = new int[seqs.size()]; - */ - for (int i = 0; i < seqs.size(); i++) - { - current = (SequenceI) seqs.elementAt(i); - //dr[i]= - current.removeGaps(start, end); - /*if (d0) { - // record shift for history. - editgaps.addShift(start, diff); - if (viewport.hasHiddenColumns && diffmax>diff) { - // pad sequence - StringBuffer gaps=new StringBuffer(diffmax); - for (int i=0,j=diffmax-diff; i0) { - String sq = current.getSequence(); - current.setSequence(sq.substring(0, hcend-dr[i])+gaps.substring(0, dr[i]-diff)+sq.substring()); - } - } - } - }*/ + addHistoryItem(new RemoveGapsCommand("Remove Gaps", + seqs, + start, end, + viewport.getGapCharacter())); viewport.setStartRes(seq.findIndex(startRes)-1); @@ -1597,7 +1598,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener ap = (AlignmentPanel) alignPanels.elementAt(i); av = ap.av; - if (av.padGaps) + if (av.padGaps) av.getAlignment().padGaps(); if (av.hconsensus != null && av.autoCalculateConsensus) @@ -1665,8 +1666,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ public void padGapsMenuitem_actionPerformed(ActionEvent e) { - addHistoryItem(new HistoryItem("Pad Gaps", viewport.alignment, - HistoryItem.HIDE)); + // addHistoryItem(new HistoryItem("Pad Gaps", viewport.alignment, + // HistoryItem.HIDE)); viewport.padGaps = padGapsMenuitem.isSelected(); @@ -2332,10 +2333,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ public void sortPairwiseMenuItem_actionPerformed(ActionEvent e) { - addHistoryItem(new HistoryItem("Pairwise Sort", viewport.alignment, - HistoryItem.SORT)); + SequenceI [] oldOrder = viewport.getAlignment().getSequencesArray(); AlignmentSorter.sortByPID(viewport.getAlignment(), viewport.getAlignment().getSequenceAt(0)); + addHistoryItem(new OrderCommand("Pairwise Sort", oldOrder, viewport.alignment)); alignPanel.repaint(); } @@ -2346,9 +2347,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ public void sortIDMenuItem_actionPerformed(ActionEvent e) { - addHistoryItem(new HistoryItem("ID Sort", viewport.alignment, - HistoryItem.SORT)); + SequenceI [] oldOrder = viewport.getAlignment().getSequencesArray(); AlignmentSorter.sortByID(viewport.getAlignment()); + addHistoryItem(new OrderCommand("ID Sort", oldOrder, viewport.alignment)); alignPanel.repaint(); } @@ -2359,10 +2360,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener */ public void sortGroupMenuItem_actionPerformed(ActionEvent e) { - addHistoryItem(new HistoryItem("Group Sort", viewport.alignment, - HistoryItem.SORT)); - + SequenceI [] oldOrder = viewport.getAlignment().getSequencesArray(); AlignmentSorter.sortByGroup(viewport.getAlignment()); + addHistoryItem(new OrderCommand("Group Sort", oldOrder, viewport.alignment)); + alignPanel.repaint(); } @@ -2560,11 +2561,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { public void actionPerformed(ActionEvent e) { - addHistoryItem(new HistoryItem("Sort", viewport.alignment, - HistoryItem.SORT)); + SequenceI [] oldOrder = viewport.getAlignment().getSequencesArray(); // TODO: JBPNote - have to map order entries to curent SequenceI pointers AlignmentSorter.sortBy(viewport.getAlignment(), order); + + addHistoryItem(new OrderCommand(order.getName(), oldOrder, viewport.alignment)); + alignPanel.repaint(); } }); @@ -2595,10 +2598,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener { public void actionPerformed(ActionEvent e) { - addHistoryItem(new HistoryItem("Tree Sort", - viewport.alignment, HistoryItem.SORT)); + SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); AlignmentSorter.sortByTree(viewport.getAlignment(), treePanel.getTree()); + + addHistoryItem(new OrderCommand("Tree Sort", oldOrder, viewport.alignment)); + + alignPanel.repaint(); } });