X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FDesktop.java;fp=src%2Fjalview%2Fgui%2FDesktop.java;h=89499c113a0d389f256776c7492f530bb65149a1;hb=3da878124135ff033f42d19d8733891b09e953cd;hp=30c37de3a1671057a99b543c039461a0f3f46c9e;hpb=2d8dfad8a0aa6a6febfc0c3bc0379de0b46e0cfc;p=jalview.git diff --git a/src/jalview/gui/Desktop.java b/src/jalview/gui/Desktop.java index 30c37de..89499c1 100644 --- a/src/jalview/gui/Desktop.java +++ b/src/jalview/gui/Desktop.java @@ -27,6 +27,7 @@ import jalview.api.AlignmentViewPanel; import jalview.bin.Cache; import jalview.bin.Jalview; import jalview.gui.ImageExporter.ImageWriterI; +import jalview.io.BackupFiles; import jalview.io.DataSourceType; import jalview.io.FileFormat; import jalview.io.FileFormatException; @@ -39,6 +40,7 @@ import jalview.io.JalviewFileChooser; import jalview.io.JalviewFileView; import jalview.jbgui.GSplitFrame; import jalview.jbgui.GStructureViewer; +import jalview.project.Jalview2XML; import jalview.structure.StructureSelectionManager; import jalview.urls.IdOrgSettings; import jalview.util.BrowserLauncher; @@ -1114,7 +1116,7 @@ public class Desktop extends jalview.jbgui.GDesktop { String fileFormat = Cache.getProperty("DEFAULT_FILE_FORMAT"); JalviewFileChooser chooser = JalviewFileChooser - .forRead(Cache.getProperty("LAST_DIRECTORY"), fileFormat); + .forRead(Cache.getProperty("LAST_DIRECTORY"), fileFormat, true); chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle( @@ -1649,20 +1651,45 @@ public class Desktop extends jalview.jbgui.GDesktop * Jalview project file */ @Override - public void saveState_actionPerformed(boolean asCastor) + public void saveState_actionPerformed() { - JalviewFileChooser chooser = new JalviewFileChooser( - asCastor ? "jvp" : "jvx", - "Jalview Project"); + saveState_actionPerformed(false); + } - chooser.setFileView(new JalviewFileView()); - chooser.setDialogTitle(MessageManager.getString("label.save_state")); - int option = chooser.showSaveDialog(this); - if (option == JalviewFileChooser.APPROVE_OPTION) + 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(); + + // System.out.println("autoSave="+autoSave+", projectFile='"+projectFile+"', + // saveAs="+saveAs+", Backups + // "+(BackupFiles.getEnabled()?"enabled":"disabled")); + + boolean approveSave = false; + if (!autoSave) { - File choice = chooser.getSelectedFile(); - setProjectFile(choice); + JalviewFileChooser chooser = new JalviewFileChooser("jvp", + "Jalview Project"); + + 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 @@ -1671,46 +1698,48 @@ public class Desktop extends jalview.jbgui.GDesktop // TODO: refactor to Jalview desktop session controller action. setProgressBar(MessageManager.formatMessage( "label.saving_jalview_project", new Object[] - { choice.getName() }), choice.hashCode()); + { chosenFile.getName() }), chosenFile.hashCode()); jalview.bin.Cache.setProperty("LAST_DIRECTORY", - choice.getParent()); + chosenFile.getParent()); // TODO catch and handle errors for savestate // TODO prevent user from messing with the Desktop whilst we're saving try { - if (asCastor) - { - new Jalview2XML().saveState(choice); - } - else - { - new jalview.project.Jalview2XML().saveState(choice); - } + BackupFiles backupfiles = new BackupFiles(chosenFile); + + new Jalview2XML().saveState(backupfiles.getTempFile()); + + backupfiles.setWriteSuccess(true); + backupfiles.rollBackupsAndRenameTempFile(); } catch (OutOfMemoryError oom) { - new OOMWarning( - "Whilst saving current state to " + choice.getName(), - oom); + new OOMWarning("Whilst saving current state to " + + chosenFile.getName(), oom); } catch (Exception ex) { - Cache.log.error( - "Problems whilst trying to save to " + choice.getName(), - ex); - JvOptionPane.showMessageDialog(Desktop.this, + Cache.log.error("Problems whilst trying to save to " + + chosenFile.getName(), ex); + JvOptionPane.showMessageDialog(me, MessageManager.formatMessage( "label.error_whilst_saving_current_state_to", new Object[] - { choice.getName() }), + { chosenFile.getName() }), MessageManager.getString("label.couldnt_save_project"), JvOptionPane.WARNING_MESSAGE); } - setProgressBar(null, choice.hashCode()); + setProgressBar(null, chosenFile.hashCode()); } }).start(); } } - void setProjectFile(File choice) + @Override + public void saveAsState_actionPerformed(ActionEvent e) + { + saveState_actionPerformed(true); + } + + private void setProjectFile(File choice) { this.projectFile = choice; } @@ -1721,24 +1750,19 @@ public class Desktop extends jalview.jbgui.GDesktop } /** - * Prompts the user to choose a file and loads in as a Jalview project file + * Shows a file chooser dialog and tries to read in the selected file as a + * Jalview project */ @Override - public void loadState_actionPerformed(boolean asCastor) - { - // TODO: GET RID OF .JVX BEFORE RELEASE JIM! - final String[] suffix = asCastor ? new String[] { "jvp", "jar" } - : new String[] - { "jvx" }; - final String[] desc = asCastor - ? new String[] - { "Jalview Project", "Jalview Project (old)" } - : new String[] - { "Jalview Project" }; + 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( - Cache.getProperty("LAST_DIRECTORY"), suffix, - desc, - "Jalview Project"); + Cache.getProperty("LAST_DIRECTORY"), suffix, desc, + "Jalview Project", true, true); // last two booleans: allFiles, + // allowBackupFiles chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle(MessageManager.getString("label.restore_state")); chooser.setResponseHandler(0, new Runnable() @@ -1755,30 +1779,24 @@ public class Desktop extends jalview.jbgui.GDesktop @Override public void run() { - try { - if (asCastor) - { - new Jalview2XML().loadJalviewAlign(choice); - } - else - { - new jalview.project.Jalview2XML().loadJalviewAlign(selectedFile); - } - } catch (OutOfMemoryError oom) + try { - new OOMWarning("Whilst loading project from " + choice, oom); - } catch (Exception ex) - { - Cache.log.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"), - JvOptionPane.WARNING_MESSAGE); - } + new Jalview2XML().loadJalviewAlign(choice); + } catch (OutOfMemoryError oom) + { + new OOMWarning("Whilst loading project from " + choice, oom); + } catch (Exception ex) + { + Cache.log.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"), + JvOptionPane.WARNING_MESSAGE); + } } }).start(); }