package jalview.io; import jalview.gui.*; import jalview.datamodel.*; import jalview.schemes.*; import java.awt.*; import javax.swing.*; import java.io.*; import java.util.*; 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")); 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", choice); 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,g,b; // draws the top row, the measure rule out.println(""); int i=0; for(i=10; i"+i+"
|
"); 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) { 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(""); } ////////////// out.println("
"+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,g,b; out.println("
\n"); out.println("\n"); for(int startRes=0; startResal.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"); } out.println("
 " + i + "
|
" + i + // "
|
"+seq.getDisplayId()+"  "+seq.getName()+"  "+seq.getCharAt(res)+""+seq.getCharAt(res)+"
"); out.println("
"); } }