private MouseWheelListener[] _mwl;
+ private boolean notJustOne;
+
/**
* Creates a new AnnotationPanel object.
*
* mostly vertical drag
*/
dragMode = DragMode.Resize;
+ notJustOne = evt.isShiftDown();
/*
* but could also be a matrix drag
AlignmentAnnotation graphAnnotation = av.getAlignment()
.getAlignmentAnnotation()[graphStretch];
int newHeight = Math.max(0, graphAnnotation.graphHeight + deltaY);
- graphAnnotation.graphHeight = newHeight;
+ 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);
}
*/
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());
AlignmentAnnotation cma = av.getAlignment()
.getAlignmentAnnotation()[rowIndex[0]];
- int fromXp = Math.min(firstDragX, evt.getX());
- int toXp = Math.max(firstDragX, evt.getX());
- int lastX = getColumnForXPos(fromXp);
- int currentX = getColumnForXPos(toXp);
- ContactListI forLastX = av.getContactList(cma, lastX);
- ContactListI forCurrentX = av.getContactList(cma, currentX);
- if (forLastX != null && forCurrentX != null)
+ 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(forLastX,
+ ContactGeometry lastXcgeom = new ContactGeometry(forFromX,
cma.graphHeight);
- ContactGeometry.contactInterval lastXci = lastXcgeom.mapFor(
- rowIndex[1],
- rowIndex[1] + ((fromY == firstDragY) ? -deltaY : deltaY));
- ContactGeometry cXcgeom = new ContactGeometry(forCurrentX,
+ 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);
+ rowIndex[1] - deltaY);
+
// mark rectangular region formed by drag
- System.err.println("Matrix Selection from last(" + lastXci.cStart
- + "," + lastXci.cEnd + ") to cur(" + cXci.cStart + ","
- + cXci.cEnd + ")");
+ 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++)
{
- av.getColumnSelection().addElement(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++)
{
- av.getColumnSelection().addElement(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);
static int[] getRowIndexAndOffset(int yPos, AlignmentAnnotation[] aa)
{
int[] res = new int[2];
+ res[0] = -1;
+ res[1] = 0;
if (aa == null)
{
- res[0] = -1;
- res[1] = 0;
return res;
}
int row = -1;
int height = 0, lheight = 0;
-
for (int i = 0; i < aa.length; i++)
{
if (aa[i].visible)
if (clist != null)
{
ContactGeometry cgeom = new ContactGeometry(clist, ann.graphHeight);
- ContactGeometry.contactInterval ci = cgeom.mapFor(rowAndOffset,
- rowAndOffset);
- tooltip += "Contact from " + ci.cStart + " to " + ci.cEnd;
-
- // ap.getStructureSelectionManager().mouseOverSequence(ann.sequenceRef,
- // new int[] {column, ci.cStart,ci.cEnd}, -1, null)
+ ContactGeometry.contactInterval ci = cgeom.mapFor(rowAndOffset);
+ ContactRange cr = clist.getRangeFor(ci.cStart, ci.cEnd);
+ tooltip = "Contact from " + clist.getPosition() + ", [" + ci.cStart
+ + " - " + ci.cEnd + "]" + "<br/>Mean:" + cr.getMean();
+ int col = ann.sequenceRef.findPosition(column);
+ ap.getStructureSelectionManager()
+ .highlightPositionsOn(ann.sequenceRef, new int[][]
+ { new int[] { col, col },
+ new int[]
+ { ci.cStart, ci.cEnd } }, null);
}
}
return tooltip;
if (image == null || imgWidth != image.getWidth(this)
|| image.getHeight(this) != getHeight())
{
- try
- {
- image = new BufferedImage(imgWidth,
- ap.getAnnotationPanel().getHeight(),
- BufferedImage.TYPE_INT_RGB);
- } catch (OutOfMemoryError oom)
+ boolean tried = false;
+ image = null;
+ while (image == null && !tried)
{
try
{
- System.gc();
- } catch (Exception x)
+ image = new BufferedImage(imgWidth,
+ ap.getAnnotationPanel().getHeight(),
+ BufferedImage.TYPE_INT_RGB);
+ tried = true;
+ } catch (IllegalArgumentException exc)
{
+ System.err.println(
+ "Serious issue with viewport geometry imgWidth requested was "
+ + imgWidth);
+ return;
+ } catch (OutOfMemoryError oom)
+ {
+ try
+ {
+ System.gc();
+ } catch (Exception x)
+ {
+ }
+ ;
+ new OOMWarning(
+ "Couldn't allocate memory to redraw screen. Please restart Jalview",
+ oom);
+ return;
}
- ;
- new OOMWarning(
- "Couldn't allocate memory to redraw screen. Please restart Jalview",
- oom);
- return;
+
}
gg = (Graphics2D) image.getGraphics();