From: gmungoc Date: Tue, 30 May 2017 09:33:32 +0000 (+0100) Subject: Merge branch 'develop' into features/JAL-2446NCList X-Git-Tag: Release_2_10_3b1~224 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=b94e9d2b3e667c6925e3e40bac63de219fc717a7;hp=-c;p=jalview.git Merge branch 'develop' into features/JAL-2446NCList Conflicts: src/jalview/appletgui/SeqPanel.java --- b94e9d2b3e667c6925e3e40bac63de219fc717a7 diff --combined src/jalview/appletgui/SeqPanel.java index 1ca4256,0a833b3..ab6dd9a --- a/src/jalview/appletgui/SeqPanel.java +++ b/src/jalview/appletgui/SeqPanel.java @@@ -54,7 -54,6 +54,7 @@@ import java.awt.event.InputEvent import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; +import java.util.List; import java.util.Vector; public class SeqPanel extends Panel implements MouseMotionListener, @@@ -564,19 -563,20 +564,19 @@@ av.setSelectionGroup(null); } - SequenceFeature[] features = findFeaturesAtRes(sequence, + List features = findFeaturesAtRes(sequence, sequence.findPosition(findRes(evt))); - if (features != null && features.length > 0) + if (!features.isEmpty()) { SearchResultsI highlight = new SearchResults(); - highlight.addResult(sequence, features[0].getBegin(), - features[0].getEnd()); + highlight.addResult(sequence, features.get(0).getBegin(), features + .get(0).getEnd()); seqCanvas.highlightSearchResults(highlight); - } - if (features != null && features.length > 0) - { + SequenceFeature[] featuresArray = features + .toArray(new SequenceFeature[features.size()]); seqCanvas.getFeatureRenderer().amendFeatures( - new SequenceI[] { sequence }, features, false, ap); + new SequenceI[] { sequence }, featuresArray, false, ap); seqCanvas.highlightSearchResults(null); } @@@ -586,13 -586,13 +586,13 @@@ @Override public void mouseReleased(MouseEvent evt) { + boolean didDrag = mouseDragging; // did we come here after a drag mouseDragging = false; mouseWheelPressed = false; if (!editingSeqs) { - doMouseReleasedDefineMode(evt); + doMouseReleasedDefineMode(evt, didDrag); return; } @@@ -868,10 -868,14 +868,10 @@@ */ if (respos != -1) { - SequenceFeature[] allFeatures = findFeaturesAtRes(sequence, - sequence.findPosition(column)); - - int index = 0; - while (index < allFeatures.length) + List allFeatures = findFeaturesAtRes(sequence, + respos); + for (SequenceFeature sf : allFeatures) { - SequenceFeature sf = allFeatures[index]; - tooltipText.append(sf.getType() + " " + sf.begin + ":" + sf.end); if (sf.getDescription() != null) @@@ -888,6 -892,8 +888,6 @@@ } } tooltipText.append("\n"); - - index++; } } @@@ -901,9 -907,40 +901,9 @@@ } } - SequenceFeature[] findFeaturesAtRes(SequenceI sequence, int res) + List findFeaturesAtRes(SequenceI sequence, int res) { - Vector tmp = new Vector(); - SequenceFeature[] features = sequence.getSequenceFeatures(); - if (features != null) - { - for (int i = 0; i < features.length; i++) - { - if (av.getFeaturesDisplayed() == null - || !av.getFeaturesDisplayed().isVisible( - features[i].getType())) - { - continue; - } - - if (features[i].featureGroup != null - && !seqCanvas.fr.checkGroupVisibility( - features[i].featureGroup, false)) - { - continue; - } - - if ((features[i].getBegin() <= res) - && (features[i].getEnd() >= res)) - { - tmp.addElement(features[i]); - } - } - } - - features = new SequenceFeature[tmp.size()]; - tmp.copyInto(features); - - return features; + return seqCanvas.getFeatureRenderer().findFeaturesAtRes(sequence, res); } Tooltip tooltip; @@@ -1429,20 -1466,25 +1429,20 @@@ // DETECT RIGHT MOUSE BUTTON IN AWT if ((evt.getModifiers() & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK) { - SequenceFeature[] allFeatures = findFeaturesAtRes(sequence, + List allFeatures = findFeaturesAtRes(sequence, sequence.findPosition(res)); Vector links = null; - if (allFeatures != null) + for (int i = 0; i < allFeatures.size(); i++) { - for (int i = 0; i < allFeatures.length; i++) + SequenceFeature sf = allFeatures.get(i); + if (sf.links != null) { - if (allFeatures[i].links != null) + if (links == null) { - if (links == null) - { - links = new Vector<>(); - } - for (int j = 0; j < allFeatures[i].links.size(); j++) - { - links.addElement(allFeatures[i].links.elementAt(j)); - } + links = new Vector(); } + links.addAll(sf.links); } } APopupMenu popup = new APopupMenu(ap, null, links); @@@ -1485,7 -1527,7 +1485,7 @@@ } } - public void doMouseReleasedDefineMode(MouseEvent evt) + public void doMouseReleasedDefineMode(MouseEvent evt, boolean afterDrag) { if (stretchGroup == null) { @@@ -1495,7 -1537,8 +1495,8 @@@ // but defer colourscheme update until hidden sequences are passed in boolean vischange = stretchGroup.recalcConservation(true); // here we rely on stretchGroup == av.getSelection() - needOverviewUpdate |= vischange && av.isSelectionDefinedGroup(); + needOverviewUpdate |= vischange && av.isSelectionDefinedGroup() + && afterDrag; if (stretchGroup.cs != null) { stretchGroup.cs.alignmentChanged(stretchGroup, diff --combined src/jalview/gui/SeqPanel.java index ab5bc49,0878cbb..494d690 --- a/src/jalview/gui/SeqPanel.java +++ b/src/jalview/gui/SeqPanel.java @@@ -84,16 -84,6 +84,16 @@@ public class SeqPanel extends JPanel im /** DOCUMENT ME!! */ public AlignmentPanel ap; + /* + * last column position for mouseMoved event + */ + private int lastMouseColumn; + + /* + * last sequence offset for mouseMoved event + */ + private int lastMouseSeq; + protected int lastres; protected int startseq; @@@ -180,9 -170,6 +180,9 @@@ ssm.addStructureViewerListener(this); ssm.addSelectionListener(this); } + + lastMouseColumn = -1; + lastMouseSeq = -1; } int startWrapBlock = -1; @@@ -577,6 -564,7 +577,7 @@@ @Override public void mouseReleased(MouseEvent evt) { + boolean didDrag = mouseDragging; // did we come here after a drag mouseDragging = false; mouseWheelPressed = false; @@@ -589,7 -577,7 +590,7 @@@ if (!editingSeqs) { - doMouseReleasedDefineMode(evt); + doMouseReleasedDefineMode(evt, didDrag); return; } @@@ -733,15 -721,6 +734,15 @@@ { return; } + if (column == lastMouseColumn && seq == lastMouseSeq) + { + /* + * just a pixel move without change of residue + */ + return; + } + lastMouseColumn = column; + lastMouseSeq = seq; SequenceI sequence = av.getAlignment().getSequenceAt(seq); @@@ -797,15 -776,18 +798,15 @@@ } else { - if (lastTooltip == null - || !lastTooltip.equals(tooltipText.toString())) + String textString = tooltipText.toString(); + if (lastTooltip == null || !lastTooltip.equals(textString)) { String formatedTooltipText = JvSwingUtils.wrapTooltip(true, - tooltipText.toString()); - // String formatedTooltipText = tooltipText.toString(); + textString); setToolTipText(formatedTooltipText); - lastTooltip = tooltipText.toString(); + lastTooltip = textString; } - } - } private Point lastp = null; @@@ -1730,7 -1712,7 +1731,7 @@@ 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) @@@ -1747,12 -1729,15 +1748,15 @@@ } /** - * 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) { @@@ -1761,7 -1746,8 +1765,8 @@@ // 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, @@@ -2015,11 -2001,13 +2020,13 @@@ ap.getCalculationDialog().validateCalcTypes(); } - // process further ? - if (!av.followSelection) - { - return; - } + return; + } + + // process further ? + if (!av.followSelection) + { + return; } /*