X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSeqPanel.java;h=0878cbb1cbeaaa328887a9a8e5beb96d79bce69e;hb=496ecb05d48de1ca8471658fd32824f808bb8823;hp=7dfac5ebc62f0d30f416f41e954d1c5f898d03ae;hpb=f49beadc8208986d730f7ed5f4c5cb99329ed92f;p=jalview.git diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java index 7dfac5e..0878cbb 100644 --- a/src/jalview/gui/SeqPanel.java +++ b/src/jalview/gui/SeqPanel.java @@ -389,38 +389,12 @@ public class SeqPanel extends JPanel implements MouseListener, endEditing(); if (av.getWrapAlignment()) { - ap.scrollToWrappedVisible(seqCanvas.cursorX); + av.getRanges().scrollToWrappedVisible(seqCanvas.cursorX); } else { - while (seqCanvas.cursorY < av.getRanges().getStartSeq()) - { - ap.scrollUp(true); - } - while (seqCanvas.cursorY > av.getRanges().getEndSeq()) - { - ap.scrollUp(false); - } - if (!av.getWrapAlignment()) - { - HiddenColumns hidden = av.getAlignment().getHiddenColumns(); - while (seqCanvas.cursorX < hidden.adjustForHiddenColumns(av - .getRanges().getStartRes())) - { - if (!ap.scrollRight(false)) - { - break; - } - } - while (seqCanvas.cursorX > hidden.adjustForHiddenColumns(av - .getRanges().getEndRes())) - { - if (!ap.scrollRight(true)) - { - break; - } - } - } + av.getRanges().scrollToVisible(seqCanvas.cursorX, seqCanvas.cursorY, + av); } setStatusMessage(av.getAlignment().getSequenceAt(seqCanvas.cursorY), seqCanvas.cursorX, seqCanvas.cursorY); @@ -590,6 +564,7 @@ public class SeqPanel extends JPanel implements MouseListener, @Override public void mouseReleased(MouseEvent evt) { + boolean didDrag = mouseDragging; // did we come here after a drag mouseDragging = false; mouseWheelPressed = false; @@ -602,7 +577,7 @@ public class SeqPanel extends JPanel implements MouseListener, if (!editingSeqs) { - doMouseReleasedDefineMode(evt); + doMouseReleasedDefineMode(evt, didDrag); return; } @@ -696,17 +671,16 @@ public class SeqPanel extends JPanel implements MouseListener, if (av.isFollowHighlight()) { - /* - * if scrollToPosition requires a scroll adjustment, this flag prevents - * another scroll event being propagated back to the originator - * - * @see AlignmentPanel#adjustmentValueChanged - */ - ap.setDontScrollComplement(true); + // don't allow highlight of protein/cDNA to also scroll a complementary + // panel,as this sets up a feedback loop (scrolling panel 1 causes moused + // over residue to change abruptly, causing highlighted residue in panel 2 + // to change, causing a scroll in panel 1 etc) + ap.setToScrollComplementPanel(false); if (ap.scrollToPosition(results, false)) { seqCanvas.revalidate(); } + ap.setToScrollComplementPanel(true); } setStatusMessage(results); seqCanvas.highlightSearchResults(results); @@ -788,7 +762,7 @@ public class SeqPanel extends JPanel implements MouseListener, } } - if (av.isShowSequenceFeatures()) + if (av.isShowSequenceFeatures() && pos != -1) { List features = ap.getFeatureRenderer() .findFeaturesAtRes(sequence.getDatasetSequence(), pos); @@ -861,7 +835,8 @@ public class SeqPanel extends JPanel implements MouseListener, /** * Sets the status message in alignment panel, showing the sequence number * (index) and id, residue and residue position for the given sequence and - * column position. Returns the calculated residue position in the sequence. + * column position. Returns the calculated residue position in the sequence, + * or -1 for a gapped column position. * * @param sequence * aligned sequence object @@ -869,7 +844,7 @@ public class SeqPanel extends JPanel implements MouseListener, * alignment column * @param seq * index of sequence in alignment - * @return position of res in sequence + * @return position of column in sequence or -1 if at a gap */ int setStatusMessage(SequenceI sequence, final int column, int seq) { @@ -907,9 +882,9 @@ public class SeqPanel extends JPanel implements MouseListener, } int pos = -1; - pos = sequence.findPosition(column); if (residue != null) { + pos = sequence.findPosition(column); text.append(" (").append(Integer.toString(pos)).append(")"); } ap.alignFrame.statusBar.setText(text.toString()); @@ -1586,23 +1561,23 @@ public class SeqPanel extends JPanel implements MouseListener, { if (e.isShiftDown()) { - ap.scrollRight(true); + av.getRanges().scrollRight(true); } else { - ap.scrollUp(false); + av.getRanges().scrollUp(false); } } else { if (e.isShiftDown()) { - ap.scrollRight(false); + av.getRanges().scrollRight(false); } else { - ap.scrollUp(true); + av.getRanges().scrollUp(true); } } // TODO Update tooltip for new position. @@ -1737,7 +1712,7 @@ public class SeqPanel extends JPanel implements MouseListener, List allFeatures = ap.getFeatureRenderer() .findFeaturesAtRes(sequence.getDatasetSequence(), sequence.findPosition(res)); - List links = new ArrayList(); + List links = new ArrayList<>(); for (SequenceFeature sf : allFeatures) { if (sf.links != null) @@ -1754,12 +1729,15 @@ public class SeqPanel extends JPanel implements MouseListener, } /** - * DOCUMENT ME! + * Update the display after mouse up on a selection or group * * @param evt - * DOCUMENT ME! + * mouse released event details + * @param afterDrag + * true if this event is happening after a mouse drag (rather than a + * mouse down) */ - public void doMouseReleasedDefineMode(MouseEvent evt) + public void doMouseReleasedDefineMode(MouseEvent evt, boolean afterDrag) { if (stretchGroup == null) { @@ -1768,7 +1746,8 @@ public class SeqPanel extends JPanel implements MouseListener, // always do this - annotation has own state // but defer colourscheme update until hidden sequences are passed in boolean vischange = stretchGroup.recalcConservation(true); - needOverviewUpdate |= vischange && av.isSelectionDefinedGroup(); + needOverviewUpdate |= vischange && av.isSelectionDefinedGroup() + && afterDrag; if (stretchGroup.cs != null) { stretchGroup.cs.alignmentChanged(stretchGroup, @@ -1970,23 +1949,23 @@ public class SeqPanel extends JPanel implements MouseListener, if (mouseDragging && (evt.getY() < 0) && (av.getRanges().getStartSeq() > 0)) { - running = ap.scrollUp(true); + running = av.getRanges().scrollUp(true); } if (mouseDragging && (evt.getY() >= getHeight()) && (av.getAlignment().getHeight() > av.getRanges() .getEndSeq())) { - running = ap.scrollUp(false); + running = av.getRanges().scrollUp(false); } if (mouseDragging && (evt.getX() < 0)) { - running = ap.scrollRight(false); + running = av.getRanges().scrollRight(false); } else if (mouseDragging && (evt.getX() >= getWidth())) { - running = ap.scrollRight(true); + running = av.getRanges().scrollRight(true); } } @@ -2022,11 +2001,13 @@ public class SeqPanel extends JPanel implements MouseListener, ap.getCalculationDialog().validateCalcTypes(); } - // process further ? - if (!av.followSelection) - { - return; - } + return; + } + + // process further ? + if (!av.followSelection) + { + return; } /*