d15a6e807b1406e4927f50aaa885f2ccf924cadf
[jalview.git] / src / jalview / io / HTMLOutput.java
1 package jalview.io;\r
2 \r
3 import jalview.gui.*;\r
4 import jalview.datamodel.*;\r
5 import jalview.schemes.*;\r
6 import java.awt.*;\r
7 import javax.swing.*;\r
8 import java.io.*;\r
9 import java.util.*;\r
10 \r
11 \r
12 public class HTMLOutput\r
13 {\r
14 \r
15 \r
16   public HTMLOutput(AlignViewport av)\r
17   {\r
18     SequenceRenderer sr = new SequenceRenderer(av);\r
19     Color color;\r
20     JFileChooser chooser = new JFileChooser(jalview.bin.Cache.LAST_DIRECTORY);\r
21     chooser.setDialogTitle("Save as HTML");\r
22     chooser.setToolTipText("Save");\r
23     int value = chooser.showSaveDialog(null);\r
24     if(value == JFileChooser.APPROVE_OPTION)\r
25     {\r
26       String choice =  chooser.getSelectedFile().getPath();\r
27       jalview.bin.Cache.LAST_DIRECTORY = choice;\r
28       try{\r
29         PrintWriter out = new java.io.PrintWriter(new java.io.FileWriter(choice));\r
30         out.println("<HTML>");\r
31         out.println("<style type=\"text/css\">");\r
32         out.println("<!--");\r
33         out.print("td {font-family: \""+av.getFont().getFamily()+"\", \""+av.getFont().getName()+ "\", mono; "\r
34                    +"font-size: "+av.getFont().getSize()+"px; ");\r
35 \r
36 \r
37         if (av.getFont().getStyle() == Font.BOLD)\r
38            out.print("font-weight: BOLD; ");\r
39 \r
40         if (av.getFont().getStyle() == Font.ITALIC)\r
41            out.print("font-style: italic; ");\r
42 \r
43         out.println("text-align: center; }");\r
44 \r
45         out.println("-->");\r
46         out.println("</style>");\r
47         out.println("<BODY>");\r
48         out.println("<table border=\"1\"><tr><td>\n");\r
49         out.println("<table border=\"0\"  cellpadding=\"0\" cellspacing=\"0\">\n");\r
50 \r
51 \r
52         //////////////\r
53         SequenceGroup [] groups;\r
54         SequenceI seq;\r
55         ColourSchemeI cs = null;\r
56         AlignmentI alignment = av.getAlignment();\r
57         String r,g,b;\r
58 \r
59       // draws the top row, the measure rule\r
60         out.println("<tr><td colspan=\"6\"></td>");\r
61         int i=0;\r
62         for(i=10; i<alignment.getWidth()-10; i+=10)\r
63           out.println("<td colspan=\"9\">"+i+"<br>|</td><td></td>");\r
64 \r
65         out.println("<td colspan=\"3\"></td><td colspan=\"3\">"+i+"<br>|</td>");\r
66         out.println("</tr>");\r
67 \r
68         for (i = 0; i < alignment.getHeight(); i++)\r
69         {\r
70           seq = alignment.getSequenceAt(i);\r
71           groups = alignment.findAllGroups( seq );\r
72           out.println("<tr><td nowrap>"+seq.getDisplayId()+"&nbsp;&nbsp;</td>");\r
73 \r
74 \r
75           for (int res = 0; res < seq.getLength(); res++)\r
76           {\r
77             cs = av.getGlobalColourScheme();\r
78 \r
79             if(groups!=null)\r
80              {\r
81                for (int k = 0; k < groups.length; k++)\r
82                  if (groups[k].getStartRes() <= res && groups[k].getEndRes() >= res)\r
83                  {\r
84                    cs = groups[k].cs;\r
85                    break;\r
86                  }\r
87              }\r
88 \r
89 \r
90             color = sr.getResidueBoxColour(cs, seq, res);\r
91 \r
92             if(color.getRGB()<-1)\r
93             {\r
94               r = Integer.toHexString(color.getRed());\r
95               if(r.length()<2)\r
96                 r = "0"+r;\r
97               g = Integer.toHexString(color.getGreen());\r
98               if(g.length()<2)\r
99                 g = "0"+g;\r
100               b = Integer.toHexString(color.getBlue());\r
101               if(b.length()<2)\r
102                 b = "0"+b;\r
103               out.println("<td bgcolor=\"#"+ r + g + b + "\">"+seq.getCharAt(res)+"</td>");\r
104             }\r
105             else\r
106               out.println("<td>"+seq.getCharAt(res)+"</td>");\r
107 \r
108           }\r
109 \r
110           out.println("</tr>");\r
111         }\r
112         //////////////\r
113         out.println("</table>");\r
114         out.println("</td></tr></table>\n</body>\n</html>");\r
115 \r
116         out.close();\r
117 \r
118         jalview.util.BrowserLauncher.openURL( "file:///"+choice );\r
119       }\r
120       catch(Exception ex){ex.printStackTrace();}\r
121     }\r
122   }\r
123 \r
124 \r
125 }\r