+
+ if (dragMode == DragMode.Undefined)
+
+ {
+ /*
+ * drag is diagonal - defer deciding whether to
+ * treat as up/down or left/right
+ */
+ return;
+ }
+
+ try
+ {
+ if (dragMode == DragMode.Resize)
+ {
+ /*
+ * resize graph annotation if mouse was dragged up or down
+ */
+ int deltaY = mouseDragLastY - evt.getY();
+ if (deltaY != 0)
+ {
+ AlignmentAnnotation graphAnnotation = av.getAlignment()
+ .getAlignmentAnnotation()[graphStretch];
+ int newHeight = Math.max(0, graphAnnotation.graphHeight + deltaY);
+ if (notJustOne)
+ {
+ for (AlignmentAnnotation similar : av.getAlignment()
+ .findAnnotations(null, graphAnnotation.getCalcId(),
+ graphAnnotation.label))
+ {
+ similar.graphHeight = newHeight;
+ }
+
+ }
+ else
+ {
+ graphAnnotation.graphHeight = newHeight;
+ }
+ adjustPanelHeight();
+ ap.paintAlignment(false, false);
+ }
+ }
+ else if (dragMode == DragMode.MatrixSelect)
+ {
+ /*
+ * TODO draw a rubber band for range
+ */
+ mouseDragLastX = x;
+ mouseDragLastY = y;
+ ap.paintAlignment(false, false);
+ }
+ else
+ {
+ /*
+ * for mouse drag left or right, delegate to
+ * ScalePanel to adjust the column selection
+ */
+ ap.getScalePanel().mouseDragged(evt);
+ }
+ } finally
+ {
+ mouseDragLastX = x;
+ mouseDragLastY = y;
+ }
+ }
+
+ public void matrixSelectRange(MouseEvent evt)
+ {
+ /*
+ * get geometry of drag
+ */
+ int fromY = Math.min(firstDragY, evt.getY());
+ int toY = Math.max(firstDragY, evt.getY());
+ int fromX = Math.min(firstDragX, evt.getX());
+ int toX = Math.max(firstDragX, evt.getX());
+
+ int deltaY = toY - fromY;
+ int deltaX = toX - fromX;
+
+ int[] rowIndex = getRowIndexAndOffset(fromY,
+ av.getAlignment().getAlignmentAnnotation());
+ int[] toRowIndex = getRowIndexAndOffset(toY,
+ av.getAlignment().getAlignmentAnnotation());
+
+ if (rowIndex == null || toRowIndex == null)
+ {
+ 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)