X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fgui%2FJalview2XML.java;h=0cac9c1e9e748d7af86c8434887aeec5d0bbd535;hb=410dfa093c4150aeadc02710c2a70eb862e3b2d8;hp=fef8a836094b299d7a7af22692af532ff3777b99;hpb=e3a5770d5844eb5cf183424643605611d3545726;p=jalview.git diff --git a/src/jalview/gui/Jalview2XML.java b/src/jalview/gui/Jalview2XML.java index fef8a83..0cac9c1 100755 --- a/src/jalview/gui/Jalview2XML.java +++ b/src/jalview/gui/Jalview2XML.java @@ -21,8 +21,6 @@ package jalview.gui; import jalview.schemes.*; -import jalview.gui.*; - import java.io.*; import java.net.*; @@ -48,6 +46,21 @@ import jalview.schemabinding.version2.*; */ public class Jalview2XML { + + Hashtable seqRefIds; + + /** + * This maintains a list of viewports, the key being the + * seqSetId. Important to set historyItem and redoList + * for multiple views + */ + Hashtable viewportsAdded; + + Hashtable annotationIds = new Hashtable(); + + String uniqueSetSuffix = ""; + + // SAVES SEVERAL ALIGNMENT WINDOWS TO SAME JARFILE public void SaveState(File statefile) { @@ -112,9 +125,6 @@ public class Jalview2XML AlignmentPanel apanel = (AlignmentPanel) af.alignPanels. elementAt(ap); - if (apanel.av.explodedPosition == null) - apanel.av.explodedPosition = af.getBounds(); - SaveState(apanel, apSize == 1 ? shortName : ap+shortName, jout, out); @@ -132,7 +142,7 @@ public class Jalview2XML } // USE THIS METHOD TO SAVE A SINGLE ALIGNMENT WINDOW - public void SaveAlignment(AlignFrame af, String jarFile, + public boolean SaveAlignment(AlignFrame af, String jarFile, String fileName) { try @@ -146,9 +156,6 @@ public class Jalview2XML { AlignmentPanel apanel = (AlignmentPanel)af.alignPanels.elementAt(ap); - if (apanel.av.explodedPosition == null) - apanel.av.explodedPosition = af.getBounds(); - SaveState(apanel, apSize==1?fileName:fileName+ap, jout, out); @@ -156,10 +163,12 @@ public class Jalview2XML out.close(); jout.close(); + return true; } catch (Exception ex) { ex.printStackTrace(); + return false; } } @@ -172,7 +181,7 @@ public class Jalview2XML * @param jout DOCUMENT ME! * @param out DOCUMENT ME! */ - public void SaveState(AlignmentPanel ap, + public JalviewModel SaveState(AlignmentPanel ap, String fileName, JarOutputStream jout, PrintWriter out) @@ -208,9 +217,11 @@ public class Jalview2XML //SAVE SEQUENCES int id = 0; + jalview.datamodel.SequenceI jds; for (int i = 0; i < jal.getHeight(); i++) { - id = jal.getSequenceAt(i).hashCode(); + jds = jal.getSequenceAt(i); + id = jds.hashCode(); if(seqRefIds.get(id+"")!=null) { @@ -220,14 +231,14 @@ public class Jalview2XML { vamsasSeq = new Sequence(); vamsasSeq.setId(id + ""); - vamsasSeq.setName(jal.getSequenceAt(i).getName()); - vamsasSeq.setSequence(jal.getSequenceAt(i).getSequence()); - vamsasSeq.setDescription(jal.getSequenceAt(i).getDescription()); + vamsasSeq.setName(jds.getName()); + vamsasSeq.setSequence(jds.getSequenceAsString()); + vamsasSeq.setDescription(jds.getDescription()); - if (jal.getSequenceAt(i).getDatasetSequence().getDBRef() != null) + if (jds.getDatasetSequence().getDBRef() != null) { jalview.datamodel.DBRefEntry[] dbrefs = - jal.getSequenceAt(i).getDatasetSequence().getDBRef(); + jds.getDatasetSequence().getDBRef(); for (int d = 0; d < dbrefs.length; d++) { @@ -240,40 +251,43 @@ public class Jalview2XML } vamsasSet.addSequence(vamsasSeq); - seqRefIds.put(id+"", vamsasSeq); + seqRefIds.put(id+"", jal.getSequenceAt(i)); } jseq = new JSeq(); - jseq.setStart(jal.getSequenceAt(i).getStart()); - jseq.setEnd(jal.getSequenceAt(i).getEnd()); - jseq.setColour(jal.getSequenceAt(i).getColor().getRGB()); + jseq.setStart(jds.getStart()); + jseq.setEnd(jds.getEnd()); + jseq.setColour( av.getSequenceColour(jds).getRGB()); jseq.setId(id); if (av.hasHiddenRows) { - jseq.setHidden(av.alignment.getHiddenSequences().isHidden( - jal.getSequenceAt(i))); + jseq.setHidden(av.alignment.getHiddenSequences().isHidden(jds)); - if(jal.getSequenceAt(i).getHiddenSequences()!=null) + if(av.hiddenRepSequences!=null + && av.hiddenRepSequences.containsKey(jal.getSequenceAt(i))) { - jalview.datamodel.SequenceI [] reps = - jal.getSequenceAt(i).getHiddenSequences().getSequencesInOrder(jal); + jalview.datamodel.SequenceI[] reps = + ( (jalview.datamodel.SequenceGroup) + av.hiddenRepSequences.get( + jal.getSequenceAt(i))).getSequencesInOrder(jal); for(int h=0; h 0) @@ -1256,10 +1324,14 @@ public class Jalview2XML sg.setOutlineColour(new java.awt.Color( groups[i].getOutlineColour())); + sg.textColour = new java.awt.Color(groups[i].getTextCol1()); + sg.textColour2 = new java.awt.Color(groups[i].getTextCol2()); + sg.thresholdTextColour = groups[i].getTextColThreshold(); + if (groups[i].getConsThreshold() != 0) { jalview.analysis.Conservation c = new jalview.analysis.Conservation("All", - ResidueProperties.propHash, 3, sg.getSequences(false), 0, + ResidueProperties.propHash, 3, sg.getSequences(null), 0, sg.getWidth() - 1); c.calculate(); c.verdict(false, 25); @@ -1278,23 +1350,59 @@ public class Jalview2XML view.getWidth(), view.getHeight() ); - af.viewport.sequenceSetID = view.getSequenceSetId(); + af.setFileName(file, "Jalview"); + + for (int i = 0; i < JSEQ.length; i++) + { + af.viewport.setSequenceColour( + af.viewport.alignment.getSequenceAt(i), + new java.awt.Color( + JSEQ[i].getColour())); + } + + //If we just load in the same jar file again, the sequenceSetId + //will be the same, and we end up with multiple references + //to the same sequenceSet. We must modify this id on load + //so that each load of the file gives a unique id + String uniqueSeqSetId = view.getSequenceSetId()+uniqueSetSuffix; af.viewport.gatherViewsHere = view.getGatheredViews(); if (view.getSequenceSetId() != null) - PaintRefresher.Register(af.alignPanel, view.getSequenceSetId()); + { + jalview.gui.AlignViewport av = + (jalview.gui.AlignViewport) + viewportsAdded.get(uniqueSeqSetId); + + af.viewport.sequenceSetID = uniqueSeqSetId; + if(av!=null) + { + af.viewport.historyList = av.historyList; + af.viewport.redoList = av.redoList; + } + else + { + viewportsAdded.put(uniqueSeqSetId, af.viewport); + } + + PaintRefresher.Register(af.alignPanel, uniqueSeqSetId); + } if(hiddenSeqs!=null) { for(int s=0; s