X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSeqPanel.java;h=a4d924073bbc11d04364c081b3d5e5b8f00135c6;hb=6bfaf3d3a82e4eece77dc1c2d83aede7c4dbb690;hp=19ee273a9970fa5f0c6c695d80e4c3df10fbe20d;hpb=55442cd37d5587dacdb8b642a3349debdffc4188;p=jalview.git diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java index 19ee273..a4d9240 100755 --- a/src/jalview/gui/SeqPanel.java +++ b/src/jalview/gui/SeqPanel.java @@ -147,7 +147,6 @@ public class SeqPanel extends JPanel implements MouseListener, int findSeq(MouseEvent evt) { - int seq = 0; int y = evt.getY(); @@ -162,11 +161,13 @@ public class SeqPanel extends JPanel implements MouseListener, y -= hgap; - seq = ( (y % cHeight) / av.getCharHeight()); + seq = Math.min( (y % cHeight) / av.getCharHeight(), + av.alignment.getHeight() -1); } else { - seq = (y / av.getCharHeight()) + av.getStartSeq(); + seq = Math.min( (y / av.getCharHeight()) + av.getStartSeq(), + av.alignment.getHeight() -1); } return seq; @@ -176,7 +177,7 @@ public class SeqPanel extends JPanel implements MouseListener, { Vector allFeatures = new Vector(); int index = 0; - if(seq.getSequenceFeatures()!=null) + if(seq.getSequenceFeatures()!=null && av.featuresDisplayed!=null) { while (index < seq.getSequenceFeatures().length) { @@ -308,7 +309,7 @@ public class SeqPanel extends JPanel implements MouseListener, SequenceGroup sg = av.selectionGroup; //Find the top and bottom of this group int min = av.alignment.getHeight(), max = 0; - for(int i=0; i max) @@ -344,7 +345,7 @@ public class SeqPanel extends JPanel implements MouseListener, else { // Now add any sequences between min and max - sg.sequences.clear(); + sg.getSequences(false).clear(); for (int i = min; i < max; i++) { sg.addSequence(av.alignment.getSequenceAt(i), false); @@ -425,7 +426,6 @@ public class SeqPanel extends JPanel implements MouseListener, editOccurred(); - endEditing(); ap.repaint(); } @@ -552,7 +552,7 @@ public class SeqPanel extends JPanel implements MouseListener, sbuffer.append("disulfide bond " + features[i].getBegin() + ":" + features[i].getEnd()); if (features[i].links != null) - sbuffer.append(""); + sbuffer.append(" "); } } else @@ -569,12 +569,12 @@ public class SeqPanel extends JPanel implements MouseListener, && !features[i].description.equals(features[i].getType())) sbuffer.append("; " + features[i].getDescription()); - if (features[i].getStatus() != null && features[i].getStatus().length()>0) + if (features[i].getValue("status") != null) { - sbuffer.append("; (" + features[i].getStatus() + ")"); + sbuffer.append("; (" + features[i].getValue("status") + ")"); } if (features[i].links != null) - sbuffer.append(""); + sbuffer.append(" "); } } @@ -729,25 +729,29 @@ public class SeqPanel extends JPanel implements MouseListener, boolean fixedColumns = false; SequenceGroup sg = av.getSelectionGroup(); - if(groupEditing && sg==null) - return; if (!groupEditing && av.hasHiddenRows) { - //This needs to check all the sequences in a group edit,m - // not just the startseq if (av.alignment.getSequenceAt(startseq).getHiddenSequences() != null) { groupEditing = true; } } + //No group, but the sequence may represent a group + if (groupEditing + && sg == null + && av.alignment.getSequenceAt(startseq).getHiddenSequences() == null) + { + groupEditing = false; + } + SequenceI seq = av.alignment.getSequenceAt(startseq); StringBuffer message = new StringBuffer(); if (groupEditing) message.append("Edit group:"); else - message.append("Edit sequence: "+seq.getName()); + message.append("Edit sequence: "+seq.getName()); if(insertGap) message.append(" insert "); @@ -760,10 +764,19 @@ public class SeqPanel extends JPanel implements MouseListener, //Are we editing within a selection group? if (groupEditing - || (sg != null && sg.sequences.contains(seq))) + || (sg != null && sg.getSequences(true).contains(seq))) { fixedColumns = true; + //sg might be null as the user may only see 1 sequence, + //but the sequence represents a group + if (sg == null) + { + sg = new SequenceGroup(null, null, false, false, false, 0, + av.alignment.getWidth()-1); + sg.addSequence(av.alignment.getSequenceAt(startseq), false); + } + fixedLeft = sg.getStartRes(); fixedRight = sg.getEndRes(); @@ -789,64 +802,46 @@ public class SeqPanel extends JPanel implements MouseListener, } - - if(av.hasHiddenColumns) + if(av.hasHiddenColumns ) { - fixedColumns = true; - int y1 = av.getColumnSelection().getHiddenBoundaryLeft(startres); - int y2 = av.getColumnSelection().getHiddenBoundaryRight(startres); - - if( ( insertGap && startres>y1 && lastresy2) ) - { - endEditing(); - return; - } + fixedColumns = true; + int y1 = av.getColumnSelection().getHiddenBoundaryLeft(startres); + int y2 = av.getColumnSelection().getHiddenBoundaryRight(startres); - if(fixedRightfixedLeft && fixedLeft==-1) - fixedLeft = y1; - } - - if (groupEditing) - { - - /*if (av.hasHiddenRows) - { - //sg might be null as the user may only see 1 sequence - if (sg == null) + if ( (insertGap && startres > y1 && lastres < y1) + || (!insertGap && startres < y2 && lastres > y2)) { - sg = new SequenceGroup(); - sg.addSequence(av.alignment.getSequenceAt(startseq), false); + endEditing(); + return; } - SequenceGroup tmp = new SequenceGroup(); - - //Do any of the sequences have hidden associates? - for (int s = 0; s < sg.getSize(); s++) + //System.out.print(y1+" "+y2+" "+fixedLeft+" "+fixedRight+"~~"); + //Selection spans a hidden region + if(fixedLefty2 || fixedRight==-1)) { - seq = sg.getSequenceAt(s); - tmp.addSequence(seq, false); - if (seq.getHiddenSequences() != null) + if(startres>=y2) { - for (int h = 0; h < seq.getHiddenSequences().getSize(); h++) - tmp.addSequence(seq.getHiddenSequences().getSequenceAt(h), - false); + fixedLeft = y2; } + else + { + fixedRight = y2 - 1; + } } - - sg = tmp; - }*/ - // int blankColumn = -1; + } + if (groupEditing) + { // drag to right if (insertGap) { //If the user has selected the whole sequence, and is dragging to // the right, we can still extend the alignment and selectionGroup - if(sg.getStartRes() == 0 && sg.getEndRes() + 1 == av.alignment.getWidth()) + if( sg.getStartRes() == 0 + && sg.getEndRes() == fixedRight + && sg.getEndRes() == av.alignment.getWidth()-1 + ) { sg.setEndRes(av.alignment.getWidth() + startres - lastres); fixedRight = sg.getEndRes(); @@ -861,9 +856,9 @@ public class SeqPanel extends JPanel implements MouseListener, fixedRight--) { blank = true; - for (int s = 0; s < sg.getSize(); s++) + for (int s = 0; s < sg.getSize(true); s++) { - seq = sg.getSequenceAt(s); + seq = (SequenceI)sg.getSequences(true).elementAt(s); for (int j = 0; j < startres - lastres; j++) { if (!jalview.util.Comparison.isGap( @@ -880,12 +875,26 @@ public class SeqPanel extends JPanel implements MouseListener, if (!blank) { - if(sg.getSize() == av.alignment.getHeight()) + if(sg.getSize(false) == av.alignment.getHeight() ) { + if((av.hasHiddenColumns + && startresalWidth) + alWidth = hwidth; + } //We can still insert gaps if the selectionGroup //contains all the sequences sg.setEndRes(sg.getEndRes()+startres-lastres); - fixedRight = av.alignment.getWidth()+startres-lastres; + fixedRight = alWidth+startres-lastres; } else { @@ -902,9 +911,9 @@ public class SeqPanel extends JPanel implements MouseListener, /// Are we able to delete? // ie are all columns blank? - for (int s = 0; s < sg.getSize(); s++) + for (int s = 0; s < sg.getSize(true); s++) { - seq = sg.getSequenceAt(s); + seq = (SequenceI)sg.getSequences(true).elementAt(s); for (int j = startres; j < lastres; j++) { @@ -925,9 +934,9 @@ public class SeqPanel extends JPanel implements MouseListener, } - for (int i = 0; i < sg.getSize(); i++) + for (int i = 0; i < sg.getSize(true); i++) { - seq = sg.getSequenceAt(i); + seq = (SequenceI) sg.getSequences(true).elementAt(i); if (insertGap) { @@ -968,17 +977,6 @@ public class SeqPanel extends JPanel implements MouseListener, { if (fixedColumns && fixedRight != -1) { - if (sg.getStartRes() == 0 - && sg.getEndRes() + 1 == av.alignment.getWidth() - && !jalview.util.Comparison.isGap(seq.getCharAt(fixedRight))) - { - //Single sequence edit, whole sequence selected, - //extend the selection group - sg.setEndRes(av.alignment.getWidth() -1 + startres - lastres); - fixedColumns = false; - insertChar(j, seq); - } - else insertChar(j, seq, fixedRight); } else @@ -1035,6 +1033,7 @@ public class SeqPanel extends JPanel implements MouseListener, if (blankColumn <= j) { + blankColumn = fixedColumn; endEditing(); return; } @@ -1219,7 +1218,7 @@ public class SeqPanel extends JPanel implements MouseListener, stretchGroup = null; } } - else if (!stretchGroup.sequences.contains(sequence) || + else if (!stretchGroup.getSequences(false).contains(sequence) || (stretchGroup.getStartRes() > res) || (stretchGroup.getEndRes() < res)) { @@ -1244,20 +1243,12 @@ public class SeqPanel extends JPanel implements MouseListener, } - if (av.cursorMode) - { - seqCanvas.cursorX = findRes(evt); - seqCanvas.cursorY = findSeq(evt); - seqCanvas.repaint(); - return; - } - if (javax.swing.SwingUtilities.isRightMouseButton(evt)) { Vector allFeatures = getAllFeaturesAtRes(sequence.getDatasetSequence(), sequence.findPosition(res)); - Vector links = new Vector();; + Vector links = new Vector(); for (int i = 0; i < allFeatures.size(); i++) { SequenceFeature sf = (SequenceFeature) allFeatures.elementAt(i); @@ -1270,11 +1261,20 @@ public class SeqPanel extends JPanel implements MouseListener, } } + jalview.gui.PopupMenu pop = new jalview.gui.PopupMenu(ap, null, links); + pop.show(this, evt.getX(), evt.getY()); + return; + } - jalview.gui.PopupMenu pop = new jalview.gui.PopupMenu(ap, null, links); - pop.show(this, evt.getX(), evt.getY()); + if (av.cursorMode) + { + seqCanvas.cursorX = findRes(evt); + seqCanvas.cursorY = findSeq(evt); + seqCanvas.repaint(); + return; } - else if (stretchGroup == null) + + if (stretchGroup == null) { //Only if left mouse button do we want to change group sizes @@ -1332,8 +1332,8 @@ public class SeqPanel extends JPanel implements MouseListener, { if (stretchGroup.cs instanceof ClustalxColourScheme) { - ( (ClustalxColourScheme) stretchGroup.cs).resetClustalX(stretchGroup. - sequences, + ( (ClustalxColourScheme) stretchGroup.cs).resetClustalX( + stretchGroup.getSequences(true), stretchGroup.getWidth()); } @@ -1373,11 +1373,6 @@ public class SeqPanel extends JPanel implements MouseListener, return; } - - if(y > av.alignment.getHeight()) - { - y = av.alignment.getHeight() -1; - } if(res> av.alignment.getWidth()) { res = av.alignment.getWidth()-1; @@ -1439,7 +1434,7 @@ public class SeqPanel extends JPanel implements MouseListener, Sequence nextSeq = (Sequence) av.getAlignment().getSequenceAt(oldSeq); - if (stretchGroup.sequences.contains(nextSeq)) + if (stretchGroup.getSequences(false).contains(nextSeq)) { stretchGroup.deleteSequence(seq, false); }