From: amwaterhouse Date: Fri, 3 Nov 2006 14:26:13 +0000 (+0000) Subject: Use Jalview2XML to copy AlignmentPanel X-Git-Tag: Release_2_2~185 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=8b4e92b5a422435311e2384f04b28f16b77206b6;p=jalview.git Use Jalview2XML to copy AlignmentPanel --- diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 7ef0e25..4641fdb 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -166,33 +166,21 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener case KeyEvent.VK_V: if (!evt.isControlDown()) { - AlignmentI al; - if(viewport.hasHiddenRows) - { - al = viewport.alignment.getHiddenSequences().getFullAlignment(); - } - else - al = new Alignment(viewport.alignment.getSequencesArray()); - - AlignViewport newview = new AlignViewport(al); + AlignmentPanel newap = + new Jalview2XML().copyAlignPanel(alignPanel, true); if(viewport.viewName==null) viewport.viewName="View 1"; - newview.historyList = viewport.historyList; - newview.redoList = viewport.redoList; - - newview.sequenceSetID = viewport.getSequenceSetId(); - newview.viewName = "View " + + newap.av.historyList = viewport.historyList; + newap.av.redoList = viewport.redoList; + newap.av.viewName = "View " + (Desktop.getViewCount(viewport.getSequenceSetId())+1); - AlignmentPanel newap = new AlignmentPanel(af, newview); - - PaintRefresher.Register(newap, viewport.getSequenceSetId()); - PaintRefresher.Register(alignPanel, viewport.getSequenceSetId()); - addAlignmentPanel(newap, true); + tabbedPane.setSelectedIndex(tabbedPane.getTabCount()-1); + } break; case KeyEvent.VK_G: diff --git a/src/jalview/gui/Jalview2XML.java b/src/jalview/gui/Jalview2XML.java index f188e31..1e449cc 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) @@ -240,7 +247,7 @@ public class Jalview2XML } vamsasSet.addSequence(vamsasSeq); - seqRefIds.put(id+"", vamsasSeq); + seqRefIds.put(id+"", jal.getSequenceAt(i)); } jseq = new JSeq(); @@ -581,10 +588,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); @@ -718,22 +737,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, @@ -819,14 +845,6 @@ public class Jalview2XML return ucs; } - Hashtable seqRefIds; - - /** - * This maintains a list of viewports, the key being the - * seqSetId. Important to set historyItem and redoList - * for multiple views - */ - Hashtable viewportsAdded; /** * DOCUMENT ME! @@ -835,6 +853,8 @@ public class Jalview2XML */ public AlignFrame LoadJalviewAlign(final String file) { + uniqueSetSuffix = System.currentTimeMillis()%100000 +""; + jalview.gui.AlignFrame af = null; seqRefIds = new Hashtable(); @@ -1284,7 +1304,12 @@ public class Jalview2XML view.getWidth(), view.getHeight() ); - af.viewport.sequenceSetID = view.getSequenceSetId(); + + //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(); @@ -1292,19 +1317,21 @@ public class Jalview2XML { jalview.gui.AlignViewport av = (jalview.gui.AlignViewport) - viewportsAdded.get(view.getSequenceSetId()); + viewportsAdded.get(uniqueSeqSetId); + af.viewport.sequenceSetID = uniqueSeqSetId; if(av!=null) { + af.viewport.historyList = av.historyList; af.viewport.redoList = av.redoList; } else { - viewportsAdded.put(view.getSequenceSetId(), af.viewport); + viewportsAdded.put(uniqueSeqSetId, af.viewport); } - PaintRefresher.Register(af.alignPanel, view.getSequenceSetId()); + PaintRefresher.Register(af.alignPanel, uniqueSeqSetId); } if(hiddenSeqs!=null) { @@ -1594,5 +1621,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); + af.alignPanels.clear(); + af.closeMenuItem_actionPerformed(null); + + return af.alignPanel; + } }