From a6c668f4dc79dddafdd0869da9e156c593983d78 Mon Sep 17 00:00:00 2001 From: amwaterhouse Date: Thu, 19 May 2005 17:53:46 +0000 Subject: [PATCH] block edit bug fixed --- src/jalview/gui/SeqPanel.java | 111 +++++++++++++++++++---------------------- 1 file changed, 51 insertions(+), 60 deletions(-) diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java index 162f978..c43acf9 100755 --- a/src/jalview/gui/SeqPanel.java +++ b/src/jalview/gui/SeqPanel.java @@ -13,12 +13,8 @@ public class SeqPanel extends JPanel 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 JPanel 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 JPanel seqEditOccurred = -1; ap.repaint(); - } public void doMousePressed(MouseEvent evt) { @@ -137,19 +126,12 @@ public class SeqPanel extends JPanel startseq = seq; - if (startseq == (av.getAlignment().getHeight() - 1)) - padseq = 1; - else - padseq = 1; - - startres = res; lastres = res; } else { startseq = -1; - startres = -1; lastres = -1; } @@ -229,16 +211,19 @@ public class SeqPanel extends JPanel } public void doMouseDragged(MouseEvent evt) { + // If we're dragging we're editing + int res = evt.getX() / av.getCharWidth() + av.getStartRes(); + if (res < 0) + res = 0; - if(lastres==-1) + if (lastres == -1 || lastres == res) return; - int x = evt.getX(); + boolean dragRight = true; + if (res < av.getAlignment().getWidth() && res < lastres) + dragRight = false; - int res = x/av.getCharWidth() + av.getStartRes(); - if (res < 0) - res = 0; if (res != lastres) { @@ -247,41 +232,48 @@ public class SeqPanel extends JPanel { SequenceGroup sg = av.getSelectionGroup(); if(sg==null) - av.getAlignment().findGroup(startseq); - if (sg != null) { - boolean deleteAllowed = false; - if (res < av.getAlignment().getWidth() && res < lastres) + lastres=-1; + return; + } + + // drag to right + if(dragRight) + sg.setEndRes(sg.getEndRes() + (res-lastres)); + + // drag to left + else { - /// Are we able to delete? - boolean allGaps = true; - for (int i = 0; i < sg.getSize(); i++) + /// Are we able to delete? + // ie are all columns blank? + boolean deleteAllowed = false; + for (int s = 0; s < sg.getSize(); s++) { - SequenceI s = sg.getSequenceAt(i); - for (int j = lastres-1; j >= res && allGaps; 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++) @@ -290,21 +282,20 @@ public class SeqPanel extends JPanel int k = av.alignment.findIndex(s); // drag to right - if (res < av.getAlignment().getWidth() && res > lastres) + if (dragRight) for (int j = lastres; j < res; j++) insertChar(j, k); // drag to left - else if (deleteAllowed && res < av.getAlignment().getWidth() && res < lastres) + else { for (int j = res; j < lastres; j++) { - deleteChar(j, k); - startres = res; + if(s.getLength()>j) + deleteChar(res, k); } } } - } } else /////Editing a single sequence/////////// { @@ -317,15 +308,13 @@ public class SeqPanel extends JPanel else if (res < av.getAlignment().getWidth() && res < lastres) { // dragging to the left - for (int j = res; j < lastres; j++) + for (int j = lastres; j > res; j--) { - deleteChar(j, startseq); - startres = res; + deleteChar(res, startseq); } } } - } lastres = res; @@ -347,8 +336,10 @@ public class SeqPanel extends JPanel { if ( jalview.util.Comparison.isGap( av.alignment.getSequenceAt(seq).getSequence().charAt(j))) - av.alignment.getSequenceAt(seq).deleteCharAt(j); + { av.alignment.getSequenceAt(seq).deleteCharAt(j); + } + else System.out.println("err "+seq+" "+j); av.alignment.getWidth(); repaint(); seqEditOccurred=seq; -- 1.7.10.2