import java.awt.Rectangle;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
-import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import jalview.gui.Desktop;
import jalview.gui.JvOptionPane;
import jalview.gui.OOMWarning;
+import jalview.gui.OverviewPanel;
import jalview.gui.PCAPanel;
import jalview.gui.PaintRefresher;
import jalview.gui.SplitFrame;
import jalview.xml.binding.jalview.JalviewModel.Viewport;
import jalview.xml.binding.jalview.JalviewModel.Viewport.CalcIdParam;
import jalview.xml.binding.jalview.JalviewModel.Viewport.HiddenColumns;
+import jalview.xml.binding.jalview.JalviewModel.Viewport.Overview;
import jalview.xml.binding.jalview.JalviewUserColours;
import jalview.xml.binding.jalview.JalviewUserColours.Colour;
import jalview.xml.binding.jalview.MapListType.MapListFrom;
if (frames[f] instanceof StructureViewerBase)
{
StructureViewerBase viewFrame = (StructureViewerBase) frames[f];
- matchedFile = saveStructureState(ap, jds, pdb, entry, viewIds,
+ matchedFile = saveStructureViewer(ap, jds, pdb, entry, viewIds,
matchedFile, viewFrame);
/*
* Only store each structure viewer's state once in the project
* jar. First time through only (storeDS==false)
*/
String viewId = viewFrame.getViewId();
+ String viewerType = viewFrame.getViewerType().toString();
if (!storeDS && !viewIds.contains(viewId))
{
viewIds.add(viewId);
if (viewerState != null)
{
copyFileToJar(jout, viewerState.getPath(),
- getViewerJarEntryName(viewId));
+ getViewerJarEntryName(viewId), viewerType);
}
else
{
Cache.log.error("Failed to save viewer state for "
+
- viewFrame.getViewerType().toString());
+ viewerType);
}
}
}
if (!pdbfiles.contains(pdbId))
{
pdbfiles.add(pdbId);
- copyFileToJar(jout, matchedFile, pdbId);
+ copyFileToJar(jout, matchedFile, pdbId, pdbId);
}
}
view.setStartRes(vpRanges.getStartRes());
view.setStartSeq(vpRanges.getStartSeq());
+ OverviewPanel ov = ap.getOverviewPanel();
+ if (ov != null)
+ {
+ Overview overview = new Overview();
+ overview.setTitle(ov.getTitle());
+ Rectangle bounds = ov.getFrameBounds();
+ overview.setXpos(bounds.x);
+ overview.setYpos(bounds.y);
+ overview.setWidth(bounds.width);
+ overview.setHeight(bounds.height);
+ overview.setShowHidden(ov.isShowHiddenRegions());
+ overview.setGapColour(ov.getCanvas().getGapColour().getRGB());
+ overview.setResidueColour(ov.getCanvas().getResidueColour().getRGB());
+ overview.setHiddenColour(ov.getCanvas().getHiddenColour().getRGB());
+ view.setOverview(overview);
+ }
if (av.getGlobalColourScheme() instanceof jalview.schemes.UserColourScheme)
{
view.setBgColour(setUserColourScheme(av.getGlobalColourScheme(),
// using save and then load
try
{
- fileName = fileName.replace('\\', '/');
+ fileName = fileName.replace('\\', '/');
System.out.println("Writing jar entry " + fileName);
JarEntry entry = new JarEntry(fileName);
jout.putNextEntry(entry);
String varnaStateFile = varna.getStateInfo(model.rna);
jarEntryName = RNA_PREFIX + viewId + "_" + nextCounter();
- copyFileToJar(jout, varnaStateFile, jarEntryName);
+ copyFileToJar(jout, varnaStateFile, jarEntryName, "Varna");
rnaSessions.put(model, jarEntryName);
}
SecondaryStructure ss = new SecondaryStructure();
* @param jout
* @param infilePath
* @param jarEntryName
+ * @param msg
+ * additional identifying info to log to the console
*/
protected void copyFileToJar(JarOutputStream jout, String infilePath,
- String jarEntryName)
+ String jarEntryName, String msg)
{
try (InputStream is = new FileInputStream(infilePath))
{
File file = new File(infilePath);
if (file.exists() && jout != null)
{
- System.out.println("Writing jar entry " + jarEntryName);
+ System.out.println(
+ "Writing jar entry " + jarEntryName + " (" + msg + ")");
jout.putNextEntry(new JarEntry(jarEntryName));
copyAll(is, jout);
jout.closeEntry();
}
/**
- * Write the data to a new entry of given name in the output jar file
- *
- * @param jout
- * @param jarEntryName
- * @param data
- * @throws IOException
- */
- protected void writeJarEntry(JarOutputStream jout, String jarEntryName,
- byte[] data) throws IOException
- {
- if (jout != null)
- {
- jarEntryName = jarEntryName.replace('\\','/');
- System.out.println("Writing jar entry " + jarEntryName);
- jout.putNextEntry(new JarEntry(jarEntryName));
- DataOutputStream dout = new DataOutputStream(jout);
- dout.write(data, 0, data.length);
- dout.flush();
- jout.closeEntry();
- }
- }
-
- /**
* Copies input to output, in 4K buffers; handles any data (text or binary)
*
* @param in
* @param viewFrame
* @return
*/
- protected String saveStructureState(AlignmentPanel ap, SequenceI jds,
+ protected String saveStructureViewer(AlignmentPanel ap, SequenceI jds,
Pdbids pdb, PDBEntry entry, List<String> viewIds,
String matchedFile, StructureViewerBase viewFrame)
{
}
/*
- * Load any trees, PDB structures and viewers
+ * Load any trees, PDB structures and viewers, Overview
*
* Not done if flag is false (when this method is used for New View)
*/
loadPCAViewers(jalviewModel, ap);
loadPDBStructures(jprovider, jseqs, af, ap);
loadRnaViewers(jprovider, jseqs, ap);
+ loadOverview(view, af);
}
// and finally return.
return af;
}
/**
+ * Load Overview window, restoring colours, 'show hidden regions' flag, title
+ * and geometry as saved
+ *
+ * @param view
+ * @param af
+ */
+ protected void loadOverview(Viewport view, AlignFrame af)
+ {
+ Overview overview = view.getOverview();
+ if (overview != null)
+ {
+ OverviewPanel overviewPanel = af
+ .openOverviewPanel(overview.isShowHidden());
+ overviewPanel.setTitle(overview.getTitle());
+ overviewPanel.setFrameBounds(overview.getXpos(), overview.getYpos(),
+ overview.getWidth(), overview.getHeight());
+ Color gap = new Color(overview.getGapColour());
+ Color residue = new Color(overview.getResidueColour());
+ Color hidden = new Color(overview.getHiddenColour());
+ overviewPanel.getCanvas().setColours(gap, residue, hidden);
+ }
+ }
+
+ /**
* Instantiate and link any saved RNA (Varna) viewers. The state of the Varna
* panel is restored from separate jar entries, two (gapped and trimmed) per
* sequence and secondary structure.
{
splitFrameCandidates.put(view, af);
}
+
return af;
}
String state = svattrib.getStateData(); // Jalview < 2.9
if (state == null || state.isEmpty()) // Jalview >= 2.9
{
- state = readJarEntry(jprovider,
- getViewerJarEntryName(svattrib.getViewId()));
+ String jarEntryName = getViewerJarEntryName(svattrib.getViewId());
+ state = readJarEntry(jprovider, jarEntryName);
}
// TODO or simpler? for each key in oldFiles,
// replace key.getPath() in state with oldFiles.get(key).getFilePath()
{
// add pdb files that should be present in the viewer
StructureData filedat = oldFiles.get(id);
- rewritten.append(filedat.getFilePath()).append(" \"")
- .append(filedat.getFilePath()).append("\"");
+ rewritten.append(" \"").append(filedat.getFilePath()).append("\"");
}
rewritten.append(";");
}