+ System.out.println("Drag out of range. needs to be clipped");
+
+ }
+ if (rowIndex[0] != toRowIndex[0])
+ {
+ System.out.println("Drag went to another row. needs to be clipped");
+ }
+
+ // rectangular selection on matrix style annotation
+ AlignmentAnnotation cma = av.getAlignment()
+ .getAlignmentAnnotation()[rowIndex[0]];
+
+ int lastX = getColumnForXPos(fromX);
+ int currentX = getColumnForXPos(toX);
+ int fromXc = Math.min(lastX, currentX);
+ int toXc = Math.max(lastX, currentX);
+ ContactListI forFromX = av.getContactList(cma, fromXc);
+ ContactListI forToX = av.getContactList(cma, toXc);
+
+ if (forFromX != null && forToX != null)
+ {
+ ContactGeometry lastXcgeom = new ContactGeometry(forFromX,
+ cma.graphHeight);
+ ContactGeometry.contactInterval lastXci = lastXcgeom
+ .mapFor(rowIndex[1], rowIndex[1] - deltaY);
+
+ ContactGeometry cXcgeom = new ContactGeometry(forToX,
+ cma.graphHeight);
+ ContactGeometry.contactInterval cXci = cXcgeom.mapFor(rowIndex[1],
+ rowIndex[1] - deltaY);
+
+ // mark rectangular region formed by drag
+ System.err.println("Matrix Selection from last(" + fromXc + ",["
+ + lastXci.cStart + "," + lastXci.cEnd + "]) to cur(" + toXc
+ + ",[" + cXci.cStart + "," + cXci.cEnd + "])");
+ int fr, to;
+ fr = Math.min(lastXci.cStart, lastXci.cEnd);
+ to = Math.max(lastXci.cStart, lastXci.cEnd);
+ System.err.println("Marking " + fr + " to " + to);
+ for (int c = fr; c <= to; c++)
+ {
+ if (cma.sequenceRef != null)
+ {
+ int col = cma.sequenceRef.findIndex(c);
+ av.getColumnSelection().addElement(col);
+ }
+ else
+ {
+ av.getColumnSelection().addElement(c);
+ }
+ }
+ fr = Math.min(cXci.cStart, cXci.cEnd);
+ to = Math.max(cXci.cStart, cXci.cEnd);
+ System.err.println("Marking " + fr + " to " + to);
+ for (int c = fr; c <= to; c++)
+ {
+ if (cma.sequenceRef != null)
+ {
+ int col = cma.sequenceRef.findIndex(c);
+ av.getColumnSelection().addElement(col);
+ }
+ else
+ {
+ av.getColumnSelection().addElement(c);
+ }
+ }
+ fr = Math.min(lastX, currentX);
+ to = Math.max(lastX, currentX);
+
+ System.err.println("Marking " + fr + " to " + to);
+ for (int c = fr; c <= to; c++)
+ {
+ av.getColumnSelection().addElement(c);
+ }