/* * 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 java.io.*; import java.awt.*; import jalview.datamodel.*; import jalview.gui.*; public class HTMLOutput { AlignViewport av; SequenceRenderer sr; FeatureRenderer fr; Color color; public HTMLOutput(AlignViewport av, SequenceRenderer sr, FeatureRenderer fr) { this.av = av; this.sr = sr; this.fr = fr; 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) { 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(""); } } if(av.getScaleRightWrapped() && endRes < startRes + av.getWrappedWidth()) { out.println(""); } if(av.getScaleRightWrapped() && startPos " + endPos + "  "); } out.println(""); } if (endRes < al.getWidth()) { out.println(""); } } out.println("
  " + i + "
|
" + id + "   " + startPos + "  " + seq.getCharAt(res) + "" + seq.getCharAt(res) + "" +"  
"); out.println("
"); } public static String getImageMapHTML() { return new String( "\n" +"\n" +"\n" +"\n" +"\n" +"
\n" +"\n"); } }