X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fio%2FHtmlSvgOutput.java;h=4ea3000b05ed4ab7a69d388d5566120305b9e189;hb=a9177efb4097815d9a8031aa22700c61a7d6260a;hp=3c9c60893c3ef4225c63c82d4a7b9a37d34cb9ed;hpb=4dad2ddfc361c0f408b8e2320e7186f985f3bb2d;p=jalview.git
diff --git a/src/jalview/io/HtmlSvgOutput.java b/src/jalview/io/HtmlSvgOutput.java
index 3c9c608..4ea3000 100644
--- a/src/jalview/io/HtmlSvgOutput.java
+++ b/src/jalview/io/HtmlSvgOutput.java
@@ -1,299 +1,317 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see
generatedFile
+ *
+ * @param textCharacters
+ * true for Text character rendering, false for Lineart
+ */
+ protected void doOutput(boolean textCharacters)
{
- int idWidth = ap.getVisibleIdWidth(false);
- FontMetrics fm = ap.getFontMetrics(av.getFont());
- int scaleHeight = av.getCharHeight() + fm.getDescent();
-
- pg[0].setColor(Color.white);
- pg[0].fillRect(0, 0, pwidth, pheight);
- pg[0].setFont(av.getFont());
-
- // //////////////////////////////////
- // / How many sequences and residues can we fit on a printable page?
- int totalRes = (pwidth - idWidth) / av.getCharWidth();
- int totalSeq = (pheight - scaleHeight) / av.getCharHeight() - 1;
- int pagesWide = (av.getAlignment().getWidth() / totalRes) + 1;
-
- // ///////////////////////////
- // / Only print these sequences and residues on this page
- int startRes;
-
- // ///////////////////////////
- // / Only print these sequences and residues on this page
- int endRes;
-
- // ///////////////////////////
- // / Only print these sequences and residues on this page
- int startSeq;
-
- // ///////////////////////////
- // / Only print these sequences and residues on this page
- int endSeq;
- startRes = (pi % pagesWide) * totalRes;
- endRes = (startRes + totalRes) - 1;
-
- if (endRes > (av.getAlignment().getWidth() - 1))
- {
- endRes = av.getAlignment().getWidth() - 1;
- }
- startSeq = (pi / pagesWide) * totalSeq;
- endSeq = startSeq + totalSeq;
- if (endSeq > av.getAlignment().getHeight())
- {
- endSeq = av.getAlignment().getHeight();
- }
- int pagesHigh = ((av.getAlignment().getHeight() / totalSeq) + 1)
- * pheight;
- if (av.isShowAnnotation())
- {
- pagesHigh += ap.getAnnotationPanel().adjustPanelHeight() + 3;
- }
- pagesHigh /= pheight;
- if (pi >= (pagesWide * pagesHigh))
- {
- return Printable.NO_SUCH_PAGE;
- }
-
- // draw Scale
- pg[1].translate(0, 0);
- ap.getScalePanel().drawScale(pg[1], startRes, endRes, pwidth - idWidth,
- scaleHeight);
- pg[1].translate(-idWidth, scaleHeight);
-
- // //////////////
- // Draw the ids
- Color currentColor = null;
- Color currentTextColor = null;
- pg[0].translate(0, scaleHeight);
- pg[0].setFont(ap.getIdPanel().getIdCanvas().getIdfont());
- SequenceI seq;
- for (int i = startSeq; i < endSeq; i++)
+ try
{
- seq = av.getAlignment().getSequenceAt(i);
- if ((av.getSelectionGroup() != null)
- && av.getSelectionGroup().getSequences(null).contains(seq))
+ AlignmentDimension aDimension = ap.getAlignmentDimension();
+ SVGGraphics2D idPanelGraphics = new SVGGraphics2D(
+ aDimension.getWidth(), aDimension.getHeight());
+ SVGGraphics2D alignPanelGraphics = new SVGGraphics2D(
+ aDimension.getWidth(), aDimension.getHeight());
+ if (!textCharacters) // Lineart selected
{
- currentColor = Color.gray;
- currentTextColor = Color.black;
+ idPanelGraphics.setRenderingHint(SVGHints.KEY_DRAW_STRING_TYPE,
+ SVGHints.VALUE_DRAW_STRING_TYPE_VECTOR);
+ alignPanelGraphics.setRenderingHint(SVGHints.KEY_DRAW_STRING_TYPE,
+ SVGHints.VALUE_DRAW_STRING_TYPE_VECTOR);
}
- else
+ if (ap.av.getWrapAlignment())
{
- currentColor = av.getSequenceColour(seq);
- currentTextColor = Color.black;
+ printWrapped(aDimension.getWidth(), aDimension.getHeight(), 0,
+ alignPanelGraphics);
}
- pg[0].setColor(currentColor);
- pg[0].fillRect(0, (i - startSeq) * av.getCharHeight(), idWidth,
- av.getCharHeight());
- pg[0].setColor(currentTextColor);
- int xPos = 0;
- if (av.isRightAlignIds())
+ else
{
- fm = pg[0].getFontMetrics();
- xPos = idWidth
- - fm.stringWidth(seq.getDisplayId(av.getShowJVSuffix()))
- - 4;
+ printUnwrapped(aDimension.getWidth(), aDimension.getHeight(), 0,
+ idPanelGraphics, alignPanelGraphics);
}
- pg[0].drawString(
- seq.getDisplayId(av.getShowJVSuffix()),
- xPos,
- (((i - startSeq) * av.getCharHeight()) + av.getCharHeight())
- - (av.getCharHeight() / 5));
- }
- pg[0].setFont(av.getFont());
- pg[0].translate(idWidth, 0);
- // draw main sequence panel
- pg[1].translate(idWidth, 0);
- ap.getSeqPanel().seqCanvas.drawPanel(pg[1], startRes, endRes, startSeq,
- endSeq, 0);
- if (av.isShowAnnotation() && (endSeq == av.getAlignment().getHeight()))
+ String idPanelSvgData = idPanelGraphics.getSVGDocument();
+ String alignPanelSvgData = alignPanelGraphics.getSVGDocument();
+ String jsonData = getBioJSONData();
+ String htmlData = getHtml(idPanelSvgData, alignPanelSvgData, jsonData,
+ ap.av.getWrapAlignment());
+ FileOutputStream out = new FileOutputStream(generatedFile);
+ out.write(htmlData.getBytes());
+ out.flush();
+ out.close();
+ setProgressMessage(MessageManager
+ .formatMessage("status.export_complete", getDescription()));
+ exportCompleted();
+ } catch (Exception e)
{
- // draw annotation label - need to offset for current scroll position
- int offset = -ap.getAlabels().getScrollOffset();
- pg[0].translate(0, offset);
- pg[0].translate(-idWidth - 3,
- (endSeq - startSeq) * av.getCharHeight() + 3);
- ap.getAlabels().drawComponent(pg[0], idWidth);
- pg[0].translate(idWidth + 3, 0);
- pg[0].translate(0, -offset);
-
- // draw annotation - need to offset for current scroll position
- pg[1].translate(0, offset);
- pg[1].translate(-idWidth - 3,
- (endSeq - startSeq) * av.getCharHeight() + 3);
- pg[1].translate(idWidth + 3, 0);
- ap.getAnnotationPanel().renderer.drawComponent(
- ap.getAnnotationPanel(), av, pg[1], -1, startRes, endRes + 1);
- pg[1].translate(0, -offset);
+ e.printStackTrace();
+ setProgressMessage(MessageManager
+ .formatMessage("info.error_creating_file", getDescription()));
}
-
- return Printable.PAGE_EXISTS;
- }
-
- private String getHtml(String titleSvg, String alignmentSvg)
- {
- StringBuilder htmlSvg = new StringBuilder();
- htmlSvg.append(""
- + "");
- htmlSvg.append("