")
+ .append("
Version: ")
+ .append(Cache.getProperty("VERSION")).append("
")
+ .append("
Built: ")
+ .append(Cache.getDefault("BUILD_DATE", "unknown"))
+ .append(" from ").append(Cache.getBuildDetailsForSplash())
+ .append("");
- if (jalview.bin.Cache.getDefault("LATEST_VERSION", "Checking").equals(
- "Checking"))
+ String latestVersion = Cache.getDefault("LATEST_VERSION", "Checking");
+ if (latestVersion.equals("Checking"))
{
- message.append("
...Checking latest version...");
+ // JBP removed this message for 2.11: May be reinstated in future version
+ // message.append("
...Checking latest version...");
}
- else if (!jalview.bin.Cache.getDefault("LATEST_VERSION", "Checking")
- .equals(jalview.bin.Cache.getProperty("VERSION")))
+ else if (!latestVersion.equals(Cache.getProperty("VERSION")))
{
boolean red = false;
- if (jalview.bin.Cache.getProperty("VERSION").toLowerCase()
+ if (Cache.getProperty("VERSION").toLowerCase(Locale.ROOT)
.indexOf("automated build") == -1)
{
red = true;
@@ -1294,51 +1659,58 @@ public class Desktop extends jalview.jbgui.GDesktop implements
message.append("
");
}
- message.append("
!! Version "
- + jalview.bin.Cache.getDefault("LATEST_VERSION",
- "..Checking..")
- + " is available for download from "
- + jalview.bin.Cache.getDefault("www.jalview.org",
- "http://www.jalview.org") + " !!");
+ message.append("
!! Version ")
+ .append(Cache.getDefault("LATEST_VERSION", "..Checking.."))
+ .append(" is available for download from ")
+ .append(Cache.getDefault("www.jalview.org",
+ "https://www.jalview.org"))
+ .append(" !!");
if (red)
{
message.append("
");
}
}
- message.append("
Authors: "
- + jalview.bin.Cache
- .getDefault("AUTHORFNAMES",
- "The Jalview Authors (See AUTHORS file for current list)")
- + "
Development managed by The Barton Group, University of Dundee, Scotland, UK.
"
- + "
For help, see the FAQ at
www.jalview.org/faq and/or join the jalview-discuss@jalview.org mailing list"
- + "
If you use Jalview, please cite:"
- + "
Waterhouse, A.M., Procter, J.B., Martin, D.M.A, Clamp, M. and Barton, G. J. (2009)"
- + "
Jalview Version 2 - a multiple sequence alignment editor and analysis workbench"
- + "
Bioinformatics doi: 10.1093/bioinformatics/btp033"
- + "");
- return message;
+ message.append("
Authors: ");
+ message.append(Cache.getDefault("AUTHORFNAMES", DEFAULT_AUTHORS));
+ message.append(CITATION);
+
+ message.append("
");
+
+ return message.toString();
}
/**
- * DOCUMENT ME!
- *
- * @param e
- * DOCUMENT ME!
+ * Action on requesting Help documentation
*/
@Override
- public void documentationMenuItem_actionPerformed(ActionEvent e)
+ public void documentationMenuItem_actionPerformed()
{
try
{
- Help.showHelpWindow();
+ if (Platform.isJS())
+ {
+ BrowserLauncher.openURL("https://www.jalview.org/help.html");
+ }
+ else
+ /**
+ * Java only
+ *
+ * @j2sIgnore
+ */
+ {
+ Help.showHelpWindow();
+ }
} catch (Exception ex)
{
+ jalview.bin.Console
+ .errPrintln("Error opening help: " + ex.getMessage());
}
}
@Override
public void closeAll_actionPerformed(ActionEvent e)
{
+ // TODO show a progress bar while closing?
JInternalFrame[] frames = desktop.getAllFrames();
for (int i = 0; i < frames.length; i++)
{
@@ -1349,11 +1721,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements
{
}
}
- System.out.println("ALL CLOSED");
- if (v_client != null)
- {
- // TODO clear binding to vamsas document objects on close_all
- }
+ Jalview.getInstance().setCurrentAlignFrame(null);
+ jalview.bin.Console.info("ALL CLOSED");
/*
* reset state of singleton objects as appropriate (clear down session state
@@ -1367,6 +1736,22 @@ public class Desktop extends jalview.jbgui.GDesktop implements
}
}
+ public int structureViewersStillRunningCount()
+ {
+ int count = 0;
+ JInternalFrame[] frames = desktop.getAllFrames();
+ for (int i = 0; i < frames.length; i++)
+ {
+ if (frames[i] != null
+ && frames[i] instanceof JalviewStructureDisplayI)
+ {
+ if (((JalviewStructureDisplayI) frames[i]).stillRunning())
+ count++;
+ }
+ }
+ return count;
+ }
+
@Override
public void raiseRelated_actionPerformed(ActionEvent e)
{
@@ -1394,17 +1779,16 @@ public class Desktop extends jalview.jbgui.GDesktop implements
protected void garbageCollect_actionPerformed(ActionEvent e)
{
// We simply collect the garbage
- jalview.bin.Cache.log.debug("Collecting garbage...");
+ jalview.bin.Console.debug("Collecting garbage...");
System.gc();
- jalview.bin.Cache.log.debug("Finished garbage collection.");
+ jalview.bin.Console.debug("Finished garbage collection.");
}
/*
* (non-Javadoc)
*
- * @see
- * jalview.jbgui.GDesktop#showMemusage_actionPerformed(java.awt.event.ActionEvent
- * )
+ * @see jalview.jbgui.GDesktop#showMemusage_actionPerformed(java.awt.event.
+ * ActionEvent )
*/
@Override
protected void showMemusage_actionPerformed(ActionEvent e)
@@ -1434,11 +1818,14 @@ public class Desktop extends jalview.jbgui.GDesktop implements
*/
void showConsole(boolean selected)
{
- showConsole.setSelected(selected);
// TODO: decide if we should update properties file
- Cache.setProperty("SHOW_JAVA_CONSOLE", Boolean.valueOf(selected)
- .toString());
- jconsole.setVisible(selected);
+ if (jconsole != null) // BH 2018
+ {
+ showConsole.setSelected(selected);
+ Cache.setProperty("SHOW_JAVA_CONSOLE",
+ Boolean.valueOf(selected).toString());
+ jconsole.setVisible(selected);
+ }
}
void reorderAssociatedWindows(boolean minimize, boolean close)
@@ -1527,72 +1914,109 @@ public class Desktop extends jalview.jbgui.GDesktop implements
@Override
protected void preferences_actionPerformed(ActionEvent e)
{
- new Preferences();
+ Preferences.openPreferences();
}
/**
- * DOCUMENT ME!
- *
- * @param e
- * DOCUMENT ME!
+ * Prompts the user to choose a file and then saves the Jalview state as a
+ * Jalview project file
*/
@Override
- public void saveState_actionPerformed(ActionEvent e)
+ public void saveState_actionPerformed()
{
- JalviewFileChooser chooser = new JalviewFileChooser(
- jalview.bin.Cache.getProperty("LAST_DIRECTORY"),
- new String[] { "jvp" }, new String[] { "Jalview Project" },
- "Jalview Project");
+ saveState_actionPerformed(false);
+ }
- chooser.setFileView(new JalviewFileView());
- chooser.setDialogTitle(MessageManager.getString("label.save_state"));
+ public void saveState_actionPerformed(boolean saveAs)
+ {
+ java.io.File projectFile = getProjectFile();
+ // autoSave indicates we already have a file and don't need to ask
+ boolean autoSave = projectFile != null && !saveAs
+ && BackupFiles.getEnabled();
- int value = chooser.showSaveDialog(this);
+ // jalview.bin.Console.outPrintln("autoSave="+autoSave+",
+ // projectFile='"+projectFile+"',
+ // saveAs="+saveAs+", Backups
+ // "+(BackupFiles.getEnabled()?"enabled":"disabled"));
- if (value == JalviewFileChooser.APPROVE_OPTION)
+ boolean approveSave = false;
+ if (!autoSave)
{
- final Desktop me = this;
- final java.io.File choice = chooser.getSelectedFile();
- setProjectFile(choice);
+ JalviewFileChooser chooser = new JalviewFileChooser("jvp",
+ "Jalview Project");
- new Thread(new Runnable()
+ chooser.setFileView(new JalviewFileView());
+ chooser.setDialogTitle(MessageManager.getString("label.save_state"));
+
+ int value = chooser.showSaveDialog(this);
+
+ if (value == JalviewFileChooser.APPROVE_OPTION)
+ {
+ projectFile = chooser.getSelectedFile();
+ setProjectFile(projectFile);
+ approveSave = true;
+ }
+ }
+
+ if (approveSave || autoSave)
+ {
+ final Desktop me = this;
+ final java.io.File chosenFile = projectFile;
+ new Thread(new Runnable()
{
@Override
public void run()
{
// TODO: refactor to Jalview desktop session controller action.
setProgressBar(MessageManager.formatMessage(
- "label.saving_jalview_project",
- new Object[] { choice.getName() }), choice.hashCode());
- jalview.bin.Cache.setProperty("LAST_DIRECTORY",
- choice.getParent());
+ "label.saving_jalview_project", new Object[]
+ { chosenFile.getName() }), chosenFile.hashCode());
+ Cache.setProperty("LAST_DIRECTORY", chosenFile.getParent());
// TODO catch and handle errors for savestate
// TODO prevent user from messing with the Desktop whilst we're saving
try
{
- new Jalview2XML().saveState(choice);
+ boolean doBackup = BackupFiles.getEnabled();
+ BackupFiles backupfiles = doBackup ? new BackupFiles(chosenFile)
+ : null;
+
+ new Jalview2XML().saveState(
+ doBackup ? backupfiles.getTempFile() : chosenFile);
+
+ if (doBackup)
+ {
+ backupfiles.setWriteSuccess(true);
+ backupfiles.rollBackupsAndRenameTempFile();
+ }
} catch (OutOfMemoryError oom)
{
new OOMWarning("Whilst saving current state to "
- + choice.getName(), oom);
+ + chosenFile.getName(), oom);
} catch (Exception ex)
{
- Cache.log.error(
- "Problems whilst trying to save to " + choice.getName(),
- ex);
- JOptionPane.showMessageDialog(me, MessageManager.formatMessage(
- "label.error_whilst_saving_current_state_to",
- new Object[] { choice.getName() }), MessageManager
- .getString("label.couldnt_save_project"),
- JOptionPane.WARNING_MESSAGE);
+ jalview.bin.Console.error("Problems whilst trying to save to "
+ + chosenFile.getName(), ex);
+ JvOptionPane.showMessageDialog(me,
+ MessageManager.formatMessage(
+ "label.error_whilst_saving_current_state_to",
+ new Object[]
+ { chosenFile.getName() }),
+ MessageManager.getString("label.couldnt_save_project"),
+ JvOptionPane.WARNING_MESSAGE);
}
- setProgressBar(null, choice.hashCode());
+ setProgressBar(null, chosenFile.hashCode());
}
}).start();
}
}
- private void setProjectFile(File choice)
+ @Override
+ public void saveAsState_actionPerformed(ActionEvent e)
+ {
+ saveState_actionPerformed(true);
+ }
+
+ protected void setProjectFile(File choice)
{
this.projectFile = choice;
}
@@ -1603,60 +2027,56 @@ public class Desktop extends jalview.jbgui.GDesktop implements
}
/**
- * DOCUMENT ME!
- *
- * @param e
- * DOCUMENT ME!
+ * Shows a file chooser dialog and tries to read in the selected file as a
+ * Jalview project
*/
@Override
- public void loadState_actionPerformed(ActionEvent e)
+ public void loadState_actionPerformed()
{
+ final String[] suffix = new String[] { "jvp", "jar" };
+ final String[] desc = new String[] { "Jalview Project",
+ "Jalview Project (old)" };
JalviewFileChooser chooser = new JalviewFileChooser(
- jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[] {
- "jvp", "jar" }, new String[] { "Jalview Project",
- "Jalview Project (old)" }, "Jalview Project");
+ Cache.getProperty("LAST_DIRECTORY"), suffix, desc,
+ "Jalview Project", true, BackupFiles.getEnabled()); // last two
+ // booleans:
+ // allFiles,
+ // allowBackupFiles
chooser.setFileView(new JalviewFileView());
chooser.setDialogTitle(MessageManager.getString("label.restore_state"));
-
- int value = chooser.showOpenDialog(this);
-
- if (value == JalviewFileChooser.APPROVE_OPTION)
- {
- final File selectedFile = chooser.getSelectedFile();
+ chooser.setResponseHandler(0, () -> {
+ File selectedFile = chooser.getSelectedFile();
setProjectFile(selectedFile);
- final String choice = selectedFile.getAbsolutePath();
- jalview.bin.Cache.setProperty("LAST_DIRECTORY",
- selectedFile.getParent());
+ String choice = selectedFile.getAbsolutePath();
+ Cache.setProperty("LAST_DIRECTORY", selectedFile.getParent());
new Thread(new Runnable()
{
@Override
public void run()
{
- setProgressBar(
- MessageManager.formatMessage(
- "label.loading_jalview_project",
- new Object[] { choice }), choice.hashCode());
try
{
- new Jalview2XML().loadJalviewAlign(choice);
+ new Jalview2XML().loadJalviewAlign(selectedFile);
} catch (OutOfMemoryError oom)
{
new OOMWarning("Whilst loading project from " + choice, oom);
} catch (Exception ex)
{
- Cache.log.error("Problems whilst loading project from "
- + choice, ex);
- JOptionPane.showMessageDialog(Desktop.desktop, MessageManager
- .formatMessage(
+ jalview.bin.Console.error(
+ "Problems whilst loading project from " + choice, ex);
+ JvOptionPane.showMessageDialog(Desktop.desktop,
+ MessageManager.formatMessage(
"label.error_whilst_loading_project_from",
- new Object[] { choice }), MessageManager
- .getString("label.couldnt_load_project"),
- JOptionPane.WARNING_MESSAGE);
+ new Object[]
+ { choice }),
+ MessageManager.getString("label.couldnt_load_project"),
+ JvOptionPane.WARNING_MESSAGE);
}
- setProgressBar(null, choice.hashCode());
}
- }).start();
- }
+ }, "Project Loader").start();
+ });
+
+ chooser.showOpenDialog(this);
}
@Override
@@ -1667,14 +2087,15 @@ public class Desktop extends jalview.jbgui.GDesktop implements
JPanel progressPanel;
- ArrayList