X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FSeqPanel.java;h=f36a8e29791f59323b4739b5c0219143d56fcfa1;hb=b5a209613f14ad6e75f43aa537a96484d847ce0a;hp=de65dc59ca50e65de1306be12f1ebfb2391d572c;hpb=0770abc171ad145c0b5ee61836091dcf8ef88bb6;p=jalview.git diff --git a/src/jalview/appletgui/SeqPanel.java b/src/jalview/appletgui/SeqPanel.java index de65dc5..f36a8e2 100644 --- a/src/jalview/appletgui/SeqPanel.java +++ b/src/jalview/appletgui/SeqPanel.java @@ -132,8 +132,8 @@ public class SeqPanel extends Panel implements MouseMotionListener, if (editCommand != null && editCommand.getSize() > 0) { ap.alignFrame.addHistoryItem(editCommand); - av.firePropertyChange("alignment", null, av.getAlignment() - .getSequences()); + av.firePropertyChange("alignment", null, + av.getAlignment().getSequences()); } startseq = -1; @@ -183,23 +183,21 @@ public class SeqPanel extends Panel implements MouseMotionListener, { seqCanvas.cursorX += dx; seqCanvas.cursorY += dy; - if (av.hasHiddenColumns() - && !av.getAlignment().getHiddenColumns() - .isVisible(seqCanvas.cursorX)) + if (av.hasHiddenColumns() && !av.getAlignment().getHiddenColumns() + .isVisible(seqCanvas.cursorX)) { int original = seqCanvas.cursorX - dx; int maxWidth = av.getAlignment().getWidth(); while (!av.getAlignment().getHiddenColumns() - .isVisible(seqCanvas.cursorX) - && seqCanvas.cursorX < maxWidth && seqCanvas.cursorX > 0) + .isVisible(seqCanvas.cursorX) && seqCanvas.cursorX < maxWidth + && seqCanvas.cursorX > 0) { seqCanvas.cursorX += dx; } - if (seqCanvas.cursorX >= maxWidth - || !av.getAlignment().getHiddenColumns() - .isVisible(seqCanvas.cursorX)) + if (seqCanvas.cursorX >= maxWidth || !av.getAlignment() + .getHiddenColumns().isVisible(seqCanvas.cursorX)) { seqCanvas.cursorX = original; } @@ -244,8 +242,8 @@ public class SeqPanel extends Panel implements MouseMotionListener, { ranges.scrollUp(false); } - while (seqCanvas.cursorX < hidden.adjustForHiddenColumns(ranges - .getStartRes())) + while (seqCanvas.cursorX < hidden + .adjustForHiddenColumns(ranges.getStartRes())) { if (!ranges.scrollRight(false)) @@ -253,8 +251,8 @@ public class SeqPanel extends Panel implements MouseMotionListener, break; } } - while (seqCanvas.cursorX > hidden.adjustForHiddenColumns(ranges - .getEndRes())) + while (seqCanvas.cursorX > hidden + .adjustForHiddenColumns(ranges.getEndRes())) { if (!ranges.scrollRight(true)) { @@ -443,9 +441,9 @@ public class SeqPanel extends Panel implements MouseMotionListener, } else { - residue = "X".equalsIgnoreCase(displayChar) ? "X" : ("*" - .equals(displayChar) ? "STOP" : ResidueProperties.aa2Triplet - .get(displayChar)); + residue = "X".equalsIgnoreCase(displayChar) ? "X" + : ("*".equals(displayChar) ? "STOP" + : ResidueProperties.aa2Triplet.get(displayChar)); if (residue != null) { text.append(" Residue: ").append(residue); @@ -507,7 +505,8 @@ public class SeqPanel extends Panel implements MouseMotionListener, // For now, ignore the mouseWheel font resizing on Macs // As the Button2_mask always seems to be true - if ((evt.getModifiers() & InputEvent.BUTTON2_MASK) == InputEvent.BUTTON2_MASK + if ((evt.getModifiers() + & InputEvent.BUTTON2_MASK) == InputEvent.BUTTON2_MASK && !av.MAC) { mouseWheelPressed = true; @@ -572,8 +571,8 @@ public class SeqPanel extends Panel implements MouseMotionListener, if (!features.isEmpty()) { SearchResultsI highlight = new SearchResults(); - highlight.addResult(sequence, features.get(0).getBegin(), features - .get(0).getEnd()); + highlight.addResult(sequence, features.get(0).getBegin(), + features.get(0).getEnd()); seqCanvas.highlightSearchResults(highlight); seqCanvas.getFeatureRenderer().amendFeatures( Collections.singletonList(sequence), features, false, ap); @@ -616,6 +615,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, int res = 0; int x = evt.getX(); + int startRes = av.getRanges().getStartRes(); if (av.getWrapAlignment()) { @@ -630,7 +630,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, int y = evt.getY(); y -= hgap; - x -= seqCanvas.LABEL_WEST; + x = Math.max(0, x - seqCanvas.LABEL_WEST); int cwidth = seqCanvas.getWrappedCanvasWidth(getSize().width); if (cwidth < 1) @@ -639,14 +639,15 @@ public class SeqPanel extends Panel implements MouseMotionListener, } wrappedBlock = y / cHeight; - wrappedBlock += av.getRanges().getStartRes() / cwidth; - - res = wrappedBlock * cwidth + x / av.getCharWidth(); - + wrappedBlock += startRes / cwidth; + int startOffset = startRes % cwidth; // in case start is scrolled right + // from 0 + res = wrappedBlock * cwidth + startOffset + + +Math.min(cwidth - 1, x / av.getCharWidth()); } else { - res = (x / av.getCharWidth()) + av.getRanges().getStartRes(); + res = (x / av.getCharWidth()) + startRes; } if (av.hasHiddenColumns()) @@ -688,8 +689,8 @@ public class SeqPanel extends Panel implements MouseMotionListener, y -= hgap; - seq = Math.min((y % cHeight) / av.getCharHeight(), av.getAlignment() - .getHeight() - 1); + seq = Math.min((y % cHeight) / av.getCharHeight(), + av.getAlignment().getHeight() - 1); if (seq < 0) { seq = -1; @@ -697,10 +698,9 @@ public class SeqPanel extends Panel implements MouseMotionListener, } else { - seq = Math.min((y / av.getCharHeight()) - + av.getRanges().getStartSeq(), - av - .getAlignment().getHeight() - 1); + seq = Math.min( + (y / av.getCharHeight()) + av.getRanges().getStartSeq(), + av.getAlignment().getHeight() - 1); if (seq < 0) { seq = -1; @@ -832,8 +832,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, else { String residue = (ch == 'x' || ch == 'X') ? "X" - : ResidueProperties.aa2Triplet - .get(String.valueOf(ch)); + : ResidueProperties.aa2Triplet.get(String.valueOf(ch)); text.append(" Residue: ").append(residue == null ? ch : residue); } text.append(" (").append(Integer.toString(respos)).append(")"); @@ -847,7 +846,8 @@ public class SeqPanel extends Panel implements MouseMotionListener, { for (int g = 0; g < groups.length; g++) { - if (groups[g].getStartRes() <= column && groups[g].getEndRes() >= column) + if (groups[g].getStartRes() <= column + && groups[g].getEndRes() >= column) { if (!groups[g].getName().startsWith("JTreeGroup") && !groups[g].getName().startsWith("JGroup")) @@ -935,8 +935,8 @@ public class SeqPanel extends Panel implements MouseMotionListener, int oldWidth = av.getCharWidth(); // Which is bigger, left-right or up-down? - if (Math.abs(evt.getY() - lastMousePress.y) > Math.abs(evt.getX() - - lastMousePress.x)) + if (Math.abs(evt.getY() - lastMousePress.y) > Math + .abs(evt.getX() - lastMousePress.x)) { int fontSize = av.font.getSize(); @@ -1045,8 +1045,8 @@ public class SeqPanel extends Panel implements MouseMotionListener, StringBuffer message = new StringBuffer(); if (groupEditing) { - message.append(MessageManager.getString("action.edit_group")).append( - ":"); + message.append(MessageManager.getString("action.edit_group")) + .append(":"); if (editCommand == null) { editCommand = new EditCommand( @@ -1064,8 +1064,9 @@ public class SeqPanel extends Panel implements MouseMotionListener, } if (editCommand == null) { - editCommand = new EditCommand(MessageManager.formatMessage( - "label.edit_params", new String[] { label })); + editCommand = new EditCommand(MessageManager + .formatMessage("label.edit_params", new String[] + { label })); } } @@ -1082,9 +1083,8 @@ public class SeqPanel extends Panel implements MouseMotionListener, ap.alignFrame.statusBar.setText(message.toString()); // Are we editing within a selection group? - if (groupEditing - || (sg != null && sg.getSequences(av.getHiddenRepSequences()) - .contains(seq))) + if (groupEditing || (sg != null + && sg.getSequences(av.getHiddenRepSequences()).contains(seq))) { fixedColumns = true; @@ -1184,8 +1184,8 @@ public class SeqPanel extends Panel implements MouseMotionListener, { for (int j = 0; j < startres - lastres; j++) { - if (!jalview.util.Comparison.isGap(gs.getCharAt(fixedRight - - j))) + if (!jalview.util.Comparison + .isGap(gs.getCharAt(fixedRight - j))) { blank = false; break; @@ -1306,9 +1306,8 @@ public class SeqPanel extends Panel implements MouseMotionListener, } else { - editCommand.appendEdit(Action.INSERT_GAP, - new SequenceI[] { seq }, lastres, startres - lastres, - av.getAlignment(), true); + editCommand.appendEdit(Action.INSERT_GAP, new SequenceI[] { seq }, + lastres, startres - lastres, av.getAlignment(), true); } } else @@ -1342,8 +1341,8 @@ public class SeqPanel extends Panel implements MouseMotionListener, if (max > 0) { editCommand.appendEdit(Action.DELETE_GAP, - new SequenceI[] { seq }, startres, max, - av.getAlignment(), true); + new SequenceI[] + { seq }, startres, max, av.getAlignment(), true); } } } @@ -1403,7 +1402,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, { if (scrollThread != null) { - scrollThread.running = false; + scrollThread.threadRunning = false; scrollThread = null; } @@ -1438,7 +1437,8 @@ public class SeqPanel extends Panel implements MouseMotionListener, } // DETECT RIGHT MOUSE BUTTON IN AWT - if ((evt.getModifiers() & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK) + if ((evt.getModifiers() + & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK) { List allFeatures = findFeaturesAtColumn(sequence, sequence.findPosition(column + 1)); @@ -1649,7 +1649,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, mouseExited(evt); } - if (scrollThread != null) + if ((scrollThread != null) && (scrollThread.isRunning())) { scrollThread.setEvent(evt); } @@ -1665,9 +1665,9 @@ public class SeqPanel extends Panel implements MouseMotionListener, oldSeq = 0; } - if (scrollThread != null) + if ((scrollThread != null) && (scrollThread.isRunning())) { - scrollThread.running = false; + scrollThread.stopScrolling(); scrollThread = null; } } @@ -1690,9 +1690,9 @@ public class SeqPanel extends Panel implements MouseMotionListener, { if (evt == null) { - if (scrollThread != null) + if ((scrollThread != null) && (scrollThread.isRunning())) { - scrollThread.running = false; + scrollThread.stopScrolling(); scrollThread = null; } mouseDragging = false; @@ -1715,7 +1715,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, { MouseEvent evt; - boolean running = false; + private volatile boolean threadRunning = true; public ScrollThread() { @@ -1729,14 +1729,18 @@ public class SeqPanel extends Panel implements MouseMotionListener, public void stopScrolling() { - running = false; + threadRunning = false; + } + + public boolean isRunning() + { + return threadRunning; } @Override public void run() { - running = true; - while (running) + while (threadRunning) { if (evt != null) @@ -1745,24 +1749,23 @@ public class SeqPanel extends Panel implements MouseMotionListener, if (mouseDragging && evt.getY() < 0 && av.getRanges().getStartSeq() > 0) { - running = av.getRanges().scrollUp(true); + av.getRanges().scrollUp(true); } - if (mouseDragging && evt.getY() >= getSize().height - && av.getAlignment().getHeight() > av.getRanges() - .getEndSeq()) + if (mouseDragging && evt.getY() >= getSize().height && av + .getAlignment().getHeight() > av.getRanges().getEndSeq()) { - running = av.getRanges().scrollUp(false); + av.getRanges().scrollUp(false); } if (mouseDragging && evt.getX() < 0) { - running = av.getRanges().scrollRight(false); + av.getRanges().scrollRight(false); } else if (mouseDragging && evt.getX() >= getSize().width) { - running = av.getRanges().scrollRight(true); + av.getRanges().scrollRight(true); } } @@ -1787,9 +1790,10 @@ public class SeqPanel extends Panel implements MouseMotionListener, // handles selection messages... // TODO: extend config options to allow user to control if selections may be // shared between viewports. - if (av != null - && (av == source || !av.followSelection || (source instanceof AlignViewport && ((AlignmentViewport) source) - .getSequenceSetId().equals(av.getSequenceSetId())))) + if (av != null && (av == source || !av.followSelection + || (source instanceof AlignViewport + && ((AlignmentViewport) source).getSequenceSetId() + .equals(av.getSequenceSetId())))) { return; } @@ -1818,11 +1822,9 @@ public class SeqPanel extends Panel implements MouseMotionListener, { if (av.getAlignment() == null) { - System.out - .println("Selection message: alignviewport av SeqSetId=" - + av.getSequenceSetId() + " ViewId=" - + av.getViewId() - + " 's alignment is NULL! returning immediatly."); + System.out.println("Selection message: alignviewport av SeqSetId=" + + av.getSequenceSetId() + " ViewId=" + av.getViewId() + + " 's alignment is NULL! returning immediatly."); return; } sgroup = seqsel.intersect(av.getAlignment(), @@ -1842,9 +1844,8 @@ public class SeqPanel extends Panel implements MouseMotionListener, } repaint = av.isSelectionGroupChanged(true); } - if (copycolsel - && (av.getColumnSelection() == null || !av - .isColSelChanged(true))) + if (copycolsel && (av.getColumnSelection() == null + || !av.isColSelChanged(true))) { // the current selection is unset or from a previous message // so import the new colsel. @@ -1870,8 +1871,7 @@ public class SeqPanel extends Panel implements MouseMotionListener, } repaint |= av.isColSelChanged(true); } - if (copycolsel - && av.hasHiddenColumns() + if (copycolsel && av.hasHiddenColumns() && (av.getColumnSelection() == null)) { System.err.println("Bad things"); @@ -1906,8 +1906,8 @@ public class SeqPanel extends Panel implements MouseMotionListener, { row = row < 0 ? ap.av.getRanges().getStartSeq() : row; - ap.scrollTo(ap.av.getRanges().getStartRes(), ap.av.getRanges() - .getStartRes(), row, true, true); + ap.scrollTo(ap.av.getRanges().getStartRes(), + ap.av.getRanges().getStartRes(), row, true, true); } /** @@ -1919,7 +1919,8 @@ public class SeqPanel extends Panel implements MouseMotionListener, { column = column < 0 ? ap.av.getRanges().getStartRes() : column; - ap.scrollTo(column, column, ap.av.getRanges().getStartSeq(), true, true); + ap.scrollTo(column, column, ap.av.getRanges().getStartSeq(), true, + true); } /**