X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fgui%2FJalview2XML.java;h=e6191deb0f3e5f9a26791ab7169c448f7de2e7ce;hb=237972562c84b83dbd287071cdd839d97aaf7d4b;hp=e11830985af7b108cbce2b67056cdcfd128ba6de;hpb=f3bc67915e61855d87866b4a614fe7a953813408;p=jalview.git diff --git a/src/jalview/gui/Jalview2XML.java b/src/jalview/gui/Jalview2XML.java index e118309..e6191de 100755 --- a/src/jalview/gui/Jalview2XML.java +++ b/src/jalview/gui/Jalview2XML.java @@ -48,6 +48,19 @@ 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; + + 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); @@ -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); @@ -172,7 +179,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 +215,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 +229,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.getSequence()); + 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,20 +249,19 @@ 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) { @@ -270,10 +278,10 @@ public class Jalview2XML } - if(jal.getSequenceAt(i).getDatasetSequence().getSequenceFeatures()!=null) + if(jds.getDatasetSequence().getSequenceFeatures()!=null) { jalview.datamodel.SequenceFeature[] sf - = jal.getSequenceAt(i).getDatasetSequence().getSequenceFeatures(); + = jds.getDatasetSequence().getSequenceFeatures(); int index = 0; while(index < sf.length) { @@ -315,9 +323,9 @@ public class Jalview2XML } } - if(jal.getSequenceAt(i).getDatasetSequence().getPDBId()!=null) + if(jds.getDatasetSequence().getPDBId()!=null) { - Enumeration en = jal.getSequenceAt(i).getDatasetSequence().getPDBId().elements(); + Enumeration en = jds.getDatasetSequence().getPDBId().elements(); while(en.hasMoreElements()) { Pdbids pdb = new Pdbids(); @@ -561,6 +569,9 @@ public class Jalview2XML groups[i].setDisplayBoxes(sg.getDisplayBoxes()); groups[i].setDisplayText(sg.getDisplayText()); groups[i].setColourText(sg.getColourText()); + groups[i].setTextCol1(sg.textColour.getRGB()); + groups[i].setTextCol2(sg.textColour2.getRGB()); + groups[i].setTextColThreshold(sg.thresholdTextColour); for (int s = 0; s < sg.getSize(false); s++) { @@ -581,10 +592,22 @@ public class Jalview2XML view.setViewName(av.viewName); view.setGatheredViews(av.gatherViewsHere); - view.setXpos(av.explodedPosition.x); - view.setYpos(av.explodedPosition.y); - view.setWidth(av.explodedPosition.width); - view.setHeight(av.explodedPosition.height); + + if (ap.av.explodedPosition != null) + { + view.setXpos(av.explodedPosition.x); + view.setYpos(av.explodedPosition.y); + view.setWidth(av.explodedPosition.width); + view.setHeight(av.explodedPosition.height); + } + else + { + view.setXpos(ap.alignFrame.getBounds().x); + view.setYpos(ap.alignFrame.getBounds().y); + view.setWidth(ap.alignFrame.getBounds().width); + view.setHeight(ap.alignFrame.getBounds().height); + } + view.setStartRes(av.startRes); view.setStartSeq(av.startSeq); @@ -645,13 +668,15 @@ public class Jalview2XML view.setShowAnnotation(av.getShowAnnotation()); view.setShowBoxes(av.getShowBoxes()); view.setShowColourText(av.getColourText()); - view.setShowConservation(av.showConservation); view.setShowFullId(av.getShowJVSuffix()); - view.setShowIdentity(av.showIdentity); - view.setShowQuality(av.showQuality); + view.setRightAlignIds(av.rightAlignIds); view.setShowSequenceFeatures(av.showSequenceFeatures); view.setShowText(av.getShowText()); view.setWrapAlignment(av.getWrapAlignment()); + view.setTextCol1(av.textColour.getRGB()); + view.setTextCol2(av.textColour2.getRGB()); + view.setTextColThreshold(av.thresholdTextColour); + if(av.featuresDisplayed!=null) { @@ -721,22 +746,29 @@ public class Jalview2XML object.setJalviewModelSequence(jms); object.getVamsasModel().addSequenceSet(vamsasSet); - try + if(out!=null) { + //We may not want to right the object to disk, + //eg we can copy the alignViewport to a new view object + //using save and then load + try + { if (!fileName.endsWith(".xml")) { - fileName = fileName + ".xml"; + fileName = fileName + ".xml"; } JarEntry entry = new JarEntry(fileName); jout.putNextEntry(entry); object.marshal(out); - } - catch (Exception ex) - { + } + catch (Exception ex) + { ex.printStackTrace(); + } } + return object; } String SetUserColourScheme(jalview.schemes.ColourSchemeI cs, @@ -822,7 +854,6 @@ public class Jalview2XML return ucs; } - Hashtable seqRefIds; /** * DOCUMENT ME! @@ -831,9 +862,13 @@ public class Jalview2XML */ public AlignFrame LoadJalviewAlign(final String file) { + uniqueSetSuffix = System.currentTimeMillis()%100000 +""; + jalview.gui.AlignFrame af = null; seqRefIds = new Hashtable(); + viewportsAdded = new Hashtable(); + Vector gatherToThisFrame= new Vector(); try @@ -875,7 +910,7 @@ public class Jalview2XML unmar.setValidation(false); object = (JalviewModel) unmar.unmarshal( in ); - af = LoadFromObject(object, file); + af = LoadFromObject(object, file, true); if(af.viewport.gatherViewsHere) { gatherToThisFrame.add(af); @@ -989,15 +1024,16 @@ public class Jalview2XML } - AlignFrame LoadFromObject(JalviewModel object, String file) + AlignFrame LoadFromObject(JalviewModel object, + String file, + boolean loadTrees ) { SequenceSet vamsasSet = object.getVamsasModel().getSequenceSet(0); Sequence[] vamsasSeq = vamsasSet.getSequence(); JalviewModelSequence jms = object.getJalviewModelSequence(); - Viewport[] views = jms.getViewport(); - Viewport view = views[0]; // DEAL WITH MULTIPLE VIEWPORTS LATER + Viewport view = jms.getViewport(0); ////////////////////////////////// //LOAD SEQUENCES @@ -1007,7 +1043,6 @@ public class Jalview2XML ArrayList tmpseqs = new ArrayList(); - boolean multipleView = false; JSeq[] JSEQ = object.getJalviewModelSequence().getJSeq(); @@ -1027,12 +1062,12 @@ public class Jalview2XML jseq.setDescription(vamsasSeq[i].getDescription()); jseq.setStart(JSEQ[i].getStart()); jseq.setEnd(JSEQ[i].getEnd()); - jseq.setColor(new java.awt.Color(JSEQ[i].getColour())); seqRefIds.put(vamsasSeq[i].getId(), jseq); tmpseqs.add( jseq ); } + if (JSEQ[i].getHidden()) { if (hiddenSeqs == null) @@ -1215,8 +1250,6 @@ public class Jalview2XML } } - - // af.changeColour() ); ///////////////////////// //LOAD GROUPS if (jms.getJGroupCount() > 0) @@ -1259,6 +1292,10 @@ 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", @@ -1281,13 +1318,44 @@ 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 0) + if (loadTrees && jms.getTreeCount() > 0) { try { @@ -1585,5 +1653,27 @@ public class Jalview2XML return af; } + + public jalview.gui.AlignmentPanel copyAlignPanel(AlignmentPanel ap, boolean keepSeqRefs ) + { + jalview.schemabinding.version2.JalviewModel jm + = SaveState(ap, null, null, null); + + if (!keepSeqRefs) + { + seqRefIds.clear(); + jm.getJalviewModelSequence().getViewport(0).setSequenceSetId(null); + } + else + uniqueSetSuffix = ""; + + viewportsAdded = new Hashtable(); + + AlignFrame af = LoadFromObject(jm, null, false); + af.alignPanels.clear(); + af.closeMenuItem_actionPerformed(true); + + return af.alignPanel; + } }