X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAnnotationPanel.java;h=8321741627876bf99dcb3d5746b139f758527314;hb=6081884ff7c5a50b2a9f6615f7a864bdc5699bf2;hp=9970702c8045e6c05bf8e8103153e16f238d6693;hpb=beb2fee66dde629e3bbb7febb38d0116e1a64df2;p=jalview.git diff --git a/src/jalview/gui/AnnotationPanel.java b/src/jalview/gui/AnnotationPanel.java index 9970702..8321741 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; /** @@ -667,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); + } } } } @@ -712,7 +737,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, if (evt.isControlDown() && PAEContactMatrix.PAEMATRIX.equals(clicked.getCalcId())) { - int c = fr - 1; + int c = fr; ContactRange cr = forCurrentX.getRangeFor(fr, to); double cval; // TODO: could use GraphLine instead of arbitrary picking @@ -722,7 +747,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, // controls feathering - what other elements in row/column // should we select double thresh = cr.getMean() + (cr.getMax() - cr.getMean()) * .15; - while (c > 0) + while (c >= 0) { cval = forCurrentX.getContactAt(c); if (// cr.getMin() <= cval && @@ -1053,12 +1078,12 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, ContactGeometry lastXcgeom = new ContactGeometry(forFromX, cma.graphHeight); ContactGeometry.contactInterval lastXci = lastXcgeom - .mapFor(rowIndex[1], rowIndex[1] - deltaY); + .mapFor(rowIndex[1], rowIndex[1] + deltaY); ContactGeometry cXcgeom = new ContactGeometry(forToX, cma.graphHeight); ContactGeometry.contactInterval cXci = cXcgeom.mapFor(rowIndex[1], - rowIndex[1] - deltaY); + rowIndex[1] + deltaY); // mark rectangular region formed by drag jalview.bin.Console.trace("Matrix Selection from last(" + fromXc @@ -1222,7 +1247,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, { row = i; res[0] = row; - res[1] = height - yPos; + res[1] = yPos-lheight; break; } } @@ -1276,6 +1301,10 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, // TODO abstract tooltip generator so different implementations can be built if (ann.graph == AlignmentAnnotation.CONTACT_MAP) { + if (rowAndOffset>=ann.graphHeight) + { + return null; + } ContactListI clist = av.getContactList(ann, column); if (clist != null) {