/* * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6) * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle * * 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 . */ package jalview.io; import java.io.*; import java.awt.*; import jalview.datamodel.*; import jalview.gui.*; public class HTMLOutput { AlignViewport av; SequenceRenderer sr; FeatureRenderer fr; Color color; public HTMLOutput(AlignmentPanel ap, SequenceRenderer sr, FeatureRenderer fr1) { this.av = ap.av; this.sr = sr; fr = new FeatureRenderer(ap); fr.transferSettings(fr1); JalviewFileChooser chooser = new JalviewFileChooser( jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[] { "html" }, new String[] { "HTML files" }, "HTML files"); chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle("Save as HTML"); chooser.setToolTipText("Save"); int value = chooser.showSaveDialog(null); if (value == JalviewFileChooser.APPROVE_OPTION) { String choice = chooser.getSelectedFile().getPath(); jalview.bin.Cache.setProperty("LAST_DIRECTORY", chooser .getSelectedFile().getParent()); try { PrintWriter out = new java.io.PrintWriter(new java.io.FileWriter( choice)); out.println(""); out.println(""); out.println(""); if (av.getWrapAlignment()) { drawWrappedAlignment(out); } else { drawUnwrappedAlignment(out); } out.println("\n\n"); out.close(); jalview.util.BrowserLauncher.openURL("file:///" + choice); } catch (Exception ex) { ex.printStackTrace(); } } } void drawUnwrappedAlignment(PrintWriter out) { out.println("
\n"); out.println("\n"); // //////////// SequenceI seq; AlignmentI alignment = av.getAlignment(); // draws the top row, the measure rule out.println(""); int i = 0; for (i = 10; i < (alignment.getWidth() - 10); i += 10) { out.println(""); } out.println(""); out.println(""); for (i = 0; i < alignment.getHeight(); i++) { seq = alignment.getSequenceAt(i); String id = seq.getDisplayId(av.getShowJVSuffix()); out.println(""); for (int res = 0; res < seq.getLength(); res++) { if (!jalview.util.Comparison.isGap(seq.getCharAt(res))) { color = sr.getResidueBoxColour(seq, res); color = fr.findFeatureColour(color, seq, res); } else { color = Color.white; } if (color.getRGB() < -1) { out.println(""); } else { out.println(""); } } out.println(""); } // //////////// out.println("
" + i + "
|
" + i + "
|
" + id + "  " + seq.getCharAt(res) + "" + seq.getCharAt(res) + "
"); out.println("
"); } void drawWrappedAlignment(PrintWriter out) { // ////////////////////////////////// // / How many sequences and residues can we fit on a printable page? AlignmentI al = av.getAlignment(); SequenceI seq; String r; String g; String b; out.println("
\n"); out.println("\n"); for (int startRes = 0; startRes < al.getWidth(); startRes += av .getWrappedWidth()) { int endRes = startRes + av.getWrappedWidth(); if (endRes > al.getWidth()) { endRes = al.getWidth(); } if (av.getScaleAboveWrapped()) { out.println(""); if (av.getScaleLeftWrapped()) { out.println(""); } else { out.println(""); } for (int i = startRes + 10; i < endRes; i += 10) { out.println(""); } out.println(""); } int startPos, endPos; for (int s = 0; s < al.getHeight(); s++) { out.println(""); seq = al.getSequenceAt(s); startPos = seq.findPosition(startRes); endPos = seq.findPosition(endRes) - 1; String id = seq.getDisplayId(av.getShowJVSuffix()); out.println(""); if (av.getScaleLeftWrapped()) { if (startPos > seq.getEnd() || endPos == 0) { out.println(""); } else { out.println(""); } } for (int res = startRes; res < endRes; res++) { if (!jalview.util.Comparison.isGap(seq.getCharAt(res))) { color = sr.getResidueBoxColour(seq, res); color = fr.findFeatureColour(color, seq, res); } else { color = Color.white; } if (color.getRGB() < -1) { out.println(""); } else { out.println(""); } } if (av.getScaleRightWrapped() && endRes < startRes + av.getWrappedWidth()) { out.println(""); } if (av.getScaleRightWrapped() && startPos < endPos) { out.println(""); } out.println(""); } if (endRes < al.getWidth()) { out.println(""); } } out.println("
  " + i + "
|
" + id + "   " + startPos + "  " + seq.getCharAt(res) + "" + seq.getCharAt(res) + "" + "   " + endPos + "  
"); out.println("
"); } public static String getImageMapHTML() { return new String( "\n" + "\n" + "\n" + "\n" + "\n" + "
\n" + "\n"); } }