From: amwaterhouse Date: Mon, 23 May 2005 09:27:33 +0000 (+0000) Subject: historyitem added X-Git-Tag: Release_2_0~238 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=4c61bddcb9e367db694e3f2bde9c4d25f114f50b;p=jalview.git historyitem added --- diff --git a/src/jalview/appletgui/AlignFrame.java b/src/jalview/appletgui/AlignFrame.java index dd4ff38..0003d14 100755 --- a/src/jalview/appletgui/AlignFrame.java +++ b/src/jalview/appletgui/AlignFrame.java @@ -101,75 +101,94 @@ public class AlignFrame extends GAlignFrame Stack redoList = new Stack(); void updateEditMenuBar() - { - if(historyList.size()>0) + { + if(historyList.size()>0) + { + undoMenuItem.setEnabled(true); + HistoryItem hi = (HistoryItem)historyList.peek(); + undoMenuItem.setLabel("Undo "+hi.getDescription()); + } + else { - undoMenuItem.setEnabled(true); - Object [] history = (Object[])historyList.elementAt(0); - undoMenuItem.setLabel("Undo "+history[0]); + undoMenuItem.setEnabled(false); + undoMenuItem.setLabel("Undo"); } - else - { - undoMenuItem.setEnabled(false); - undoMenuItem.setLabel("Undo"); - } - if(redoList.size()>0) + if(redoList.size()>0) + { + redoMenuItem.setEnabled(true); + HistoryItem hi = (HistoryItem)redoList.peek(); + redoMenuItem.setLabel("Redo "+hi.getDescription()); + } + else { - redoMenuItem.setEnabled(true); - Object [] history = (Object[])redoList.elementAt(0); - redoMenuItem.setLabel("Redo "+history[0]); + redoMenuItem.setEnabled(false); + redoMenuItem.setLabel("Redo"); } - else - { - redoMenuItem.setEnabled(false); - redoMenuItem.setLabel("Redo"); - } - } + } - public void addHistoryItem(String type) - { - // must make sure we add new sequence objects her, not refs to the existing sequences - redoList.removeAllElements(); - SequenceI[] seq = new SequenceI[viewport.getAlignment().getHeight()]; - for(int i=0; ihi.getSequences().size()-1; i--) + viewport.alignment.deleteSequence(i); + } + } - AlignmentAnnotation[] old = viewport.alignment.getAlignmentAnnotation(); - viewport.setAlignment(new Alignment(seq)); - updateEditMenuBar(); - for (int i = 0; i < old.length; i++) - viewport.alignment.addAnnotation(old[i]); + updateEditMenuBar(); + + viewport.updateConsensus(); + viewport.updateConservation(); + alignPanel.repaint(); + } - viewport.updateConservation(); - viewport.updateConsensus(); - alignPanel.repaint(); - } public void moveSelectedSequences(boolean up) { @@ -261,7 +280,7 @@ public class AlignFrame extends GAlignFrame protected void pasteThis_actionPerformed(ActionEvent e) { - addHistoryItem("Paste"); + addHistoryItem(new HistoryItem("Paste Sequences", viewport.alignment, HistoryItem.PASTE)); paste(false); } @@ -322,7 +341,7 @@ public class AlignFrame extends GAlignFrame protected void delete_actionPerformed(ActionEvent e) { - addHistoryItem("Delete"); + addHistoryItem(new HistoryItem("Delete Sequences", viewport.alignment, HistoryItem.HIDE)); if (viewport.getSelectionGroup() == null) return; @@ -355,23 +374,6 @@ public class AlignFrame extends GAlignFrame - protected void redoMenuItem_actionPerformed(ActionEvent e) - { - Object [] history = (Object[])redoList.pop(); - SequenceI[] seq = (SequenceI[]) history[1]; - - AlignmentAnnotation[] old = viewport.alignment.getAlignmentAnnotation(); - viewport.setAlignment(new Alignment(seq)); - for (int i = 0; i < old.length; i++) - viewport.alignment.addAnnotation(old[i]); - - viewport.updateConservation(); - viewport.updateConsensus(); - updateEditMenuBar(); - alignPanel.repaint(); - } - - protected void deleteGroups_actionPerformed(ActionEvent e) { viewport.alignment.deleteAllGroups(); @@ -412,10 +414,11 @@ public class AlignFrame extends GAlignFrame public void remove2LeftMenuItem_actionPerformed(ActionEvent e) { - addHistoryItem("delete columns"); ColumnSelection colSel = viewport.getColumnSelection(); if (colSel.size() > 0) { + addHistoryItem(new HistoryItem("Remove Left",viewport.alignment, + HistoryItem.HIDE)); int min = colSel.getMin(); viewport.getAlignment().trimLeft(min); colSel.compensateForEdit(0,min); @@ -437,10 +440,11 @@ public class AlignFrame extends GAlignFrame public void remove2RightMenuItem_actionPerformed(ActionEvent e) { - addHistoryItem("delete columns"); ColumnSelection colSel = viewport.getColumnSelection(); if (colSel.size() > 0) { + addHistoryItem(new HistoryItem("Remove Right",viewport.alignment, + HistoryItem.HIDE)); int max = colSel.getMax(); viewport.getAlignment().trimRight(max); if(viewport.getSelectionGroup()!=null) @@ -463,7 +467,9 @@ public class AlignFrame extends GAlignFrame public void removeGappedColumnMenuItem_actionPerformed(ActionEvent e) { - addHistoryItem("delete gapped columns"); + addHistoryItem(new HistoryItem("Remove Gapped Columns", + viewport.alignment, + HistoryItem.HIDE)); viewport.getAlignment().removeGaps(); viewport.updateConservation(); viewport.updateConsensus(); @@ -472,7 +478,9 @@ public class AlignFrame extends GAlignFrame public void removeAllGapsMenuItem_actionPerformed(ActionEvent e) { - addHistoryItem("delete all gaps"); + addHistoryItem(new HistoryItem("Remove Gaps", + viewport.alignment, + HistoryItem.HIDE)); SequenceI current; int jSize; for (int i=0; i < viewport.getAlignment().getSequences().size();i++) @@ -860,21 +868,21 @@ public class AlignFrame extends GAlignFrame public void sortPairwiseMenuItem_actionPerformed(ActionEvent e) { - addHistoryItem("sort"); + addHistoryItem(new HistoryItem("Pairwise Sort", viewport.alignment, HistoryItem.SORT)); AlignmentSorter.sortByPID(viewport.getAlignment(), viewport.getAlignment().getSequenceAt(0)); alignPanel.repaint(); } public void sortIDMenuItem_actionPerformed(ActionEvent e) { - addHistoryItem("sort"); + addHistoryItem(new HistoryItem("ID Sort", viewport.alignment, HistoryItem.SORT)); AlignmentSorter.sortByID( viewport.getAlignment() ); alignPanel.repaint(); } public void sortGroupMenuItem_actionPerformed(ActionEvent e) { - addHistoryItem("sort"); + addHistoryItem(new HistoryItem("Group Sort", viewport.alignment, HistoryItem.SORT)); AlignmentSorter.sortByGroup(viewport.getAlignment()); AlignmentSorter.sortGroups(viewport.getAlignment()); alignPanel.repaint(); @@ -976,7 +984,8 @@ public class AlignFrame extends GAlignFrame { public void actionPerformed(ActionEvent e) { - addHistoryItem("sort"); + addHistoryItem(new HistoryItem("Sort", viewport.alignment, + HistoryItem.SORT)); AlignmentSorter.sortByTree(viewport.getAlignment(), treePanel.getTree()); alignPanel.repaint(); } diff --git a/src/jalview/appletgui/SeqPanel.java b/src/jalview/appletgui/SeqPanel.java index e6e02c5..27250cd 100755 --- a/src/jalview/appletgui/SeqPanel.java +++ b/src/jalview/appletgui/SeqPanel.java @@ -15,6 +15,8 @@ public class SeqPanel extends Panel protected int lastres; protected int startseq; + int startEdit=-1; + int endEdit=-1; protected AlignViewport av; @@ -24,6 +26,10 @@ public class SeqPanel extends Panel ScrollThread scrollThread = null; boolean mouseDragging = false; + boolean editingSeqs = false; + boolean groupEditing = false; + + public SeqPanel(AlignViewport avp, AlignmentPanel p) { this.av = avp; @@ -46,7 +52,7 @@ public class SeqPanel extends Panel { if(av.getWrapAlignment()) return; - if(evt.isShiftDown() || evt.isAltDown() || evt.isControlDown()) + if( editingSeqs ) doMouseDragged(evt); else doMouseDraggedDefineMode(evt); @@ -59,32 +65,38 @@ public class SeqPanel extends Panel { if(av.getWrapAlignment()) return; - if(evt.isShiftDown() || evt.isAltDown() || evt.isControlDown()) + if(editingSeqs) doMouseReleased(evt); else doMouseReleasedDefineMode(evt); + } public void mousePressed(MouseEvent evt) { if(av.getWrapAlignment()) return; + System.out.println("here"); if(evt.isShiftDown() || evt.isAltDown() || evt.isControlDown()) + { + if(evt.isAltDown() || evt.isControlDown()) + groupEditing = true; + + editingSeqs = true; doMousePressed(evt); + } else doMousePressedDefineMode(evt); } public void mouseExited(MouseEvent evt) { - if (av.getWrapAlignment() || evt.isShiftDown() || evt.isAltDown() || - evt.isControlDown()) + if (av.getWrapAlignment() || editingSeqs) return; doMouseExitedDefineMode(evt); } public void mouseEntered(MouseEvent evt) { - if (av.getWrapAlignment() || evt.isShiftDown() || evt.isAltDown() || - evt.isControlDown()) + if (av.getWrapAlignment() || editingSeqs) return; doMouseEnteredDefineMode(evt); } @@ -96,18 +108,20 @@ public class SeqPanel extends Panel public void doMouseReleased(MouseEvent evt) { - startseq = -1; - lastres = -1; if(seqEditOccurred>-1) - updateConservation(seqEditOccurred); + editOccurred(seqEditOccurred); + startseq = -1; + lastres = -1; seqEditOccurred = -1; - + editingSeqs = false; + groupEditing = false; ap.repaint(); } public void doMousePressed(MouseEvent evt) { - ap.alignFrame.addHistoryItem("sequence edit"); + ap.alignFrame.addHistoryItem( new HistoryItem( + "Edit Sequence",av.alignment, HistoryItem.EDIT)); int seq; int res; @@ -221,98 +235,107 @@ public class SeqPanel extends Panel if (res != lastres) - { - // Group editing - if (evt.isAltDown() || evt.isControlDown()) - { - SequenceGroup sg = av.getSelectionGroup(); - if(sg==null) - { - lastres=-1; - return; - } - - // drag to right - if(dragRight) - sg.setEndRes(sg.getEndRes() + (res-lastres)); - - // drag to left - else - { - /// Are we able to delete? - // ie are all columns blank? - boolean deleteAllowed = false; - for (int s = 0; s < sg.getSize(); s++) - { - SequenceI seq = sg.getSequenceAt(s); - for (int j=res; jj) - deleteChar(res, k); - } - } - } - } - else /////Editing a single sequence/////////// - { - if (res < av.getAlignment().getWidth() && res > lastres) - { - // dragging to the right - for (int j = lastres; j < res; j++) - insertChar(j, startseq); - } - else if (res < av.getAlignment().getWidth() && res < lastres) - { - // dragging to the left - for (int j = lastres; j > res; j--) - { - deleteChar(res, startseq); - } - } - - } - } + { + // Group editing + if (groupEditing) + { + SequenceGroup sg = av.getSelectionGroup(); + if(sg==null) + { + lastres=-1; + return; + } - lastres = res; + // drag to right + if(dragRight) + sg.setEndRes(sg.getEndRes() + (res-lastres)); + + // drag to left + else + { + /// Are we able to delete? + // ie are all columns blank? + boolean deleteAllowed = false; + for (int s = 0; s < sg.getSize(); s++) + { + SequenceI seq = sg.getSequenceAt(s); + for (int j=res; jj) + deleteChar(res, k); + } + } + } + } + else /////Editing a single sequence/////////// + { + if (res < av.getAlignment().getWidth() && res > lastres) + { + // dragging to the right + for (int j = lastres; j < res; j++) + insertChar(j, startseq); + } + else if (res < av.getAlignment().getWidth() && res < lastres) + { + // dragging to the left + for (int j = lastres; j > res; j--) + { + if( jalview.util.Comparison.isGap( + av.alignment.getSequenceAt(startseq).getSequence().charAt(res))) + + deleteChar(res, startseq); + else + { + + break; + } + } + } + + } + } + + endEdit = res; + lastres = res; seqCanvas.repaint(); } @@ -330,17 +353,21 @@ public class SeqPanel extends Panel public void deleteChar(int j, int seq) { - if ( jalview.util.Comparison.isGap( av.alignment.getSequenceAt(seq).getSequence().charAt(j))) - av.alignment.getSequenceAt(seq).deleteCharAt(j); - + av.alignment.getSequenceAt(seq).deleteCharAt(j); + seqEditOccurred=seq; av.alignment.getWidth(); repaint(); - seqEditOccurred=seq; } - void updateConservation(int i) + void editOccurred(int i) { + if(endEdit==startEdit) + { + ap.alignFrame.historyList.pop(); + ap.alignFrame.updateEditMenuBar(); + } + av.updateConservation(); av.updateConsensus(); @@ -352,6 +379,7 @@ public class SeqPanel extends Panel cs = new ClustalxColourScheme(av.alignment.getSequences(), av.alignment.getWidth()); ap.alignFrame.changeColour(cs); + } ////////////////////////////////////////// diff --git a/src/jalview/datamodel/HistoryItem.java b/src/jalview/datamodel/HistoryItem.java new file mode 100755 index 0000000..3a5b180 --- /dev/null +++ b/src/jalview/datamodel/HistoryItem.java @@ -0,0 +1,52 @@ +package jalview.datamodel; + +import java.util.*; + +public class HistoryItem +{ + public static final int EDIT = 0; + public static final int SORT = 1; + public static final int HIDE = 2; + public static final int PASTE= 3; + + final int type; + Vector sequences; + Vector alignIndex; + String description; + Vector hiddenSeqs; + + public HistoryItem(String description, AlignmentI al, int type) + { + this.type = type; + this.description = description; + sequences = new Vector(); + alignIndex = new Vector(); + hiddenSeqs = new Vector(); + + for (int i = 0; i < al.getHeight(); i++) + { + SequenceI seq = al.getSequenceAt(i); + sequences.addElement(seq); + alignIndex.addElement(i + ""); + hiddenSeqs.addElement(seq.getSequence().toString()); + } + } + + public int getType() + {return type;} + + public Vector getSequences() + {return sequences;} + + public String getDescription() + {return description; } + + public Vector getHidden() + { return hiddenSeqs; } + + public int getAlignIndex(int seq) + { + return Integer.parseInt(alignIndex.elementAt(seq).toString()); + } + +} diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index b60ee62..63b3787 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -171,75 +171,94 @@ public class AlignFrame extends GAlignFrame Stack redoList = new Stack(); void updateEditMenuBar() - { - if(historyList.size()>0) + { + if(historyList.size()>0) + { + undoMenuItem.setEnabled(true); + HistoryItem hi = (HistoryItem)historyList.peek(); + undoMenuItem.setText("Undo "+hi.getDescription()); + } + else { - undoMenuItem.setEnabled(true); - Object [] history = (Object[])historyList.get(0); - undoMenuItem.setText("Undo "+history[0]); + undoMenuItem.setEnabled(false); + undoMenuItem.setText("Undo"); } - else - { - undoMenuItem.setEnabled(false); - undoMenuItem.setText("Undo"); - } - if(redoList.size()>0) + if(redoList.size()>0) + { + redoMenuItem.setEnabled(true); + HistoryItem hi = (HistoryItem)redoList.peek(); + redoMenuItem.setText("Redo "+hi.getDescription()); + } + else { - redoMenuItem.setEnabled(true); - Object [] history = (Object[])redoList.get(0); - redoMenuItem.setText("Redo "+history[0]); + redoMenuItem.setEnabled(false); + redoMenuItem.setText("Redo"); } - else - { - redoMenuItem.setEnabled(false); - redoMenuItem.setText("Redo"); - } - } - - public void addHistoryItem(String type) - { - // must make sure we add new sequence objects her, not refs to the existing sequences - redoList.clear(); - - SequenceI[] seq = new SequenceI[viewport.getAlignment().getHeight()]; - for(int i=0; ihi.getSequences().size()-1; i--) + viewport.alignment.deleteSequence(i); + } + } + + updateEditMenuBar(); + + viewport.updateConsensus(); + viewport.updateConservation(); + alignPanel.repaint(); + } public void moveSelectedSequences(boolean up) { @@ -335,7 +354,7 @@ public class AlignFrame extends GAlignFrame protected void pasteThis_actionPerformed(ActionEvent e) { - addHistoryItem("Paste"); + addHistoryItem(new HistoryItem("Paste Sequences", viewport.alignment, HistoryItem.PASTE)); paste(false); } @@ -398,7 +417,8 @@ public class AlignFrame extends GAlignFrame protected void delete_actionPerformed(ActionEvent e) { - addHistoryItem("Delete"); + addHistoryItem(new HistoryItem("Delete Sequences", viewport.alignment, HistoryItem.HIDE)); + if (viewport.getSelectionGroup() == null) return; @@ -430,20 +450,6 @@ public class AlignFrame extends GAlignFrame } - - protected void redoMenuItem_actionPerformed(ActionEvent e) - { - Object [] history = (Object[])redoList.remove(0); - SequenceI[] seq = (SequenceI[]) history[1]; - viewport.setAlignment( new Alignment(seq) ); - viewport.alignment.setGapCharacter( Preferences.gapSymbol ); - updateEditMenuBar(); - viewport.updateConsensus(); - alignPanel.repaint(); - alignPanel.repaint(); - } - - protected void deleteGroups_actionPerformed(ActionEvent e) { viewport.alignment.deleteAllGroups(); @@ -482,10 +488,11 @@ public class AlignFrame extends GAlignFrame public void remove2LeftMenuItem_actionPerformed(ActionEvent e) { - addHistoryItem("delete columns"); ColumnSelection colSel = viewport.getColumnSelection(); if (colSel.size() > 0) { + addHistoryItem(new HistoryItem("Remove Left",viewport.alignment, + HistoryItem.HIDE)); int min = colSel.getMin(); viewport.getAlignment().trimLeft(min); colSel.compensateForEdit(0,min); @@ -507,10 +514,12 @@ public class AlignFrame extends GAlignFrame public void remove2RightMenuItem_actionPerformed(ActionEvent e) { - addHistoryItem("delete columns"); ColumnSelection colSel = viewport.getColumnSelection(); if (colSel.size() > 0) { + addHistoryItem(new HistoryItem("Remove Right",viewport.alignment, + HistoryItem.HIDE)); + int max = colSel.getMax(); viewport.getAlignment().trimRight(max); if(viewport.getSelectionGroup()!=null) @@ -533,7 +542,9 @@ public class AlignFrame extends GAlignFrame public void removeGappedColumnMenuItem_actionPerformed(ActionEvent e) { - addHistoryItem("delete gapped columns"); + addHistoryItem(new HistoryItem("Remove Gapped Columns", + viewport.alignment, + HistoryItem.HIDE)); viewport.getAlignment().removeGaps(); viewport.updateConservation(); viewport.updateConsensus(); @@ -542,7 +553,9 @@ public class AlignFrame extends GAlignFrame public void removeAllGapsMenuItem_actionPerformed(ActionEvent e) { - addHistoryItem("delete all gaps"); + addHistoryItem(new HistoryItem("Remove Gaps", + viewport.alignment, + HistoryItem.HIDE)); SequenceI current; int jSize; for (int i=0; i < viewport.getAlignment().getSequences().size();i++) @@ -936,21 +949,21 @@ public class AlignFrame extends GAlignFrame public void sortPairwiseMenuItem_actionPerformed(ActionEvent e) { - addHistoryItem("sort"); + addHistoryItem(new HistoryItem("Pairwise Sort", viewport.alignment, HistoryItem.SORT)); AlignmentSorter.sortByPID(viewport.getAlignment(), viewport.getAlignment().getSequenceAt(0)); alignPanel.repaint(); } public void sortIDMenuItem_actionPerformed(ActionEvent e) { - addHistoryItem("sort"); + addHistoryItem(new HistoryItem("ID Sort", viewport.alignment, HistoryItem.SORT)); AlignmentSorter.sortByID( viewport.getAlignment() ); alignPanel.repaint(); } public void sortGroupMenuItem_actionPerformed(ActionEvent e) { - addHistoryItem("sort"); + addHistoryItem(new HistoryItem("Group Sort", viewport.alignment, HistoryItem.SORT)); AlignmentSorter.sortByGroup(viewport.getAlignment()); AlignmentSorter.sortGroups(viewport.getAlignment()); alignPanel.repaint(); @@ -1061,7 +1074,8 @@ public class AlignFrame extends GAlignFrame { public void actionPerformed(ActionEvent e) { - addHistoryItem("sort"); + addHistoryItem(new HistoryItem("Sort", viewport.alignment, + HistoryItem.SORT)); // TODO: JBPNote - have to map order entries to curent SequenceI pointers AlignmentSorter.sortBy(viewport.getAlignment(), order); alignPanel.repaint(); @@ -1077,7 +1091,8 @@ public class AlignFrame extends GAlignFrame { public void actionPerformed(ActionEvent e) { - addHistoryItem("sort"); + addHistoryItem(new HistoryItem("Tree Sort", viewport.alignment, + HistoryItem.SORT)); AlignmentSorter.sortByTree(viewport.getAlignment(), treePanel.getTree()); alignPanel.repaint(); } diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java index c43acf9..ca09c97 100755 --- a/src/jalview/gui/SeqPanel.java +++ b/src/jalview/gui/SeqPanel.java @@ -15,6 +15,8 @@ public class SeqPanel extends JPanel protected int lastres; protected int startseq; + int startEdit=-1; + int endEdit=-1; protected AlignViewport av; @@ -24,6 +26,9 @@ public class SeqPanel extends JPanel ScrollThread scrollThread = null; boolean mouseDragging = false; + boolean editingSeqs = false; + boolean groupEditing = false; + public SeqPanel(AlignViewport avp, AlignmentPanel p) { this.av = avp; @@ -46,7 +51,7 @@ public class SeqPanel extends JPanel { if(av.getWrapAlignment()) return; - if(evt.isShiftDown() || evt.isAltDown() || evt.isControlDown()) + if( editingSeqs ) doMouseDragged(evt); else doMouseDraggedDefineMode(evt); @@ -59,32 +64,37 @@ public class SeqPanel extends JPanel { if(av.getWrapAlignment()) return; - if(evt.isShiftDown() || evt.isAltDown() || evt.isControlDown()) + if(editingSeqs) doMouseReleased(evt); else doMouseReleasedDefineMode(evt); + } public void mousePressed(MouseEvent evt) { if(av.getWrapAlignment()) return; if(evt.isShiftDown() || evt.isAltDown() || evt.isControlDown()) + { + if(evt.isAltDown() || evt.isControlDown()) + groupEditing = true; + + editingSeqs = true; doMousePressed(evt); + } else doMousePressedDefineMode(evt); } public void mouseExited(MouseEvent evt) { - if (av.getWrapAlignment() || evt.isShiftDown() || evt.isAltDown() || - evt.isControlDown()) + if (av.getWrapAlignment() || editingSeqs) return; doMouseExitedDefineMode(evt); } public void mouseEntered(MouseEvent evt) { - if (av.getWrapAlignment() || evt.isShiftDown() || evt.isAltDown() || - evt.isControlDown()) + if (av.getWrapAlignment() || editingSeqs) return; doMouseEnteredDefineMode(evt); } @@ -96,18 +106,23 @@ public class SeqPanel extends JPanel public void doMouseReleased(MouseEvent evt) { - startseq = -1; - lastres = -1; if(seqEditOccurred>-1) - updateConservation(seqEditOccurred); + editOccurred(seqEditOccurred); + startseq = -1; + lastres = -1; seqEditOccurred = -1; + editingSeqs = false; + groupEditing = false; ap.repaint(); } public void doMousePressed(MouseEvent evt) { - ap.alignFrame.addHistoryItem("sequence edit"); + + ap.alignFrame.addHistoryItem( new HistoryItem( + "Edit Sequence",av.alignment, HistoryItem.EDIT)); + int seq; int res; @@ -120,14 +135,8 @@ public class SeqPanel extends JPanel if (seq < av.getAlignment().getHeight() && res < av.getAlignment().getSequenceAt(seq).getLength()) { - //char resstr = align.getSequenceAt(seq).getSequence().charAt(res); - // Find the residue's position in the sequence (res is the position - // in the alignment - startseq = seq; - lastres = res; - } else { @@ -135,6 +144,9 @@ public class SeqPanel extends JPanel lastres = -1; } + startEdit = lastres; + endEdit = lastres; + return; } @@ -227,10 +239,10 @@ public class SeqPanel extends JPanel if (res != lastres) { - // Group editing - if (evt.isAltDown() || evt.isControlDown()) + // Group editing + if (groupEditing) { - SequenceGroup sg = av.getSelectionGroup(); + SequenceGroup sg = av.getSelectionGroup(); if(sg==null) { lastres=-1; @@ -310,13 +322,22 @@ public class SeqPanel extends JPanel // dragging to the left for (int j = lastres; j > res; j--) { + if( jalview.util.Comparison.isGap( + av.alignment.getSequenceAt(startseq).getSequence().charAt(res))) + deleteChar(res, startseq); + else + { + + break; + } } - } + } - } + } } + endEdit = res; lastres = res; repaint(); } @@ -334,21 +355,22 @@ public class SeqPanel extends JPanel public void deleteChar(int j, int seq) { + av.alignment.getSequenceAt(seq).deleteCharAt(j); + seqEditOccurred=seq; - if ( jalview.util.Comparison.isGap( av.alignment.getSequenceAt(seq).getSequence().charAt(j))) - { av.alignment.getSequenceAt(seq).deleteCharAt(j); - - } - else System.out.println("err "+seq+" "+j); av.alignment.getWidth(); repaint(); - seqEditOccurred=seq; - } - void updateConservation(int i) + void editOccurred(int i) { + if(endEdit==startEdit) + { + ap.alignFrame.historyList.pop(); + ap.alignFrame.updateEditMenuBar(); + } + av.updateConservation(); av.updateConsensus(); @@ -440,6 +462,7 @@ public class SeqPanel extends JPanel // Edit end res position of selected group changeStartRes = true; + stretchGroup.getWidth(); repaint();