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:
*/
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)
{
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);
{
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);
* @param jout DOCUMENT ME!
* @param out DOCUMENT ME!
*/
- public void SaveState(AlignmentPanel ap,
+ public JalviewModel SaveState(AlignmentPanel ap,
String fileName,
JarOutputStream jout,
PrintWriter out)
}
vamsasSet.addSequence(vamsasSeq);
- seqRefIds.put(id+"", vamsasSeq);
+ seqRefIds.put(id+"", jal.getSequenceAt(i));
}
jseq = new JSeq();
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);
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,
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!
*/
public AlignFrame LoadJalviewAlign(final String file)
{
+ uniqueSetSuffix = System.currentTimeMillis()%100000 +"";
+
jalview.gui.AlignFrame af = null;
seqRefIds = new Hashtable();
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();
{
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)
{
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;
+ }
}