X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignmentPanel.java;h=f7c80005ac5fad51880231f5481cc4e4ecdb2236;hb=2a6bee646361a41a57c7a3868a966635c3d25a27;hp=82e2113eccc5f31bb39636ae7dd3b6347985e1a1;hpb=6007f0f4e720ede8ca8ff70e866f2f2b870cde3e;p=jalview.git diff --git a/src/jalview/gui/AlignmentPanel.java b/src/jalview/gui/AlignmentPanel.java index 82e2113..f7c8000 100644 --- a/src/jalview/gui/AlignmentPanel.java +++ b/src/jalview/gui/AlignmentPanel.java @@ -73,6 +73,11 @@ import javax.swing.SwingUtilities; public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListener, Printable, AlignmentViewPanel, ViewportListenerI { + /* + * spare space in pixels between sequence id and alignment panel + */ + private static final int ID_WIDTH_PADDING = 4; + public AlignViewport av; OverviewPanel overviewPanel; @@ -233,8 +238,6 @@ public class AlignmentPanel extends GAlignmentPanel implements getAnnotationPanel().adjustPanelHeight(); Dimension d = calculateIdWidth(); - - d.setSize(d.width + 4, d.height); getIdPanel().getIdCanvas().setPreferredSize(d); hscrollFillerPanel.setPreferredSize(d); @@ -255,7 +258,8 @@ public class AlignmentPanel extends GAlignmentPanel implements if (av.getIdWidth() < 0) { int afwidth = (alignFrame != null ? alignFrame.getWidth() : 300); - int maxwidth = Math.max(20, Math.min(afwidth - 200, 2 * afwidth / 3)); + int idWidth = Math.min(afwidth - 200, 2 * afwidth / 3); + int maxwidth = Math.max(IdwidthAdjuster.MIN_ID_WIDTH, idWidth); r = calculateIdWidth(maxwidth); av.setIdWidth(r.width); } @@ -277,7 +281,7 @@ public class AlignmentPanel extends GAlignmentPanel implements * @return Dimension giving the maximum width of the alignment label panel * that should be used. */ - public Dimension calculateIdWidth(int maxwidth) + protected Dimension calculateIdWidth(int maxwidth) { Container c = new Container(); @@ -287,19 +291,13 @@ public class AlignmentPanel extends GAlignmentPanel implements AlignmentI al = av.getAlignment(); int i = 0; int idWidth = 0; - String id; while ((i < al.getHeight()) && (al.getSequenceAt(i) != null)) { SequenceI s = al.getSequenceAt(i); - - id = s.getDisplayId(av.getShowJVSuffix()); - - if (fm.stringWidth(id) > idWidth) - { - idWidth = fm.stringWidth(id); - } - + String id = s.getDisplayId(av.getShowJVSuffix()); + int stringWidth = fm.stringWidth(id); + idWidth = Math.max(idWidth, stringWidth); i++; } @@ -313,18 +311,16 @@ public class AlignmentPanel extends GAlignmentPanel implements while (i < al.getAlignmentAnnotation().length) { String label = al.getAlignmentAnnotation()[i].label; - - if (fm.stringWidth(label) > idWidth) - { - idWidth = fm.stringWidth(label); - } - + int stringWidth = fm.stringWidth(label); + idWidth = Math.max(idWidth, stringWidth); i++; } } - return new Dimension( - maxwidth < 0 ? idWidth : Math.min(maxwidth, idWidth), 12); + int w = maxwidth < 0 ? idWidth : Math.min(maxwidth, idWidth); + w += ID_WIDTH_PADDING; + + return new Dimension(w, 12); } /** @@ -532,7 +528,7 @@ public class AlignmentPanel extends GAlignmentPanel implements addNotify(); // TODO: many places call this method and also paintAlignment with various // different settings. this means multiple redraws are triggered... - paintAlignment(true, false); + paintAlignment(true, av.needToUpdateStructureViews()); } /** @@ -637,16 +633,9 @@ public class AlignmentPanel extends GAlignmentPanel implements } else { - int width = av.getAlignment().getWidth(); + int width = av.getAlignment().getVisibleWidth(); int height = av.getAlignment().getHeight(); - if (av.hasHiddenColumns()) - { - // reset the width to exclude hidden columns - width = av.getAlignment().getHiddenColumns() - .absoluteToVisibleColumn(width); - } - hextent = getSeqPanel().seqCanvas.getWidth() / av.getCharWidth(); vextent = getSeqPanel().seqCanvas.getHeight() / av.getCharHeight(); @@ -907,7 +896,7 @@ public class AlignmentPanel extends GAlignmentPanel implements } else { - return printUnwrapped(pwidth, pheight, pi, pg, pg); + return printUnwrapped(false, pwidth, pheight, pi, pg, pg); } } @@ -930,7 +919,8 @@ public class AlignmentPanel extends GAlignmentPanel implements * @return * @throws PrinterException */ - public int printUnwrapped(int pageWidth, int pageHeight, int pageIndex, + public int printUnwrapped(boolean exportSeqPanel, int pageWidth, + int pageHeight, int pageIndex, Graphics idGraphics, Graphics alignmentGraphics) throws PrinterException { @@ -958,8 +948,8 @@ public class AlignmentPanel extends GAlignmentPanel implements final int totalSeq = (pageHeight - scaleHeight) / charHeight - 1; - final int alignmentWidth = av.getAlignment().getWidth(); - final int pagesWide = (alignmentWidth / totalRes) + 1; + final int alignmentWidth = av.getAlignment().getVisibleWidth(); + int pagesWide = (alignmentWidth / totalRes) + 1; final int startRes = (pageIndex % pagesWide) * totalRes; final int endRes = Math.min(startRes + totalRes - 1, @@ -1006,14 +996,17 @@ public class AlignmentPanel extends GAlignmentPanel implements idGraphics.setFont(av.getFont()); idGraphics.translate(0, -scaleHeight); - /* - * draw the sequences, offset for scale height, and id width (if using a - * single graphics context), then reset to (0, scale height) - */ - alignmentGraphics.translate(alignmentGraphicsOffset, scaleHeight); - getSeqPanel().seqCanvas.drawPanelForPrinting(alignmentGraphics, startRes, - endRes, startSeq, endSeq - 1); - alignmentGraphics.translate(-alignmentGraphicsOffset, 0); + if (!exportSeqPanel) + { + /* + * draw the sequences, offset for scale height, and id width (if using a + * single graphics context), then reset to (0, scale height) + */ + alignmentGraphics.translate(alignmentGraphicsOffset, scaleHeight); + getSeqPanel().seqCanvas.drawPanelForPrinting(alignmentGraphics, + startRes, endRes, startSeq, endSeq - 1); + alignmentGraphics.translate(-alignmentGraphicsOffset, 0); + } if (av.isShowAnnotation() && (endSeq == alignmentHeight)) { @@ -1056,9 +1049,12 @@ public class AlignmentPanel extends GAlignmentPanel implements * * @throws PrinterException */ - public int printWrappedAlignment(int pageWidth, int pageHeight, int pageNumber, + public int printWrappedAlignment(int pageWidth, + int pageHeight, int pageNumber, Graphics g) throws PrinterException { + getSeqPanel().seqCanvas.calculateWrappedGeometry(getWidth(), + getHeight()); int annotationHeight = 0; if (av.isShowAnnotation()) { @@ -1076,15 +1072,11 @@ public class AlignmentPanel extends GAlignmentPanel implements int idWidth = getVisibleIdWidth(false); - int maxwidth = av.getAlignment().getWidth(); - if (av.hasHiddenColumns()) - { - maxwidth = av.getAlignment().getHiddenColumns() - .absoluteToVisibleColumn(maxwidth) - 1; - } + int maxwidth = av.getAlignment().getVisibleWidth(); int resWidth = getSeqPanel().seqCanvas .getWrappedCanvasWidth(pageWidth - idWidth); + av.getRanges().setViewportStartAndWidth(0, resWidth); int totalHeight = cHeight * (maxwidth / resWidth + 1); @@ -1096,8 +1088,8 @@ public class AlignmentPanel extends GAlignmentPanel implements /* * method: print the whole wrapped alignment, but with a clip region that * is restricted to the requested page; this supports selective print of - * single pages or ranges, (at the cost of some repeated processing in - * the 'normal' case, when all pages are printed) + * single pages or ranges, (at the cost of repeated processing in the + * 'normal' case, when all pages are printed) */ g.translate(0, -pageNumber * pageHeight); @@ -1111,7 +1103,8 @@ public class AlignmentPanel extends GAlignmentPanel implements g.translate(idWidth, 0); - getSeqPanel().seqCanvas.drawWrappedPanelForPrinting(g, pageWidth - idWidth, + getSeqPanel().seqCanvas.drawWrappedPanelForPrinting(g, + pageWidth - idWidth, totalHeight, 0); if ((pageNumber * pageHeight) < totalHeight) @@ -1144,25 +1137,33 @@ public class AlignmentPanel extends GAlignmentPanel implements * be returned * @return */ - public int getVisibleIdWidth(boolean onscreen) + protected int getVisibleIdWidth(boolean onscreen) { // see if rendering offscreen - check preferences and calc width accordingly if (!onscreen && Cache.getDefault("FIGURE_AUTOIDWIDTH", false)) { - return calculateIdWidth(-1).width + 4; + return calculateIdWidth(-1).width; } - Integer idwidth = null; - if (onscreen || (idwidth = Cache - .getIntegerProperty("FIGURE_FIXEDIDWIDTH")) == null) + Integer idwidth = onscreen ? null + : Cache.getIntegerProperty("FIGURE_FIXEDIDWIDTH"); + if (idwidth != null) { - int w = getIdPanel().getWidth(); - return (w > 0 ? w : calculateIdWidth().width + 4); + return idwidth.intValue() + ID_WIDTH_PADDING; } - return idwidth.intValue() + 4; + + int w = getIdPanel().getWidth(); + return (w > 0 ? w : calculateIdWidth().width); } void makeAlignmentImage(jalview.util.ImageMaker.TYPE type, File file) { + makeAlignmentImage(type, file, jalview.bin.Cache + .getDefault("IMAGE_EXPORT_NOSEQUENCES", false)); + } + + public void makeAlignmentImage(jalview.util.ImageMaker.TYPE type, + File file, boolean exportSeqPanel) + { int boarderBottomOffset = 5; long pSessionId = System.currentTimeMillis(); headless = (System.getProperty("java.awt.headless") != null @@ -1218,7 +1219,8 @@ public class AlignmentPanel extends GAlignmentPanel implements { if (graphics != null) { - printUnwrapped(aDimension.getWidth(), aDimension.getHeight(), 0, + printUnwrapped(exportSeqPanel, aDimension.getWidth(), + aDimension.getHeight(), 0, graphics, graphics); im.writeImage(); } @@ -1243,12 +1245,7 @@ public class AlignmentPanel extends GAlignmentPanel implements public AlignmentDimension getAlignmentDimension() { - int maxwidth = av.getAlignment().getWidth(); - if (av.hasHiddenColumns()) - { - maxwidth = av.getAlignment().getHiddenColumns() - .absoluteToVisibleColumn(maxwidth); - } + int maxwidth = av.getAlignment().getVisibleWidth(); int height = ((av.getAlignment().getHeight() + 1) * av.getCharHeight()) + getScalePanel().getHeight(); @@ -1431,6 +1428,12 @@ public class AlignmentPanel extends GAlignmentPanel implements } + /** + * Answers the height of the entire alignment in pixels, assuming it is in + * wrapped mode + * + * @return + */ int getWrappedHeight() { int seqPanelWidth = getSeqPanel().seqCanvas.getWidth(); @@ -1455,6 +1458,7 @@ public class AlignmentPanel extends GAlignmentPanel implements int annotationHeight = 0; if (av.isShowAnnotation()) { + hgap += SeqCanvas.SEQS_ANNOTATION_GAP; annotationHeight = getAnnotationPanel().adjustPanelHeight(); }