/* * Jalview - A Sequence Alignment Editor and Viewer * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle * * This program 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 2 * of the License, or (at your option) any later version. * * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package jalview.io; import jalview.datamodel.*; import jalview.gui.*; import jalview.schemes.*; import java.awt.*; import java.io.*; import java.util.*; import javax.swing.*; public class HTMLOutput { AlignViewport av; SequenceRenderer sr; Color color; public HTMLOutput(AlignViewport av) { this.av = av; sr = new SequenceRenderer(av); 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"); ////////////// SequenceGroup[] groups; SequenceI seq; ColourSchemeI cs = null; AlignmentI alignment = av.getAlignment(); String r; String g; String b; // 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); groups = alignment.findAllGroups(seq); if (av.getShowFullId()) { out.println(""); } else { out.println(""); } for (int res = 0; res < seq.getLength(); res++) { cs = av.getGlobalColourScheme(); if (groups != null) { for (int k = 0; k < groups.length; k++) if ((groups[k].getStartRes() <= res) && (groups[k].getEndRes() >= res)) { cs = groups[k].cs; break; } } color = sr.getResidueBoxColour(cs, seq, res); if (color.getRGB() < -1) { out.println(""); } else { out.println(""); } } out.println(""); } ////////////// out.println("
" + i + "
|
" + i + "
|
" + seq.getDisplayId() + "  
" + seq.getName() + "  " + 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(); SequenceGroup[] groups; SequenceI seq; ColourSchemeI cs = null; String r; String g; String b; out.println("
\n"); out.println( "\n"); for (int startRes = 0; startRes < al.getWidth(); startRes += av.getChunkWidth()) { int endRes = startRes + av.getChunkWidth(); if (endRes > al.getWidth()) { endRes = al.getWidth(); } out.println(""); out.println(""); for (int i = startRes + 10; i < endRes; i += 10) out.println(""); // out.println(""); out.println(""); for (int s = 0; s < al.getHeight(); s++) { out.println(""); seq = al.getSequenceAt(s); groups = al.findAllGroups(seq); if (av.getShowFullId()) { out.println(""); } else { out.println(""); } for (int res = startRes; res < endRes; res++) { cs = av.getGlobalColourScheme(); if (groups != null) { for (int k = 0; k < groups.length; k++) if ((groups[k].getStartRes() <= res) && (groups[k].getEndRes() >= res)) { cs = groups[k].cs; break; } } color = sr.getResidueBoxColour(cs, seq, res); if (color.getRGB() < -1) { r = Integer.toHexString(color.getRed()); if (r.length() < 2) { r = "0" + r; } g = Integer.toHexString(color.getGreen()); if (g.length() < 2) { g = "0" + g; } b = Integer.toHexString(color.getBlue()); if (b.length() < 2) { b = "0" + b; } out.println(""); } else { out.println(""); } } out.println(""); } if (endRes < al.getWidth()) { out.println(""); } } out.println("
 " + i + "
|
" + i + // "
|
" + seq.getDisplayId() + "  " + seq.getName() + "  " + seq.getCharAt(res) + "" + seq.getCharAt(res) + "
"); out.println("
"); } }