X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FHtmlSvgOutput.java;h=e554b8e58dc7da239cb3e532fbecd25391d789fb;hb=2c11e91e2917eed2c65ff7c06ff2ab70a88c3914;hp=781eace903475dc0479ed19daad9b060d10492d3;hpb=a8aec438cd92c74061c89487b2431a52bb0c2799;p=jalview.git
diff --git a/src/jalview/io/HtmlSvgOutput.java b/src/jalview/io/HtmlSvgOutput.java
index 781eace..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,27 +61,43 @@ public class HtmlSvgOutput
public void generateHtmlSvgOutput(File file)
{
+ IProgressIndicator pIndicator = ap.alignFrame;
+ long pSessionId = System.currentTimeMillis();
try
{
- if (file == null /*
- * && !(System.getProperty("java.awt.headless") != null
- * && System
- * .getProperty("java.awt.headless").equals("true"))
- */)
+ 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();
@@ -97,22 +136,61 @@ public class HtmlSvgOutput
String titleSvgData = g1.getSVGDocument();
String alignSvgData = g2.getSVGDocument();
-
- AlignmentExportData exportData = ap.alignFrame.getAlignmentForExport(
- JSONFile.FILE_DESC, av);
- if (exportData.getSettings().isCancelled())
+ String jsonData = null;
+ boolean isEmbbedBioJSON = Boolean.valueOf(jalview.bin.Cache
+ .getDefault("EXPORT_EMBBED_BIOJSON", "true"));
+ if (isEmbbedBioJSON)
{
- 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(),
+ av.getColumnSelection());
}
- String jsonData = new FormatAdapter(ap, exportData.getSettings())
- .formatSequences(JSONFile.FILE_DESC, exportData
- .getAlignment(), exportData.getOmitHidden(),
- exportData.getStartEndPostions(), ap
- .getAlignViewport().getColumnSelection());
-
- // String jsonData = JSONFile.getJSONData(ap);
String htmlData = getHtml(titleSvgData, alignSvgData, jsonData);
-
FileOutputStream out = new FileOutputStream(file);
out.write(htmlData.getBytes());
out.flush();
@@ -120,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)
@@ -232,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));
}
@@ -268,7 +357,7 @@ public class HtmlSvgOutput
return Printable.PAGE_EXISTS;
}
-
+
private String getHtml(String titleSvg, String alignmentSvg,
String jsonData)
{
@@ -276,42 +365,352 @@ public class HtmlSvgOutput
htmlSvg.append("\n");
if (jsonData != null)
{
- 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"
+ "");
+ htmlSvg.append("\n");
+
+ // javascript for launching file in Jalview
+
+ htmlSvg.append("\n");
+ htmlSvg.append("");
return htmlSvg.toString();
}
}