From 2630344183a212a726d06d7d7749de39404018d9 Mon Sep 17 00:00:00 2001 From: kiramt Date: Wed, 15 Nov 2017 16:22:21 +0000 Subject: [PATCH] JAL-2831 Don't show cursor if position in hidden region --- src/jalview/gui/SeqCanvas.java | 79 +++++++++++++++++++++------------------- src/jalview/gui/SeqPanel.java | 8 +++- 2 files changed, 49 insertions(+), 38 deletions(-) diff --git a/src/jalview/gui/SeqCanvas.java b/src/jalview/gui/SeqCanvas.java index 8d9e537..36ae682 100755 --- a/src/jalview/gui/SeqCanvas.java +++ b/src/jalview/gui/SeqCanvas.java @@ -1270,7 +1270,8 @@ public class SeqCanvas extends JComponent implements ViewportListenerI .findIndexWithoutHiddenSeqs(cursorY); // don't do work unless we have to - if (cursor_ypos >= startSeq && cursor_ypos <= endSeq) + if (!av.getAlignment().getHiddenSequences().isHidden(cursorY) + && cursor_ypos >= startSeq && cursor_ypos <= endSeq) { int yoffset = 0; int xoffset = 0; @@ -1281,52 +1282,56 @@ public class SeqCanvas extends JComponent implements ViewportListenerI int cursor_xpos = av.getAlignment().getHiddenColumns() .findColumnPosition(cursorX); - if (av.getWrapAlignment()) + if (av.getAlignment().getHiddenColumns().isVisible(cursorX)) { - // work out the correct offsets for the cursor - int charHeight = av.getCharHeight(); - int charWidth = av.getCharWidth(); - int canvasWidth = getWidth(); - int canvasHeight = getHeight(); - // height gap above each panel - int hgap = charHeight; - if (av.getScaleAboveWrapped()) + if (av.getWrapAlignment()) { - hgap += charHeight; - } + // work out the correct offsets for the cursor + int charHeight = av.getCharHeight(); + int charWidth = av.getCharWidth(); + int canvasWidth = getWidth(); + int canvasHeight = getHeight(); + + // height gap above each panel + int hgap = charHeight; + if (av.getScaleAboveWrapped()) + { + hgap += charHeight; + } - int cWidth = (canvasWidth - labelWidthEast - labelWidthWest) - / charWidth; - int cHeight = av.getAlignment().getHeight() * charHeight; + int cWidth = (canvasWidth - labelWidthEast - labelWidthWest) + / charWidth; + int cHeight = av.getAlignment().getHeight() * charHeight; - endx = startx + cWidth - 1; - int ypos = hgap; // vertical offset + endx = startx + cWidth - 1; + int ypos = hgap; // vertical offset - // iterate down the wrapped panels - while ((ypos <= canvasHeight) && (endx < cursor_xpos)) - { - // update vertical offset - ypos += cHeight + getAnnotationHeight() + hgap; + // iterate down the wrapped panels + while ((ypos <= canvasHeight) && (endx < cursor_xpos)) + { + // update vertical offset + ypos += cHeight + getAnnotationHeight() + hgap; - // update horizontal offset - startx += cWidth; - endx = startx + cWidth - 1; + // update horizontal offset + startx += cWidth; + endx = startx + cWidth - 1; + } + yoffset = ypos; + xoffset = labelWidthWest; } - yoffset = ypos; - xoffset = labelWidthWest; - } - // now check if cursor is within range for x values - if (cursor_xpos >= startx && cursor_xpos <= endx) - { - // get the character the cursor is drawn at - SequenceI seq = av.getAlignment().getSequenceAt(cursorY); - char s = seq.getCharAt(cursorX); + // now check if cursor is within range for x values + if (cursor_xpos >= startx && cursor_xpos <= endx) + { + // get the character the cursor is drawn at + SequenceI seq = av.getAlignment().getSequenceAt(cursorY); + char s = seq.getCharAt(cursorX); - seqRdr.drawCursor(g, s, - xoffset + (cursor_xpos - startx) * av.getCharWidth(), - yoffset + (cursor_ypos - startSeq) * av.getCharHeight()); + seqRdr.drawCursor(g, s, + xoffset + (cursor_xpos - startx) * av.getCharWidth(), + yoffset + (cursor_ypos - startSeq) * av.getCharHeight()); + } } } } diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java index 9a5f6c6..2958f9d 100644 --- a/src/jalview/gui/SeqPanel.java +++ b/src/jalview/gui/SeqPanel.java @@ -427,8 +427,14 @@ public class SeqPanel extends JPanel seqCanvas.cursorY); } } - setStatusMessage(av.getAlignment().getSequenceAt(seqCanvas.cursorY), + + if (!av.getAlignment().getHiddenSequences().isHidden(seqCanvas.cursorY) + && av.getAlignment().getHiddenColumns() + .isVisible(seqCanvas.cursorX)) + { + setStatusMessage(av.getAlignment().getSequenceAt(seqCanvas.cursorY), seqCanvas.cursorX, seqCanvas.cursorY); + } if (repaintNeeded) { -- 1.7.10.2