From: amwaterhouse Date: Thu, 19 May 2005 17:47:37 +0000 (+0000) Subject: group editing bug fixed X-Git-Tag: Release_2_0~294 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=e327e6c82e38ca1c690a73e9dcbec1fd1fa298f0;p=jalview.git group editing bug fixed --- diff --git a/src/jalview/appletgui/SeqPanel.java b/src/jalview/appletgui/SeqPanel.java index 7df2254..e6e02c5 100755 --- a/src/jalview/appletgui/SeqPanel.java +++ b/src/jalview/appletgui/SeqPanel.java @@ -13,12 +13,8 @@ public class SeqPanel extends Panel public SeqCanvas seqCanvas; public AlignmentPanel ap; - protected int startres; protected int lastres; - protected int endres; - protected int startseq; - protected int padseq; protected AlignViewport av; @@ -100,13 +96,7 @@ public class SeqPanel extends Panel public void doMouseReleased(MouseEvent evt) { - int x = evt.getX(); - int res = x/av.getCharWidth() + av.getStartRes(); - - endres = res; - startseq = -1; - startres = -1; lastres = -1; if(seqEditOccurred>-1) updateConservation(seqEditOccurred); @@ -114,7 +104,6 @@ public class SeqPanel extends Panel seqEditOccurred = -1; ap.repaint(); - } public void doMousePressed(MouseEvent evt) { @@ -136,20 +125,11 @@ public class SeqPanel extends Panel // in the alignment startseq = seq; - - if (startseq == (av.getAlignment().getHeight() - 1)) - padseq = 1; - else - padseq = 1; - - startres = res; lastres = res; - } else { startseq = -1; - startres = -1; lastres = -1; } @@ -226,107 +206,114 @@ public class SeqPanel extends Panel } public void doMouseDragged(MouseEvent evt) { - // If we're dragging we're editing - if(lastres==-1) - return; + // If we're dragging we're editing + int res = evt.getX() / av.getCharWidth() + av.getStartRes(); + if (res < 0) + res = 0; - int x = evt.getX(); + if (lastres == -1 || lastres == res) + return; - int res = x/av.getCharWidth() + av.getStartRes(); - if (res < 0) - res = 0; + boolean dragRight = true; + if (res < av.getAlignment().getWidth() && res < lastres) + dragRight = false; - if (res != lastres) - { - // Group editing - if (evt.isAltDown() || evt.isControlDown()) - { - SequenceGroup sg = av.getSelectionGroup(); - if(sg==null) - av.getAlignment().findGroup(startseq); - if (sg != null) + + if (res != lastres) + { + // Group editing + if (evt.isAltDown() || evt.isControlDown()) { - boolean deleteAllowed = false; - if (res < av.getAlignment().getWidth() && res < lastres) + SequenceGroup sg = av.getSelectionGroup(); + if(sg==null) { - /// Are we able to delete? - boolean allGaps = true; - for (int i = 0; i < sg.getSize(); i++) + lastres=-1; + return; + } + + // drag to right + if(dragRight) + sg.setEndRes(sg.getEndRes() + (res-lastres)); + + // drag to left + else { - SequenceI s = sg.getSequenceAt(i); - for (int j = lastres-1; j >= res && allGaps; j--) + /// Are we able to delete? + // ie are all columns blank? + boolean deleteAllowed = false; + for (int s = 0; s < sg.getSize(); s++) { - if (!jalview.util.Comparison.isGap(s.getSequence().charAt(j))) + SequenceI seq = sg.getSequenceAt(s); + for (int j=res; j lastres) - sg.setEndRes(sg.getEndRes() + 1); - - // drag to left - else if (deleteAllowed && res < av.getAlignment().getWidth() && - res < lastres) - sg.setEndRes(sg.getEndRes() - 1); - + if(!deleteAllowed) + { + lastres = -1; + return; + } + sg.setEndRes(sg.getEndRes() - (lastres-res)); + } - for (int i = 0; i < sg.getSize(); i++) - { - SequenceI s = sg.getSequenceAt(i); - int k = av.alignment.findIndex(s); + for (int i = 0; i < sg.getSize(); i++) + { + SequenceI s = sg.getSequenceAt(i); + int k = av.alignment.findIndex(s); - // drag to right - if (res < av.getAlignment().getWidth() && res > lastres) - for (int j = lastres; j < res; j++) - insertChar(j, k); + // drag to right + if (dragRight) + for (int j = lastres; j < res; j++) + insertChar(j, k); - // drag to left - else if (deleteAllowed && res < av.getAlignment().getWidth() && res < lastres) - { - for (int j = res; j < lastres; j++) + // drag to left + else { - deleteChar(j, k); - startres = res; + for (int j = res; j < lastres; j++) + { + if(s.getLength()>j) + 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) + else /////Editing a single sequence/////////// { - // dragging to the left - for (int j = res; j < lastres; j++) + if (res < av.getAlignment().getWidth() && res > lastres) { - deleteChar(j, startseq); - startres = res; + // 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); + } } - } - - } - } + } + } - lastres = res; - seqCanvas.repaint(); + lastres = res; + seqCanvas.repaint(); } public void drawChars(int seqstart, int seqend, int start) {