/**
* update alignment layout for viewport settings
- *
- * @param wrap
- * DOCUMENT ME!
*/
public void updateLayout()
{
idSpaceFillerPanel1.setVisible(!wrap);
+ AlignViewportI complement = av.getCodingComplement();
+ if (complement != null)
+ {
+ SplitFrame splitFrame = (SplitFrame) alignFrame
+ .getSplitViewContainer();
+ splitFrame.adjustLayout();
+ }
repaint();
}
if (av.isShowAnnotation())
{
- pagesHigh += getAnnotationPanel().adjustPanelHeight() + 3;
+ pagesHigh += getAnnotationPanel().adjustPanelHeight()
+ + SeqCanvas.SEQS_ANNOTATION_GAP;
}
pagesHigh /= pageHeight;
{
return Printable.NO_SUCH_PAGE;
}
- final int alignmentDrawnHeight = (endSeq - startSeq) * charHeight + 3;
+ final int alignmentDrawnHeight = (endSeq - startSeq + 1) * charHeight;
/*
* draw the Scale at horizontal offset, then reset to top left (0, 0)
* then reset to (0, scale height)
*/
int offset = getAlabels().getScrollOffset();
+ int yShift = alignmentDrawnHeight + SeqCanvas.SEQS_ANNOTATION_GAP;
idGraphics.translate(0, -offset);
- idGraphics.translate(0, alignmentDrawnHeight);
+ idGraphics.translate(0, yShift);
getAlabels().drawComponent(idGraphics, idWidth);
- idGraphics.translate(0, -alignmentDrawnHeight);
+ idGraphics.translate(0, -yShift);
/*
* draw the annotations starting at
* (idOffset, alignmentHeight) from (0, scaleHeight)
*/
alignmentGraphics.translate(alignmentGraphicsOffset,
- alignmentDrawnHeight);
+ yShift);
getAnnotationPanel().renderer.drawComponent(getAnnotationPanel(), av,
alignmentGraphics, -1, startRes, endRes + 1);
/*
- * reset to left margin
+ * reset to left margin below annotation
+ */
+ int justDrawn = getAnnotationPanel().renderer.getLastDrawnHeight();
+ alignmentGraphics.translate(-alignmentGraphicsOffset, justDrawn);
+ }
+ else
+ {
+ /*
+ * shift graphics to position after drawn sequences
*/
- alignmentGraphics.translate(-alignmentGraphicsOffset, 0);
+ alignmentGraphics.translate(0, alignmentDrawnHeight);
}
return Printable.PAGE_EXISTS;
public int printWrappedAlignment(int pageWidth, int pageHeight, int pageNumber,
Graphics g, boolean clipToPage)
{
- getSeqPanel().seqCanvas.calculateWrappedGeometry(getWidth(),
- getHeight());
+ final SeqCanvas seqCanvas = getSeqPanel().seqCanvas;
+ seqCanvas.calculateWrappedGeometry(seqCanvas.getWidth(),
+ seqCanvas.getHeight());
int annotationHeight = 0;
if (av.isShowAnnotation())
{
int maxwidth = av.getAlignment().getVisibleWidth();
- int resWidth = getSeqPanel().seqCanvas
+ int resWidth = seqCanvas
.getWrappedCanvasWidth(pageWidth - idWidth);
av.getRanges().setViewportStartAndWidth(0, resWidth);
idCanvas.drawIdsWrapped((Graphics2D) g, av, 0, totalHeight);
g.translate(idWidth, 0);
- getSeqPanel().seqCanvas.drawWrappedPanelForPrinting(g, pageWidth - idWidth,
+ seqCanvas.drawWrappedPanelForPrinting(g, pageWidth - idWidth,
totalHeight, 0);
g.translate(-idWidth, 0);
{ type.getLabel() }), pSessionId);
}
}
+
+ /*
+ * cache preferences in case we need to fudge them for export of
+ * split frame with 'protein scaled to codons' and 'auto id width'
+ */
+
+ final String autoIdWidth = Cache.getProperty("FIGURE_AUTOIDWIDTH");
+ final Integer fixedIdWidth = Cache
+ .getIntegerProperty("FIGURE_FIXEDIDWIDTH");
+
try
{
/*
* if exporting a split frame image, the graphics object has
* width: maximum of the top and bottom image widths
* height: sum of the top and bottom image heights
+ * Any preferences for auto or fixed id width are overridden here
+ * with the actual id widths, and restored after export
*/
- AlignmentPanel comp = null;
+ AlignmentPanel complement = null;
+ final int idWidth = getIdPanel().getWidth();
+ int complementIdWidth = 0;
+
+ if (forSplitFrame)
+ {
+ complement = ((AlignViewport) av.getCodingComplement())
+ .getAlignPanel();
+ Cache.setProperty("FIGURE_AUTOIDWIDTH", Boolean.FALSE.toString());
+ Cache.setProperty("FIGURE_FIXEDIDWIDTH", String.valueOf(idWidth));
+ }
AlignmentDimension dim1 = getAlignmentDimension();
AlignmentDimension dim2 = new AlignmentDimension(0, 0);
+
if (forSplitFrame)
{
- comp = ((AlignViewport) av.getCodingComplement())
- .getAlignPanel();
- dim2 = comp.getAlignmentDimension();
+ complementIdWidth = complement.getIdPanel().getWidth();
+ Cache.setProperty("FIGURE_FIXEDIDWIDTH", String.valueOf(complementIdWidth));
+ dim2 = complement.getAlignmentDimension();
+ Cache.setProperty("FIGURE_FIXEDIDWIDTH", String.valueOf(idWidth));
}
+
final int graphicsHeight = dim1.height + dim2.height
+ borderBottomOffset;
final int graphicsWidth = Math.max(dim1.width, dim2.width);
/*
* append coding complement image
*/
- /*
- * to debug location of next write to Graphics
- */
- // graphics.setColor(Color.red);
+ // to debug location of next write to Graphics:
// graphics.drawString("Hello world", 0, 0);
+ Cache.setProperty("FIGURE_FIXEDIDWIDTH",
+ String.valueOf(complementIdWidth));
if (av.getCodingComplement().getWrapAlignment())
{
- comp.printWrappedAlignment(dim2.width,
+ complement.printWrappedAlignment(dim2.width,
dim2.height + borderBottomOffset, 0, graphics, false);
}
else
{
- comp.printUnwrapped(dim2.width, dim2.height, 0, graphics,
+ complement.printUnwrapped(dim2.width, dim2.height, 0, graphics,
graphics);
}
}
} catch (Exception ex)
{
ex.printStackTrace();
+ } finally
+ {
+ /*
+ * restore preference settings in case they were overridden
+ */
+ if (autoIdWidth == null)
+ {
+ Cache.removeProperty("FIGURE_AUTOIDWIDTH");
+ }
+ else
+ {
+ Cache.setProperty("FIGURE_AUTOIDWIDTH", autoIdWidth);
+ }
+ if (fixedIdWidth == null)
+ {
+ Cache.removeProperty("FIGURE_FIXEDIDWIDTH");
+ }
+ else
+ {
+ Cache.setProperty("FIGURE_FIXEDIDWIDTH",
+ String.valueOf(fixedIdWidth));
+ }
}
}
* <ul>
* <li>sequence ids</li>
* <li>scale above, left or right if shown</li>
- * <li>sequences</li>
+ * <li>sequence rows, plus one spacer line</li>
* <li>annotations, if shown</li>
* </ul>
* The alignment may be in wrapped or unwrapped mode.