JAL-3141 Enabled the 'Include backpup files' checkbox for loading alignments from...
[jalview.git] / src / jalview / io / JalviewFileChooser.java
index 7c3cf92..8deaa33 100755 (executable)
@@ -48,6 +48,7 @@ import javax.swing.JList;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.SpringLayout;
+import javax.swing.filechooser.FileFilter;
 import javax.swing.plaf.basic.BasicFileChooserUI;
 
 /**
@@ -80,6 +81,12 @@ public class JalviewFileChooser extends JFileChooser
   public static JalviewFileChooser forRead(String directory,
           String selected)
   {
+    return JalviewFileChooser.forRead(directory, selected, false);
+  }
+
+  public static JalviewFileChooser forRead(String directory,
+          String selected, boolean allowBackupFiles)
+  {
     List<String> extensions = new ArrayList<>();
     List<String> descs = new ArrayList<>();
     for (FileFormatI format : FileFormats.getInstance().getFormats())
@@ -90,9 +97,11 @@ public class JalviewFileChooser extends JFileChooser
         descs.add(format.getName());
       }
     }
+
     return new JalviewFileChooser(directory,
             extensions.toArray(new String[extensions.size()]),
-            descs.toArray(new String[descs.size()]), selected, true);
+            descs.toArray(new String[descs.size()]), selected, true,
+            allowBackupFiles);
   }
 
   /**
@@ -257,17 +266,24 @@ public class JalviewFileChooser extends JFileChooser
             includeBackupFiles = backupfilesCheckBox.isSelected();
             Cache.setProperty(BackupFiles.NS + "_FC_INCLUDE",
                     String.valueOf(includeBackupFiles));
+
+            FileFilter f = jfc.getFileFilter();
+            // deselect the selected file if it's no longer choosable
+            File selectedFile = jfc.getSelectedFile();
+            if (selectedFile != null && !f.accept(selectedFile))
+            {
+              jfc.setSelectedFile(null);
+            }
+            // fake the OK button changing (to force it to upate)
+            String s = jfc.getApproveButtonText();
+            jfc.firePropertyChange(
+                    APPROVE_BUTTON_TEXT_CHANGED_PROPERTY, null, s);
+            // fake the file filter changing (its behaviour actually has)
+            jfc.firePropertyChange(FILE_FILTER_CHANGED_PROPERTY, null, f);
+
             jfc.rescanCurrentDirectory();
             jfc.revalidate();
             jfc.repaint();
-            // This is a kludge. Cannot find out how to get the file list to
-            // refresh!
-            /*
-            Object o = jfc.getClientProperty(
-                    CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY);
-            jfc.firePropertyChange(CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY,
-                    o, o);
-            */
           }
         });
       }