X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignmentPanel.java;h=fe6477e9b5bff1b8c348a03ba342027aaf9db6a4;hb=1140532d01b32b648e7e5b17ea717ae790625f8f;hp=31277319d6333abfe6c5be9e65270eb2f8942a8c;hpb=9366429b10f6d8a664eff010e86af318230c246e;p=jalview.git diff --git a/src/jalview/gui/AlignmentPanel.java b/src/jalview/gui/AlignmentPanel.java index 3127731..fe6477e 100644 --- a/src/jalview/gui/AlignmentPanel.java +++ b/src/jalview/gui/AlignmentPanel.java @@ -256,8 +256,10 @@ public class AlignmentPanel extends GAlignmentPanel implements /** * Calculates the width of the alignment labels based on the displayed names - * and any bounds on label width set in preferences. The calculated width is - * also set as a property of the viewport. + * and any bounds on label width set in preferences. + * + * The calculated width is set as a property of the viewport and the layout is + * updated. * * @return Dimension giving the maximum width of the alignment label panel * that should be used. @@ -294,10 +296,19 @@ public class AlignmentPanel extends GAlignmentPanel implements public Dimension calculateDefaultAlignmentIdWidth() { + return calculateIdWidth(-1, false, false); + } + /** + * pre 2.11.3 Id width calculation - used when importing old projects only + * @return + */ + public int getLegacyIdWidth() + { int afwidth = (alignFrame != null ? alignFrame.getWidth() : 300); int idWidth = Math.min(afwidth - 200, 2 * afwidth / 3); int maxwidth = Math.max(IdwidthAdjuster.MIN_ID_WIDTH, idWidth); - return calculateIdWidth(-1, false, false); + Dimension w = calculateIdWidthOrLegacy(true, maxwidth, false, false); + return w.width; } /** @@ -324,13 +335,27 @@ public class AlignmentPanel extends GAlignmentPanel implements * @param maxwidth * -1 or maximum width allowed for IdWidth * @param includeAnnotations - when true includes width of any additional marks in annotation id panel - * @param visibleOnly - + * @param visibleOnly - when true, ignore label widths for hidden annotation rows * @return Dimension giving the maximum width of the alignment label panel * that should be used. */ public Dimension calculateIdWidth(int maxwidth, boolean includeAnnotations, boolean visibleOnly) { + return calculateIdWidthOrLegacy(false, maxwidth, includeAnnotations, visibleOnly); + } + + /** + * legacy mode or post 2.11.3 ID width calculation + * @param legacy - uses annotation labels, not rendered label width (excludes additional decorators) + * @param maxwidth + * @param includeAnnotations + * @param visibleOnly + * @return + */ + private Dimension calculateIdWidthOrLegacy(boolean legacy, int maxwidth, + boolean includeAnnotations, boolean visibleOnly) + { Container c = new Container(); FontMetrics fm = c.getFontMetrics( @@ -352,10 +377,29 @@ public class AlignmentPanel extends GAlignmentPanel implements // Also check annotation label widths if (includeAnnotations && al.getAlignmentAnnotation() != null) { - AnnotationLabels aal = getAlabels(); - int stringWidth = aal.drawLabels(null, false, idWidth, false, false, - fm, !visibleOnly); - idWidth = Math.max(idWidth, stringWidth); + fm = c.getFontMetrics(getAlabels().getFont()); + + if (!legacy || Jalview.isHeadlessMode()) + { + AnnotationLabels aal = getAlabels(); + int stringWidth = aal.drawLabels(null, false, idWidth, false, false, + fm, !visibleOnly); + idWidth = Math.max(idWidth, stringWidth); + } + else + { + for (i = 0; i < al.getAlignmentAnnotation().length; i++) + { + AlignmentAnnotation aa = al.getAlignmentAnnotation()[i]; + if (visibleOnly && !aa.visible) + { + continue; + } + String label = aa.label; + int stringWidth = fm.stringWidth(label); + idWidth = Math.max(idWidth, stringWidth); + } + } } int w = maxwidth < 0 ? idWidth : Math.min(maxwidth, idWidth); @@ -562,7 +606,7 @@ public class AlignmentPanel extends GAlignmentPanel implements // this is called after loading new annotation onto alignment if (alignFrame.getHeight() == 0) { - jalview.bin.Console.outPrintln("NEEDS FIXING"); + jalview.bin.Console.error("adjustAnnotationHeight called with zero height alignment window"); } validateAnnotationDimensions(true); addNotify(); @@ -595,7 +639,7 @@ public class AlignmentPanel extends GAlignmentPanel implements Dimension e = idPanel.getSize(); int idWidth = e.width; boolean manuallyAdjusted = this.getIdPanel().getIdCanvas() - .manuallyAdjusted(); + .isManuallyAdjusted(); annotationScroller.setPreferredSize(new Dimension( manuallyAdjusted ? idWidth : annotationScroller.getWidth(), annotationHeight)); @@ -1229,7 +1273,7 @@ public class AlignmentPanel extends GAlignmentPanel implements } int w = getIdPanel().getWidth(); - w = this.calculateIdWidth(-1, true, true).width; + w = calculateIdWidth(-1, true, true).width; return (w > 0 ? w : calculateIdWidth().width); } @@ -1857,5 +1901,4 @@ public class AlignmentPanel extends GAlignmentPanel implements overviewPanel = null; } } - }