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;
getAnnotationPanel().adjustPanelHeight();
Dimension d = calculateIdWidth();
-
- d.setSize(d.width + 4, d.height);
getIdPanel().getIdCanvas().setPreferredSize(d);
hscrollFillerPanel.setPreferredSize(d);
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);
}
* @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();
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++;
}
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);
}
/**
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());
}
/**
}
else
{
- return printUnwrapped(pwidth, pheight, pi, pg, pg);
+ return printUnwrapped(false, pwidth, pheight, pi, pg, pg);
}
}
* @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
{
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))
{
*
* @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())
{
int resWidth = getSeqPanel().seqCanvas
.getWrappedCanvasWidth(pageWidth - idWidth);
+ av.getRanges().setViewportStartAndWidth(0, resWidth);
int totalHeight = cHeight * (maxwidth / resWidth + 1);
/*
* 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);
g.translate(idWidth, 0);
- getSeqPanel().seqCanvas.drawWrappedPanelForPrinting(g, pageWidth - idWidth,
+ getSeqPanel().seqCanvas.drawWrappedPanelForPrinting(g,
+ pageWidth - idWidth,
totalHeight, 0);
if ((pageNumber * pageHeight) < totalHeight)
* 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
{
if (graphics != null)
{
- printUnwrapped(aDimension.getWidth(), aDimension.getHeight(), 0,
+ printUnwrapped(exportSeqPanel, aDimension.getWidth(),
+ aDimension.getHeight(), 0,
graphics, graphics);
im.writeImage();
}
}
+ /**
+ * Answers the height of the entire alignment in pixels, assuming it is in
+ * wrapped mode
+ *
+ * @return
+ */
int getWrappedHeight()
{
int seqPanelWidth = getSeqPanel().seqCanvas.getWidth();
int annotationHeight = 0;
if (av.isShowAnnotation())
{
+ hgap += SeqCanvas.SEQS_ANNOTATION_GAP;
annotationHeight = getAnnotationPanel().adjustPanelHeight();
}