X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAnnotationPanel.java;h=8e040488d39b00b0ed4dff382f20bb1c1bf7f7bb;hb=3176c105e6751e32129840f5bfa410921a9c25e6;hp=2177a269aba985e3e1965f73c8deddb3f6e3b7c9;hpb=f3d6a13271e3f34dfb4e40d6a2a7df1d392f8014;p=jalview.git diff --git a/src/jalview/gui/AnnotationPanel.java b/src/jalview/gui/AnnotationPanel.java index 2177a26..8e04048 100755 --- a/src/jalview/gui/AnnotationPanel.java +++ b/src/jalview/gui/AnnotationPanel.java @@ -72,6 +72,7 @@ import jalview.util.MessageManager; import jalview.util.Platform; import jalview.viewmodel.ViewportListenerI; import jalview.viewmodel.ViewportRanges; +import jalview.ws.datamodel.MappableContactMatrixI; import jalview.ws.datamodel.alphafold.PAEContactMatrix; /** @@ -605,7 +606,8 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, } else { - // no row (or row that can be adjusted) was pressed. Simulate a ruler click + // no row (or row that can be adjusted) was pressed. Simulate a ruler + // click ap.getScalePanel().mousePressed(evt); } } @@ -666,24 +668,48 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, if (matrix.hasGroups()) { SequenceI rseq = clicked.sequenceRef; - BitSet grp = matrix.getGroupsFor(currentX); + BitSet grp = new BitSet(); + grp.or(matrix.getGroupsFor(currentX)); // TODO: cXci needs to be mapped to real groups for (int c = fr; c <= to; c++) { BitSet additionalGrp = matrix.getGroupsFor(c); grp.or(additionalGrp); } + HiddenColumns hc = av.getAlignment().getHiddenColumns(); - for (int p = grp.nextSetBit(0); p >= 0; p = grp + ColumnSelection cs = av.getColumnSelection(); + + for (int p=grp.nextSetBit(0); p >= 0; p = grp .nextSetBit(p + 1)) { - int offp = (rseq != null) - ? rseq.findIndex(rseq.getStart() - 1 + p) - : p; - - if (!av.hasHiddenColumns() || hc.isVisible(offp)) + if (matrix instanceof MappableContactMatrixI) { - av.getColumnSelection().addElement(offp); + // find the end of this run of set bits + int nextp = grp.nextClearBit(p)-1; + int[] pos = ((MappableContactMatrixI)matrix).getMappedPositionsFor(rseq, p,nextp); + p=nextp; + + if (pos!=null) + { + for (int pos_p = pos[0];pos_p<=pos[1];pos_p++) + { + int col = rseq.findIndex(pos_p)-1; + if (col>=0 && (!av.hasHiddenColumns() || hc.isVisible(col))) + { + cs.addElement(col); + } + } + } + } else { + int offp = (rseq != null) + ? rseq.findIndex(rseq.getStart() - 1 + p) + : p; + + if (!av.hasHiddenColumns() || hc.isVisible(offp)) + { + cs.addElement(offp); + } } } } @@ -739,27 +765,27 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, } c--; } - c = to; - while (c < forCurrentX.getContactHeight()) + c = to; + while (c < forCurrentX.getContactHeight()) + { + cval = forCurrentX.getContactAt(c); + if (// cr.getMin() <= cval && + cval <= thresh) { - cval = forCurrentX.getContactAt(c); - if (// cr.getMin() <= cval && - cval <= thresh) - { - int[] cols = forCurrentX.getMappedPositionsFor(c, c); - if (cols != null) - { - av.getColumnSelection().addRangeOfElements(cols, true); - } - } - else + int[] cols = forCurrentX.getMappedPositionsFor(c, c); + if (cols != null) { - break; + av.getColumnSelection().addRangeOfElements(cols, true); } - c++; - } + else + { + break; + } + c++; + } + } } } ap.paintAlignment(false, false); @@ -767,6 +793,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, av.sendSelection(); return true; } + /** * Construct and display a context menu at the right-click position * @@ -1031,7 +1058,8 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, } if (rowIndex[0] != toRowIndex[0]) { - jalview.bin.Console.trace("Drag went to another row. needs to be clipped"); + jalview.bin.Console + .trace("Drag went to another row. needs to be clipped"); } // rectangular selection on matrix style annotation @@ -1073,16 +1101,16 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, for (int pair = 0; pair < mappedPos.length; pair += 2) { for (int c = mappedPos[pair]; c <= mappedPos[pair + 1]; c++) -// { -// if (cma.sequenceRef != null) -// { -// int col = cma.sequenceRef.findIndex(cma.sequenceRef.getStart()+c); -// av.getColumnSelection().addElement(col); -// } -// else - { - av.getColumnSelection().addElement(c); - } + // { + // if (cma.sequenceRef != null) + // { + // int col = cma.sequenceRef.findIndex(cma.sequenceRef.getStart()+c); + // av.getColumnSelection().addElement(col); + // } + // else + { + av.getColumnSelection().addElement(c); + } } } // and again for most recent corner of drag @@ -1094,16 +1122,17 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, for (int pair = 0; pair < mappedPos.length; pair += 2) { jalview.bin.Console.trace("Marking " + fr + " to " + to - + " mapping to sequence positions " + mappedPos[pair] + " to " - + mappedPos[pair+1]); + + " mapping to sequence positions " + mappedPos[pair] + + " to " + mappedPos[pair + 1]); for (int c = mappedPos[pair]; c <= mappedPos[pair + 1]; c++) { -// if (cma.sequenceRef != null) -// { -// int col = cma.sequenceRef.findIndex(cma.sequenceRef.getStart()+c); -// av.getColumnSelection().addElement(col); -// } -// else + // if (cma.sequenceRef != null) + // { + // int col = + // cma.sequenceRef.findIndex(cma.sequenceRef.getStart()+c); + // av.getColumnSelection().addElement(col); + // } + // else { av.getColumnSelection().addElement(c); } @@ -1280,7 +1309,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, ContactRange cr = clist.getRangeFor(ci.cStart, ci.cEnd); tooltip = "Contact from " + clist.getPosition() + ", [" + ci.cStart + " - " + ci.cEnd + "]" + "
Mean:" + cr.getMean(); - + int col = ann.sequenceRef.findPosition(column); int[][] highlightPos; int[] mappedPos = clist.getMappedPositionsFor(ci.cStart, ci.cEnd); @@ -1453,8 +1482,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, return; } } - imgWidth = (av.getRanges().getEndRes() - av.getRanges().getStartRes() - + 1) * av.getCharWidth(); + updateFadedImageWidth(); if (imgWidth < 1) { return; @@ -1522,6 +1550,13 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, g.drawImage(image, 0, 0, this); } + public void updateFadedImageWidth() + { + imgWidth = (av.getRanges().getEndRes() - av.getRanges().getStartRes() + + 1) * av.getCharWidth(); + + } + /** * set true to enable redraw timing debug output on stderr */ @@ -1697,6 +1732,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, @Override public int getFadedImageWidth() { + updateFadedImageWidth(); return imgWidth; }