Load/Save trees
[jalview.git] / src / jalview / gui / Jalview2XML.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4  *\r
5  * This program is free software; you can redistribute it and/or\r
6  * modify it under the terms of the GNU General Public License\r
7  * as published by the Free Software Foundation; either version 2\r
8  * of the License, or (at your option) any later version.\r
9  *\r
10  * This program is distributed in the hope that it will be useful,\r
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13  * GNU General Public License for more details.\r
14  *\r
15  * You should have received a copy of the GNU General Public License\r
16  * along with this program; if not, write to the Free Software\r
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18  */\r
19 package jalview.gui;\r
20 \r
21 import java.io.*;\r
22 import java.net.*;\r
23 import java.util.*;\r
24 import java.util.jar.*;\r
25 \r
26 import javax.swing.*;\r
27 \r
28 import jalview.binding.*;\r
29 import jalview.io.*;\r
30 import jalview.schemes.*;\r
31 \r
32 public class Jalview2XML\r
33 {\r
34   // SAVES SEVERAL ALIGNEMENT WINDOWS TO SAME JARFILE\r
35   public static void SaveState(File statefile)\r
36   {\r
37     long creation = System.currentTimeMillis();\r
38     JInternalFrame[] frames = Desktop.desktop.getAllFrames();\r
39 \r
40     if (frames == null)\r
41     {\r
42       return;\r
43     }\r
44 \r
45     try\r
46     {\r
47       FileOutputStream fos = new FileOutputStream(statefile);\r
48       JarOutputStream jout = new JarOutputStream(fos);\r
49 \r
50       //NOTE UTF-8 MUST BE USED FOR WRITING UNICODE CHARS\r
51       ////////////////////////////////////////////////////\r
52       PrintWriter out = new PrintWriter(new OutputStreamWriter(jout,\r
53           "UTF-8"));\r
54 \r
55       Vector shortNames = new Vector();\r
56       int treeCount=1;\r
57 \r
58       //REVERSE ORDER\r
59       for (int i = frames.length - 1; i > -1; i--)\r
60       {\r
61         if (frames[i] instanceof AlignFrame)\r
62         {\r
63           AlignFrame af = (AlignFrame) frames[i];\r
64 \r
65           String shortName = af.getTitle();\r
66 \r
67           if (shortName.indexOf(File.separatorChar) > -1)\r
68           {\r
69             shortName = shortName.substring(shortName.lastIndexOf(\r
70                 File.separatorChar) + 1);\r
71           }\r
72 \r
73           int count = 1;\r
74 \r
75           while (shortNames.contains(shortName))\r
76           {\r
77             if (shortName.endsWith("_" + (count - 1)))\r
78             {\r
79               shortName = shortName.substring(0,\r
80                                               shortName.lastIndexOf("_"));\r
81             }\r
82 \r
83             shortName = shortName.concat("_" + count);\r
84             count++;\r
85           }\r
86 \r
87           shortNames.addElement(shortName);\r
88 \r
89           if (!shortName.endsWith(".xml"))\r
90           {\r
91             shortName = shortName + ".xml";\r
92           }\r
93 \r
94           SaveState(af, creation, shortName, jout, out);\r
95         }\r
96       }\r
97 \r
98       out.close();\r
99       jout.close();\r
100     }\r
101     catch (Exception ex)\r
102     {\r
103       ex.printStackTrace();\r
104     }\r
105   }\r
106 \r
107 \r
108   // USE THIS METHOD TO SAVE A SINGLE ALIGNMENT WINDOW\r
109   public static void SaveAlignment(AlignFrame af, String jarFile, String fileName)\r
110   {\r
111     try\r
112     {\r
113       FileOutputStream fos = new FileOutputStream(jarFile);\r
114       JarOutputStream jout = new JarOutputStream(fos);\r
115 \r
116       //NOTE UTF-8 MUST BE USED FOR WRITING UNICODE CHARS\r
117       ////////////////////////////////////////////////////\r
118       PrintWriter out = new PrintWriter(new OutputStreamWriter(jout,\r
119           "UTF-8"));\r
120 \r
121       SaveState(af, System.currentTimeMillis(), fileName, jout, out);\r
122       out.close();\r
123       jout.close();\r
124     }\r
125     catch (Exception ex)\r
126     {\r
127     }\r
128   }\r
129 \r
130   public static void SaveState(AlignFrame af, long timeStamp,\r
131                                String fileName, JarOutputStream jout,\r
132                                PrintWriter out)\r
133   {\r
134     Vector seqids = new Vector();\r
135     Vector userColours = new Vector();\r
136 \r
137     AlignViewport av = af.viewport;\r
138 \r
139     JalviewModel object = new JalviewModel();\r
140     object.setVamsasModel(new VamsasModel());\r
141 \r
142     object.setCreationDate(new java.util.Date(timeStamp));\r
143 \r
144     jalview.datamodel.AlignmentI jal = af.viewport.alignment;\r
145 \r
146     SequenceSet vamsasSet = new SequenceSet();\r
147     Sequence vamsasSeq;\r
148     JalviewModelSequence jms = new JalviewModelSequence();\r
149 \r
150     vamsasSet.setGapChar(jal.getGapCharacter() + "");\r
151 \r
152     JSeq jseq;\r
153 \r
154     //SAVE SEQUENCES\r
155     int id = 0;\r
156 \r
157     for (int i = 0; i < jal.getHeight(); i++)\r
158     {\r
159       seqids.add(jal.getSequenceAt(i));\r
160 \r
161       vamsasSeq = new Sequence();\r
162       vamsasSeq.setId(id + "");\r
163       vamsasSeq.setName(jal.getSequenceAt(i).getName());\r
164       vamsasSeq.setSequence(jal.getSequenceAt(i).getSequence());\r
165 \r
166       jseq = new JSeq();\r
167       jseq.setStart(jal.getSequenceAt(i).getStart());\r
168       jseq.setEnd(jal.getSequenceAt(i).getEnd());\r
169 \r
170       jseq.setColour(jal.getSequenceAt(i).getColor().getRGB());\r
171 \r
172       jseq.setId(id);\r
173 \r
174       jms.addJSeq(jseq);\r
175       vamsasSet.addSequence(vamsasSeq);\r
176       id++;\r
177     }\r
178 \r
179     //SAVE TREES\r
180     ///////////////////////////////////\r
181     if (af.viewport.currentTree != null)\r
182     {\r
183       // FIND ANY ASSOCIATED TREES\r
184       JInternalFrame[] frames = Desktop.desktop.getAllFrames();\r
185       for(int t=0; t<frames.length; t++)\r
186       {\r
187         if (frames[t] instanceof TreePanel)\r
188         {\r
189           TreePanel tp = (TreePanel) frames[t];\r
190           if(tp.treeCanvas.av.alignment==jal)\r
191           {\r
192             Tree tree = new Tree();\r
193             tree.setTitle(tp.getTitle());\r
194             tree.setCurrentTree((af.viewport.currentTree == tp.getTree()));\r
195             tree.setNewick(tp.getTree().toString());\r
196             tree.setThreshold(tp.treeCanvas.threshold);\r
197 \r
198             tree.setFitToWindow(tp.fitToWindow.getState());\r
199             tree.setFontSize(tp.treeCanvas.fontSize);\r
200             tree.setMarkUnlinked( tp.placeholdersMenu.getState() );\r
201             tree.setShowBootstrap( tp.bootstrapMenu.getState() );\r
202             tree.setShowDistances( tp.distanceMenu.getState() );\r
203 \r
204             tree.setHeight(tp.getHeight());\r
205             tree.setWidth(tp.getWidth());\r
206             tree.setXpos(tp.getX());\r
207             tree.setYpos(tp.getY());\r
208 \r
209             jms.addTree(tree);\r
210           }\r
211         }\r
212       }\r
213     }\r
214 \r
215     //SAVE ANNOTATIONS\r
216     if (jal.getAlignmentAnnotation() != null)\r
217     {\r
218       jalview.datamodel.AlignmentAnnotation[] aa = jal.getAlignmentAnnotation();\r
219 \r
220       for (int i = 0; i < aa.length; i++)\r
221       {\r
222         if (aa[i].label.equals("Quality") ||\r
223             aa[i].label.equals("Conservation") ||\r
224             aa[i].label.equals("Consensus"))\r
225         {\r
226           continue;\r
227         }\r
228 \r
229         Annotation an = new Annotation();\r
230         an.setDescription(aa[i].description);\r
231         an.setGraph(aa[i].isGraph);\r
232         an.setLabel(aa[i].label);\r
233 \r
234         AnnotationElement ae;\r
235 \r
236         for (int a = 0; a < aa[i].annotations.length; a++)\r
237         {\r
238           if ( (aa[i] == null) || (aa[i].annotations[a] == null))\r
239           {\r
240             continue;\r
241           }\r
242 \r
243           ae = new AnnotationElement();\r
244           ae.setDescription(aa[i].annotations[a].description);\r
245           ae.setDisplayCharacter(aa[i].annotations[a].displayCharacter);\r
246           ae.setValue(aa[i].annotations[a].value);\r
247           ae.setPosition(a);\r
248           ae.setSecondaryStructure(aa[i].annotations[a].secondaryStructure +\r
249                                    "");\r
250           an.addAnnotationElement(ae);\r
251         }\r
252 \r
253         vamsasSet.addAnnotation(an);\r
254       }\r
255     }\r
256 \r
257     //SAVE GROUPS\r
258     if (jal.getGroups() != null)\r
259     {\r
260       JGroup[] groups = new JGroup[jal.getGroups().size()];\r
261 \r
262       for (int i = 0; i < groups.length; i++)\r
263       {\r
264         groups[i] = new JGroup();\r
265 \r
266         jalview.datamodel.SequenceGroup sg = (jalview.datamodel.SequenceGroup)\r
267             jal.getGroups()\r
268             .elementAt(i);\r
269         groups[i].setStart(sg.getStartRes());\r
270         groups[i].setEnd(sg.getEndRes());\r
271         groups[i].setName(sg.getName());\r
272 \r
273         if (sg.cs instanceof ConservationColourScheme)\r
274         {\r
275           groups[i].setConsThreshold( ( (ConservationColourScheme) sg.cs).inc);\r
276         }\r
277 \r
278         if (sg.cs instanceof ResidueColourScheme)\r
279         {\r
280           groups[i].setPidThreshold( ( (ResidueColourScheme) sg.cs).\r
281                                     getThreshold());\r
282         }\r
283         else if (sg.cs instanceof ScoreColourScheme)\r
284         {\r
285           groups[i].setPidThreshold( ( (ScoreColourScheme) sg.cs).getThreshold());\r
286         }\r
287 \r
288         if (sg.cs instanceof jalview.schemes.UserColourScheme)\r
289         {\r
290           groups[i].setColour(SetUserColourScheme(sg.cs, userColours,\r
291                                                   jms));\r
292         }\r
293         else\r
294         {\r
295           groups[i].setColour(ColourSchemeProperty.getColourName(\r
296               sg.cs));\r
297         }\r
298 \r
299         groups[i].setOutlineColour(sg.getOutlineColour().getRGB());\r
300         groups[i].setDisplayBoxes(sg.getDisplayBoxes());\r
301         groups[i].setDisplayText(sg.getDisplayText());\r
302         groups[i].setColourText(sg.getColourText());\r
303 \r
304         for (int s = 0; s < sg.getSize(); s++)\r
305         {\r
306           jalview.datamodel.Sequence seq = (jalview.datamodel.Sequence) sg.\r
307               getSequenceAt(s);\r
308           int index = seqids.indexOf(seq);\r
309           groups[i].addSeq(index);\r
310         }\r
311       }\r
312 \r
313       jms.setJGroup(groups);\r
314     }\r
315 \r
316     ///////////SAVE VIEWPORT\r
317     Viewport view = new Viewport();\r
318     view.setTitle(af.getTitle());\r
319     view.setXpos(af.getX());\r
320     view.setYpos(af.getY());\r
321     view.setWidth(af.getWidth());\r
322     view.setHeight(af.getHeight());\r
323     view.setStartRes(av.startRes);\r
324     view.setStartSeq(av.startSeq);\r
325 \r
326     if (av.getGlobalColourScheme() instanceof jalview.schemes.UserColourScheme)\r
327     {\r
328       view.setBgColour(SetUserColourScheme(av.getGlobalColourScheme(),\r
329                                            userColours, jms));\r
330     }\r
331     else\r
332     {\r
333       view.setBgColour(ColourSchemeProperty.getColourName(\r
334           av.getGlobalColourScheme()));\r
335     }\r
336 \r
337     ColourSchemeI cs = av.getGlobalColourScheme();\r
338 \r
339     if (cs instanceof ConservationColourScheme)\r
340     {\r
341       view.setConsThreshold( ( (ConservationColourScheme) cs).inc);\r
342     }\r
343 \r
344     if (cs instanceof ResidueColourScheme)\r
345     {\r
346       view.setPidThreshold( ( (ResidueColourScheme) cs).getThreshold());\r
347     }\r
348     else if (cs instanceof ScoreColourScheme)\r
349     {\r
350       view.setPidThreshold( ( (ScoreColourScheme) cs).getThreshold());\r
351     }\r
352 \r
353     view.setConservationSelected(av.getConservationSelected());\r
354     view.setPidSelected(av.getAbovePIDThreshold());\r
355     view.setFontName(av.font.getFontName());\r
356     view.setFontSize(av.font.getSize());\r
357     view.setFontStyle(av.font.getStyle());\r
358     view.setRenderGaps(av.renderGaps);\r
359     view.setShowAnnotation(av.getShowAnnotation());\r
360     view.setShowBoxes(av.getShowBoxes());\r
361     view.setShowColourText(av.getColourText());\r
362     view.setShowConservation(av.showConservation);\r
363     view.setShowFullId(av.getShowFullId());\r
364     view.setShowIdentity(av.showIdentity);\r
365     view.setShowQuality(av.showQuality);\r
366     view.setShowSequenceFeatures(av.showSequenceFeatures);\r
367     view.setShowText(av.getShowText());\r
368     view.setWrapAlignment(av.getWrapAlignment());\r
369 \r
370     jms.addViewport(view);\r
371 \r
372     object.setJalviewModelSequence(jms);\r
373     object.getVamsasModel().addSequenceSet(vamsasSet);\r
374 \r
375     try\r
376     {\r
377       if (!fileName.endsWith(".xml"))\r
378       {\r
379         fileName = fileName + ".xml";\r
380       }\r
381 \r
382       JarEntry entry = new JarEntry(fileName);\r
383       jout.putNextEntry(entry);\r
384 \r
385       object.marshal(out);\r
386     }\r
387     catch (Exception ex)\r
388     {\r
389       ex.printStackTrace();\r
390     }\r
391   }\r
392 \r
393   static String SetUserColourScheme(jalview.schemes.ColourSchemeI cs,\r
394                                     Vector userColours,\r
395                                     JalviewModelSequence jms)\r
396   {\r
397     String id = null;\r
398     jalview.schemes.UserColourScheme ucs = (jalview.schemes.UserColourScheme)\r
399         cs;\r
400 \r
401     if (!userColours.contains(ucs))\r
402     {\r
403       userColours.add(ucs);\r
404 \r
405       java.awt.Color[] colours = ucs.getColours();\r
406       jalview.binding.UserColours uc = new jalview.binding.UserColours();\r
407       jalview.binding.UserColourScheme jbucs = new jalview.binding.\r
408           UserColourScheme();\r
409 \r
410       for (int i = 0; i < colours.length; i++)\r
411       {\r
412         jalview.binding.Colour col = new jalview.binding.Colour();\r
413         col.setRGB(jalview.util.Format.getHexString(colours[i]));\r
414         jbucs.addColour(col);\r
415       }\r
416 \r
417       id = "ucs" + userColours.indexOf(ucs);\r
418       uc.setId(id);\r
419       uc.setUserColourScheme(jbucs);\r
420       jms.addUserColours(uc);\r
421     }\r
422 \r
423     return id;\r
424   }\r
425 \r
426   static jalview.schemes.UserColourScheme GetUserColourScheme(\r
427       JalviewModelSequence jms, String id)\r
428   {\r
429     UserColours[] uc = jms.getUserColours();\r
430     UserColours colours = null;\r
431 \r
432     for (int i = 0; i < uc.length; i++)\r
433     {\r
434       if (uc[i].getId().equals(id))\r
435       {\r
436         colours = uc[i];\r
437 \r
438         break;\r
439       }\r
440     }\r
441 \r
442     int csize = colours.getUserColourScheme().getColourCount();\r
443     java.awt.Color[] newColours = new java.awt.Color[csize];\r
444 \r
445     for (int i = 0; i < csize; i++)\r
446     {\r
447       newColours[i] = new java.awt.Color(Integer.parseInt(\r
448           colours.getUserColourScheme().getColour(i).getRGB(), 16));\r
449     }\r
450 \r
451     return new jalview.schemes.UserColourScheme(newColours);\r
452   }\r
453 \r
454   public static void LoadJalviewAlign(String file)\r
455   {\r
456     JalviewModel object = new JalviewModel();\r
457 \r
458     try\r
459     {\r
460       //UNMARSHALLER SEEMS TO CLOSE JARINPUTSTREAM, MOST ANNOYING\r
461       URL url = null;\r
462 \r
463       if (file.startsWith("http://"))\r
464       {\r
465         url = new URL(file);\r
466       }\r
467 \r
468       JarInputStream jin = null;\r
469       JarEntry jarentry = null;\r
470       int entryCount = 1;\r
471 \r
472       do\r
473       {\r
474         if (url != null)\r
475         {\r
476           jin = new JarInputStream(url.openStream());\r
477         }\r
478         else\r
479         {\r
480           jin = new JarInputStream(new FileInputStream(file));\r
481         }\r
482 \r
483         for (int i = 0; i < entryCount; i++)\r
484         {\r
485           jarentry = jin.getNextJarEntry();\r
486         }\r
487 \r
488         if (jarentry != null)\r
489         {\r
490           InputStreamReader in = new InputStreamReader(jin, "UTF-8");\r
491           object = (JalviewModel) object.unmarshal(in);\r
492           LoadFromObject(object);\r
493           entryCount++;\r
494         }\r
495       }\r
496       while (jarentry != null);\r
497     }\r
498     catch (Exception ex)\r
499     {\r
500       System.err.println("Exception whilst loading jalview XML file : " +\r
501                          ex + "\n");\r
502       ex.printStackTrace();\r
503 \r
504       return;\r
505     }\r
506   }\r
507 \r
508   static void LoadFromObject(JalviewModel object)\r
509   {\r
510     Vector seqids = new Vector();\r
511     SequenceSet vamsasSet = object.getVamsasModel().getSequenceSet(0);\r
512     Sequence[] vamsasSeq = vamsasSet.getSequence();\r
513 \r
514     JalviewModelSequence jms = object.getJalviewModelSequence();\r
515 \r
516     //////////////////////////////////\r
517     //LOAD SEQUENCES\r
518     jalview.datamodel.Sequence[] jseqs = new jalview.datamodel.Sequence[\r
519         vamsasSeq.length];\r
520     JSeq[] JSEQ = object.getJalviewModelSequence().getJSeq();\r
521 \r
522     for (int i = 0; i < vamsasSeq.length; i++)\r
523     {\r
524       jseqs[i] = new jalview.datamodel.Sequence(vamsasSeq[i].getName(),\r
525                                                 vamsasSeq[i].getSequence());\r
526 \r
527       jseqs[i].setStart(JSEQ[i].getStart());\r
528       jseqs[i].setEnd(JSEQ[i].getEnd());\r
529       jseqs[i].setColor(new java.awt.Color(JSEQ[i].getColour()));\r
530       seqids.add(jseqs[i]);\r
531     }\r
532 \r
533     /////////////////////////////////\r
534     jalview.datamodel.Alignment al = new jalview.datamodel.Alignment(jseqs);\r
535 \r
536     /////////////////////////////////\r
537     //////////////////////////////////\r
538     //LOAD ANNOTATIONS\r
539     if (vamsasSet.getAnnotation() != null)\r
540     {\r
541       Annotation[] an = vamsasSet.getAnnotation();\r
542 \r
543       for (int i = 0; i < an.length; i++)\r
544       {\r
545         AnnotationElement[] ae = an[i].getAnnotationElement();\r
546         jalview.datamodel.Annotation[] anot = new jalview.datamodel.Annotation[\r
547             al.getWidth()];\r
548 \r
549         for (int aa = 0; aa < ae.length; aa++)\r
550         {\r
551           anot[ae[aa].getPosition()] = new jalview.datamodel.Annotation(ae[aa].\r
552               getDisplayCharacter(),\r
553               ae[aa].getDescription(),\r
554               ae[aa].getSecondaryStructure().charAt(0),\r
555               ae[aa].getValue());\r
556         }\r
557 \r
558         jalview.datamodel.AlignmentAnnotation jaa = null;\r
559 \r
560         if (an[i].getGraph())\r
561         {\r
562           jaa = new jalview.datamodel.AlignmentAnnotation(an[i].getLabel(),\r
563               an[i].getDescription(), anot, 0, 0, 1);\r
564         }\r
565         else\r
566         {\r
567           jaa = new jalview.datamodel.AlignmentAnnotation(an[i].getLabel(),\r
568               an[i].getDescription(), anot);\r
569         }\r
570 \r
571         al.addAnnotation(jaa);\r
572       }\r
573     }\r
574 \r
575     /////////////////////////////////\r
576     // LOAD VIEWPORT\r
577     Viewport[] views = jms.getViewport();\r
578     Viewport view = views[0]; // DEAL WITH MULTIPLE VIEWPORTS LATER\r
579 \r
580     AlignFrame af = new AlignFrame(al);\r
581 \r
582     //  af.changeColour() );\r
583     /////////////////////////\r
584     //LOAD GROUPS\r
585     if (jms.getJGroupCount() > 0)\r
586     {\r
587       JGroup[] groups = jms.getJGroup();\r
588 \r
589       for (int i = 0; i < groups.length; i++)\r
590       {\r
591         ColourSchemeI cs = null;\r
592 \r
593         if (groups[i].getColour() != null)\r
594         {\r
595           if (groups[i].getColour().startsWith("ucs"))\r
596           {\r
597             cs = GetUserColourScheme(jms, groups[i].getColour());\r
598           }\r
599           else\r
600           {\r
601             cs = ColourSchemeProperty.getColour(al,\r
602                                                 groups[i].getColour());\r
603           }\r
604 \r
605           if (cs instanceof ResidueColourScheme)\r
606           {\r
607             ( (ResidueColourScheme) cs).setThreshold(groups[i].getPidThreshold());\r
608           }\r
609           else if (cs instanceof ScoreColourScheme)\r
610           {\r
611             ( (ScoreColourScheme) cs).setThreshold(groups[i].getPidThreshold());\r
612           }\r
613         }\r
614 \r
615         Vector seqs = new Vector();\r
616         int[] ids = groups[i].getSeq();\r
617 \r
618         for (int s = 0; s < ids.length; s++)\r
619         {\r
620           seqs.addElement( (jalview.datamodel.SequenceI) seqids.elementAt(\r
621               ids[s]));\r
622         }\r
623 \r
624         jalview.datamodel.SequenceGroup sg = new jalview.datamodel.\r
625             SequenceGroup(seqs, groups[i].getName(),\r
626                           cs, groups[i].getDisplayBoxes(),\r
627                           groups[i].getDisplayText(), groups[i].getColourText(),\r
628                           groups[i].getStart(), groups[i].getEnd());\r
629 \r
630         sg.setOutlineColour(new java.awt.Color(\r
631             groups[i].getOutlineColour()));\r
632 \r
633 \r
634         if (groups[i].getConsThreshold() != 0)\r
635         {\r
636           jalview.analysis.Conservation c = new jalview.analysis.Conservation(\r
637               "All",\r
638               ResidueProperties.propHash, 3, sg.sequences, 0,\r
639               sg.getWidth() - 1);\r
640           c.calculate();\r
641           c.verdict(false, 25);\r
642           cs = new ConservationColourScheme(c, cs);\r
643           sg.cs = cs;\r
644         }\r
645 \r
646         al.addGroup(sg);\r
647       }\r
648     }\r
649 \r
650     Desktop.addInternalFrame(af, view.getTitle(),\r
651                              AlignFrame.NEW_WINDOW_WIDTH,\r
652                              AlignFrame.NEW_WINDOW_HEIGHT);\r
653     af.setBounds(view.getXpos(), view.getYpos(), view.getWidth(),\r
654                  view.getHeight());\r
655     af.viewport.setStartRes(view.getStartRes());\r
656     af.viewport.setStartSeq(view.getStartSeq());\r
657     af.viewport.showConservation = view.getShowConservation();\r
658     af.viewport.showQuality = view.getShowQuality();\r
659     af.viewport.showIdentity = view.getShowIdentity();\r
660     af.viewport.setAbovePIDThreshold(view.getPidSelected());\r
661     af.abovePIDThreshold.setSelected(view.getPidSelected());\r
662     af.viewport.setColourText(view.getShowColourText());\r
663     af.colourTextMenuItem.setSelected(view.getShowColourText());\r
664     af.viewport.setConservationSelected(view.getConservationSelected());\r
665     af.conservationMenuItem.setSelected(view.getConservationSelected());\r
666 \r
667     af.viewport.setShowFullId(view.getShowFullId());\r
668     af.fullSeqId.setSelected(view.getShowFullId());\r
669 \r
670     af.viewport.setFont(new java.awt.Font(view.getFontName(),\r
671                                           view.getFontStyle(), view.getFontSize()));\r
672     af.alignPanel.fontChanged();\r
673 \r
674     af.viewport.setRenderGaps(view.getRenderGaps());\r
675     af.renderGapsMenuItem.setSelected(view.getRenderGaps());\r
676 \r
677     af.viewport.setWrapAlignment(view.getWrapAlignment());\r
678     af.wrapMenuItem.setSelected(view.getWrapAlignment());\r
679 \r
680     if (view.getWrapAlignment())\r
681     {\r
682       af.alignPanel.setWrapAlignment(view.getWrapAlignment());\r
683     }\r
684     else\r
685     {\r
686       af.viewport.setShowAnnotation(view.getShowAnnotation());\r
687       af.alignPanel.setAnnotationVisible(view.getShowAnnotation());\r
688     }\r
689 \r
690     af.viewport.setShowBoxes(view.getShowBoxes());\r
691     af.viewBoxesMenuItem.setSelected(view.getShowBoxes());\r
692     af.viewport.setShowText(view.getShowText());\r
693     af.viewTextMenuItem.setSelected(view.getShowText());\r
694 \r
695     ColourSchemeI cs = null;\r
696 \r
697     if (view.getBgColour() != null)\r
698     {\r
699       if (view.getBgColour().startsWith("ucs"))\r
700       {\r
701         cs = GetUserColourScheme(jms, view.getBgColour());\r
702       }\r
703       else\r
704       {\r
705         cs = ColourSchemeProperty.getColour(al, view.getBgColour());\r
706       }\r
707 \r
708       if (cs instanceof ConservationColourScheme)\r
709       {\r
710         ( (ConservationColourScheme) cs).inc = view.getConsThreshold();\r
711       }\r
712 \r
713       if (cs instanceof ResidueColourScheme)\r
714       {\r
715         ( (ResidueColourScheme) cs).setThreshold(view.getPidThreshold());\r
716       }\r
717       else if (cs instanceof ScoreColourScheme)\r
718       {\r
719         ( (ScoreColourScheme) cs).setThreshold(view.getPidThreshold());\r
720       }\r
721     }\r
722 \r
723     af.viewport.setGlobalColourScheme(cs);\r
724 \r
725     af.viewport.setColourAppliesToAllGroups(false);\r
726     af.changeColour(af.viewport.getGlobalColourScheme());\r
727     af.viewport.setColourAppliesToAllGroups(true);\r
728 \r
729     if (view.getShowSequenceFeatures())\r
730     {\r
731       af.viewport.showSequenceFeatures = true;\r
732       af.sequenceFeatures.setSelected(true);\r
733       new SequenceFeatureFetcher(al, af.alignPanel);\r
734        al.featuresAdded = true;\r
735     }\r
736 \r
737     //LOAD TREES\r
738     ///////////////////////////////////////\r
739  /*   JInternalFrame[] frames = Desktop.desktop.getAllFrames();\r
740 for(int t=0; t<frames.length; t++)\r
741 {\r
742   if (frames[t] instanceof TreePanel)\r
743   {\r
744     TreePanel tp = (TreePanel) frames[t];\r
745     if(tp.treeCanvas.av.alignment==jal)\r
746     {\r
747       Tree tree = new Tree();\r
748       tree.setTitle(tp.getTitle());\r
749       tree.setCurrentTree((af.viewport.currentTree == tp.getTree()));\r
750       tree.setNewick(tp.getTree().toString());\r
751       tree.setThreshold(tp.treeCanvas.threshold);\r
752 \r
753       tree.setHeight(tp.getHeight());\r
754       tree.setWidth(tp.getWidth());\r
755       tree.setXpos(tp.getX());\r
756       tree.setYpos(tp.getY());\r
757 \r
758       jms.addTree(tree);\r
759     }\r
760 */\r
761     if (jms.getTreeCount() > 0)\r
762     {\r
763       try\r
764       {\r
765         for(int t = 0; t<jms.getTreeCount(); t++)\r
766         {\r
767           Tree tree = jms.getTree(t);\r
768 \r
769           TreePanel tp = af.ShowNewickTree(new jalview.io.NewickFile(\r
770                   tree.getNewick()), tree.getTitle());\r
771 \r
772           tp.setBounds( tree.getXpos(),\r
773                         tree.getYpos(),\r
774                         tree.getWidth(),\r
775                         tree.getHeight());\r
776 \r
777           tp.fitToWindow.setState(tree.getFitToWindow());\r
778           tp.fitToWindow_actionPerformed(null);\r
779           tp.treeCanvas.fontSize = tree.getFontSize();\r
780           tp.fontSize.setText("Font Size - "+tree.getFontSize());\r
781           tp.placeholdersMenu.setState(tree.getMarkUnlinked());\r
782           tp.placeholdersMenu_actionPerformed(null);\r
783           tp.bootstrapMenu.setState(tree.getShowBootstrap());\r
784           tp.bootstrapMenu_actionPerformed(null);\r
785           tp.distanceMenu.setState(tree.getShowDistances());\r
786           tp.distanceMenu_actionPerformed(null);\r
787           tp.treeCanvas.threshold = tree.getThreshold();\r
788           if(tree.getCurrentTree());\r
789              af.viewport.setCurrentTree(tp.getTree());\r
790         }\r
791       }\r
792       catch (Exception ex)\r
793       {\r
794         ex.printStackTrace();\r
795       }\r
796     }\r
797   }\r
798 }\r