X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAnnotationPanel.java;h=e146754bdb7c3a2fa0d50f90bdab25564c6983db;hb=a7bc89415a6749ff89eb97f75fbc950a433a4935;hp=c3b44ce4881e5268b85a21c5d93f0ecfaf53810a;hpb=4ec172090b6db4dda4433e9faf3f658058b994e4;p=jalview.git diff --git a/src/jalview/gui/AnnotationPanel.java b/src/jalview/gui/AnnotationPanel.java index c3b44ce..e146754 100755 --- a/src/jalview/gui/AnnotationPanel.java +++ b/src/jalview/gui/AnnotationPanel.java @@ -57,6 +57,7 @@ import jalview.datamodel.Annotation; import jalview.datamodel.ColumnSelection; import jalview.datamodel.ContactListI; import jalview.datamodel.ContactRange; +import jalview.datamodel.GraphLine; import jalview.datamodel.HiddenColumns; import jalview.datamodel.SequenceI; import jalview.gui.JalviewColourChooser.ColourChooserListener; @@ -598,6 +599,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, } else { + GraphLine thr = aa[graphStretch].getThreshold(); int currentX = getColumnForXPos(evt.getX()); ContactListI forCurrentX = av.getContactList(aa[graphStretch], currentX); @@ -610,11 +612,48 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, int fr, to; fr = Math.min(cXci.cStart, cXci.cEnd); to = Math.max(cXci.cStart, cXci.cEnd); - for (int c = fr; c <= to; c++) + // select corresponding range in segment under mouse { - av.getColumnSelection().addElement(c); + for (int c = fr; c <= to; c++) + { + av.getColumnSelection().addElement(c); + } + av.getColumnSelection().addElement(currentX); + } + // and also select everything lower than the max range adjacent + // (kind of works) + { + int c = fr - 1; + ContactRange cr = forCurrentX.getRangeFor(fr, to); + double cval; + while (c > 0) + { + cval = forCurrentX.getContactAt(c); + if (// cr.getMin() <= cval && + cval <= cr.getMax()) + { + av.getColumnSelection().addElement(c--); + } + else + { + break; + } + } + c = to; + while (c < forCurrentX.getContactHeight()) + { + cval = forCurrentX.getContactAt(c); + if (// cr.getMin() <= cval && + cval <= cr.getMax()) + { + av.getColumnSelection().addElement(c++); + } + else + { + break; + } + } } - av.getColumnSelection().addElement(currentX); } } } @@ -1284,24 +1323,37 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, 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();