+
+ /**
+ * Returns the file extension (including '.' separator) to use for a saved
+ * viewer session file. Default is to return null (not supported), override as
+ * required.
+ *
+ * @return
+ */
+ public String getSessionFileExtension()
+ {
+ return null;
+ }
+
+ /**
+ * If supported, saves the state of the structure viewer to a temporary file
+ * and returns the file. Returns null and logs an error on any failure.
+ *
+ * @return
+ */
+ public File saveSession()
+ {
+ String prefix = getViewerType().toString();
+ String suffix = getSessionFileExtension();
+ File f = null;
+ try
+ {
+ f = File.createTempFile(prefix, suffix);
+ saveSession(f);
+ } catch (IOException e)
+ {
+ Cache.log.error(String.format("Error saving %s session: %s",
+ prefix, e.toString()));
+ }
+
+ return f;
+ }
+
+ /**
+ * Saves the structure viewer session to the given file
+ *
+ * @param f
+ */
+ protected void saveSession(File f)
+ {
+ StructureCommandI cmd = commandGenerator
+ .saveSession(f.getPath());
+ if (cmd != null)
+ {
+ executeCommand(cmd, false);
+ }
+ }
+
+ /**
+ * Returns true if the viewer is an external structure viewer for which the
+ * process is still alive, else false (for Jmol, or an external viewer which
+ * the user has independently closed)
+ *
+ * @return
+ */
+ public boolean isViewerRunning()
+ {
+ return false;
+ }
+
+ /**
+ * Closes Jalview's structure viewer panel and releases associated resources.
+ * If it is managing an external viewer program, and {@code forceClose} is
+ * true, also shuts down that program.
+ *
+ * @param forceClose
+ */
+ public void closeViewer(boolean forceClose)
+ {
+ getSsm().removeStructureViewerListener(this, this.getStructureFiles());
+ releaseUIResources();
+
+ // add external viewer shutdown in overrides
+ // todo - or can maybe pull up to here
+ }