*/
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;
/**
* DOCUMENT ME!
*/
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
JalviewModelSequence jms = object.getJalviewModelSequence();
- Viewport[] views = jms.getViewport();
- Viewport view = views[0]; // DEAL WITH MULTIPLE VIEWPORTS LATER
+ Viewport view = jms.getViewport(0);
//////////////////////////////////
//LOAD SEQUENCES
}
}
-
- // af.changeColour() );
/////////////////////////
//LOAD GROUPS
if (jms.getJGroupCount() > 0)
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();
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<JSEQ.length; s++)
af.viewport.setStartSeq(view.getStartSeq());
af.viewport.setShowAnnotation(view.getShowAnnotation());
af.viewport.setAbovePIDThreshold(view.getPidSelected());
- af.abovePIDThreshold.setSelected(view.getPidSelected());
+
af.viewport.setColourText(view.getShowColourText());
- af.colourTextMenuItem.setSelected(view.getShowColourText());
- af.viewport.setConservationSelected(view.getConservationSelected());
- af.conservationMenuItem.setSelected(view.getConservationSelected());
+ af.viewport.setConservationSelected(view.getConservationSelected());
af.viewport.setShowJVSuffix(view.getShowFullId());
- af.seqLimits.setSelected(view.getShowFullId());
-
af.viewport.setFont(new java.awt.Font(view.getFontName(),
view.getFontStyle(), view.getFontSize()));
af.alignPanel.fontChanged();
-
af.viewport.setRenderGaps(view.getRenderGaps());
- af.renderGapsMenuItem.setSelected(view.getRenderGaps());
-
af.viewport.setWrapAlignment(view.getWrapAlignment());
- af.wrapMenuItem.setSelected(view.getWrapAlignment());
-
af.alignPanel.setWrapAlignment(view.getWrapAlignment());
-
- af.annotationPanelMenuItem.setState(view.getShowAnnotation());
af.viewport.setShowAnnotation(view.getShowAnnotation());
af.alignPanel.setAnnotationVisible(view.getShowAnnotation());
af.viewport.setShowBoxes(view.getShowBoxes());
- af.viewBoxesMenuItem.setSelected(view.getShowBoxes());
+
af.viewport.setShowText(view.getShowText());
- af.viewTextMenuItem.setSelected(view.getShowText());
+
ColourSchemeI cs = null;
}
}
- af.setColourSelected(view.getBgColour());
+
af.viewport.setGlobalColourScheme(cs);
af.viewport.setColourAppliesToAllGroups(false);
- af.changeColour(cs);
+
if (view.getConservationSelected() && cs!=null)
{
cs.setConservationInc(view.getConsThreshold());
}
+ af.changeColour(cs);
+
af.viewport.setColourAppliesToAllGroups(true);
+
+
if (view.getShowSequenceFeatures())
{
af.viewport.showSequenceFeatures = true;
- af.showSeqFeatures.setSelected(true);
}
if(jms.getFeatureSettings()!=null)
}
}
+ af.setMenusFromViewport(af.viewport);
+
Desktop.addInternalFrame(af, view.getTitle(),
view.getWidth(), view.getHeight());
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;
+ }
}