X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FHtmlSvgOutput.java;h=e554b8e58dc7da239cb3e532fbecd25391d789fb;hb=25217bbd06c4435ad995fd8ddf3620c3b1d68cd3;hp=16b2647c1694263a618211dee6f15cabc1ea06d1;hpb=2526066acdc3faf3a178e50672c78e428287e9ef;p=jalview.git diff --git a/src/jalview/io/HtmlSvgOutput.java b/src/jalview/io/HtmlSvgOutput.java index 16b2647..e554b8e 100644 --- a/src/jalview/io/HtmlSvgOutput.java +++ b/src/jalview/io/HtmlSvgOutput.java @@ -1,11 +1,34 @@ +/* + * 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 . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.io; +import jalview.api.AlignExportSettingI; import jalview.api.FeatureRenderer; import jalview.datamodel.AlignmentExportData; import jalview.datamodel.SequenceI; import jalview.gui.AlignViewport; import jalview.gui.AlignmentPanel; import jalview.gui.HTMLOptions; +import jalview.gui.IProgressIndicator; +import jalview.gui.OOMWarning; import jalview.math.AlignmentDimension; import jalview.util.MessageManager; @@ -25,8 +48,8 @@ public class HtmlSvgOutput AlignViewport av; FeatureRenderer fr; - AlignmentPanel ap; + AlignmentPanel ap; public HtmlSvgOutput(File file, AlignmentPanel ap) { @@ -38,23 +61,43 @@ public class HtmlSvgOutput public void generateHtmlSvgOutput(File file) { + IProgressIndicator pIndicator = ap.alignFrame; + long pSessionId = System.currentTimeMillis(); try { + boolean headless = (System.getProperty("java.awt.headless") != null && System + .getProperty("java.awt.headless").equals("true")); if (file == null) { + if (pIndicator != null && !headless) + { + pIndicator.setProgressBar(MessageManager.formatMessage( + "status.waiting_for_user_to_select_output_file", "HTML"), + pSessionId); + } + JalviewFileChooser chooser = getHTMLChooser(); + chooser.setFileView(new jalview.io.JalviewFileView()); + chooser.setDialogTitle(ap.alignFrame.getTitle()); + chooser.setToolTipText(MessageManager.getString("action.save")); + int value = chooser.showSaveDialog(ap.alignFrame); - JalviewFileChooser chooser = getHTMLChooser(); - chooser.setFileView(new jalview.io.JalviewFileView()); - chooser.setDialogTitle(ap.alignFrame.getTitle()); - chooser.setToolTipText(MessageManager.getString("action.save")); - int value = chooser.showSaveDialog(ap.alignFrame); + if (value == jalview.io.JalviewFileChooser.APPROVE_OPTION) + { + jalview.bin.Cache.setProperty("LAST_DIRECTORY", chooser + .getSelectedFile().getParent()); + file = chooser.getSelectedFile(); + } + else + { - if (value == jalview.io.JalviewFileChooser.APPROVE_OPTION) - { - jalview.bin.Cache.setProperty("LAST_DIRECTORY", chooser - .getSelectedFile().getParent()); - file = chooser.getSelectedFile(); - } + if (pIndicator != null && !headless) + { + pIndicator.setProgressBar(MessageManager.formatMessage( + "status.cancelled_image_export_operation", "HTML"), + pSessionId); + } + return; + } } AlignmentDimension aDimension = ap.getAlignmentDimension(); @@ -98,17 +141,54 @@ public class HtmlSvgOutput .getDefault("EXPORT_EMBBED_BIOJSON", "true")); if (isEmbbedBioJSON) { - AlignmentExportData exportData = ap.alignFrame.getAlignmentForExport( - JSONFile.FILE_DESC, av); - if (exportData.getSettings().isCancelled()) - { - return; - } + AlignExportSettingI exportSettings = new AlignExportSettingI() + { + @Override + public boolean isExportHiddenSequences() + { + return true; + } + + @Override + public boolean isExportHiddenColumns() + { + return true; + } + + @Override + public boolean isExportAnnotations() + { + return true; + } + + @Override + public boolean isExportFeatures() + { + return true; + } + + @Override + public boolean isExportGroups() + { + return true; + } + + @Override + public boolean isCancelled() + { + return false; + } + + }; + AlignmentExportData exportData = jalview.gui.AlignFrame + .getAlignmentForExport(JSONFile.FILE_DESC, av, + exportSettings); jsonData = new FormatAdapter(ap, exportData.getSettings()) - .formatSequences(JSONFile.FILE_DESC, exportData - .getAlignment(), exportData.getOmitHidden(), - exportData.getStartEndPostions(), ap - .getAlignViewport().getColumnSelection()); + .formatSequences(JSONFile.FILE_DESC, + exportData.getAlignment(), + exportData.getOmitHidden(), + exportData.getStartEndPostions(), + av.getColumnSelection()); } String htmlData = getHtml(titleSvgData, alignSvgData, jsonData); FileOutputStream out = new FileOutputStream(file); @@ -118,20 +198,33 @@ public class HtmlSvgOutput if (!(System.getProperty("java.awt.headless") != null && System .getProperty("java.awt.headless").equals("true"))) { - jalview.util.BrowserLauncher.openURL("file:///" + file); + jalview.util.BrowserLauncher.openURL("file:///" + file); + } + if (pIndicator != null && !headless) + { + pIndicator.setProgressBar(MessageManager.formatMessage( + "status.export_complete", "HTML"), pSessionId); } + } catch (OutOfMemoryError err) + { + System.out.println("########################\n" + "OUT OF MEMORY " + + file + "\n" + "########################"); + new OOMWarning("Creating Image for " + file, err); } catch (Exception e) { e.printStackTrace(); + pIndicator.setProgressBar(MessageManager.formatMessage( + "info.error_creating_file", "HTML"), pSessionId); } } - + static JalviewFileChooser getHTMLChooser() { return new jalview.io.JalviewFileChooser( - jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[] - { "html" }, new String[] - { "Hypertext Markup Language" }, "Hypertext Markup Language"); + jalview.bin.Cache.getProperty("LAST_DIRECTORY"), + new String[] { "html" }, + new String[] { "Hypertext Markup Language" }, + "Hypertext Markup Language"); } public int printUnwrapped(int pwidth, int pheight, int pi, Graphics... pg) @@ -230,9 +323,7 @@ public class HtmlSvgOutput - fm.stringWidth(seq.getDisplayId(av.getShowJVSuffix())) - 4; } - pg[0].drawString( - seq.getDisplayId(av.getShowJVSuffix()), - xPos, + pg[0].drawString(seq.getDisplayId(av.getShowJVSuffix()), xPos, (((i - startSeq) * av.getCharHeight()) + av.getCharHeight()) - (av.getCharHeight() / 5)); } @@ -266,7 +357,7 @@ public class HtmlSvgOutput return Printable.PAGE_EXISTS; } - + private String getHtml(String titleSvg, String alignmentSvg, String jsonData) { @@ -274,36 +365,56 @@ public class HtmlSvgOutput htmlSvg.append("\n"); if (jsonData != null) { - htmlSvg.append(""); - htmlSvg.append(""); + htmlSvg.append("  "); + htmlSvg.append(""); + htmlSvg.append("
" + + jsonData + "
"); + htmlSvg.append("
 "); } htmlSvg.append("\n"); - htmlSvg.append("
"); - htmlSvg.append( -"
"); - htmlSvg.append( -"
") - .append(titleSvg) - .append("
") - .append("
\n\n\n\n"); - htmlSvg.append( -"
"); + + "object {pointer-events: none;}"); + if (jsonData != null) + { + // facebox style sheet for displaying raw BioJSON data + htmlSvg.append("#facebox { position: absolute; top: 0; left: 0; z-index: 100; text-align: left; }\n" + + "#facebox .popup{ position:relative; border:3px solid rgba(0,0,0,0); -webkit-border-radius:5px;" + + "-moz-border-radius:5px; border-radius:5px; -webkit-box-shadow:0 0 18px rgba(0,0,0,0.4); -moz-box-shadow:0 0 18px rgba(0,0,0,0.4);" + + "box-shadow:0 0 18px rgba(0,0,0,0.4); }\n" + + "#facebox .content { display:table; width: 98%; padding: 10px; background: #fff; -webkit-border-radius:4px; -moz-border-radius:4px;" + + " border-radius:4px; }\n" + + "#facebox .content > p:first-child{ margin-top:0; }\n" + + "#facebox .content > p:last-child{ margin-bottom:0; }\n" + + "#facebox .close{ position:absolute; top:5px; right:5px; padding:2px; background:#fff; }\n" + + "#facebox .close img{ opacity:0.3; }\n" + + "#facebox .close:hover img{ opacity:1.0; }\n" + + "#facebox .loading { text-align: center; }\n" + + "#facebox .image { text-align: center;}\n" + + "#facebox img { border: 0; margin: 0; }\n" + + "#facebox_overlay { position: fixed; top: 0px; left: 0px; height:100%; width:100%; }\n" + + ".facebox_hide { z-index:-100; }\n" + + ".facebox_overlayBG { background-color: #000; z-index: 99; }"); + } + + htmlSvg.append(""); + htmlSvg.append("
"); + htmlSvg.append("
\n"); + htmlSvg.append("
\n"); + htmlSvg.append(titleSvg); + htmlSvg.append("
"); + htmlSvg.append("
\n\n\n\n"); + htmlSvg.append("
"); htmlSvg.append( "
") - .append(alignmentSvg) -.append("
") - .append("
"); + .append(alignmentSvg).append("
").append("
"); htmlSvg.append(""); htmlSvg.append("\n" - + "\n" + + "\n" + "\n"); - htmlSvg.append(""); + htmlSvg.append(""); return htmlSvg.toString(); } }