JAL-3141 Fixed inconsistent (changed) message labels in Messages_es.props and changed...
[jalview.git] / src / jalview / jbgui / GPreferences.java
index a38283b..87cc87b 100755 (executable)
@@ -24,10 +24,12 @@ import jalview.bin.Cache;
 import jalview.fts.core.FTSDataColumnPreferences;
 import jalview.fts.core.FTSDataColumnPreferences.PreferenceSource;
 import jalview.fts.service.pdb.PDBFTSRestClient;
+import jalview.gui.Desktop;
 import jalview.gui.JalviewBooleanRadioButtons;
+import jalview.gui.JvOptionPane;
 import jalview.gui.JvSwingUtils;
 import jalview.gui.StructureViewer.ViewerType;
-import jalview.io.BackupFilenameFilter;
+import jalview.io.BackupFilenameParts;
 import jalview.io.BackupFiles;
 import jalview.util.MessageManager;
 
@@ -294,6 +296,8 @@ public class GPreferences extends JPanel
 
   protected JPanel presetsPanel = new JPanel();
 
+  protected JButton revertButton = new JButton();
+
   protected JComboBox<IntKeyStringValueEntry> backupfilesPresetsCombo = new JComboBox<>();
 
   protected JPanel suffixPanel = new JPanel();
@@ -532,9 +536,6 @@ public class GPreferences extends JPanel
     embbedBioJSON.setText(MessageManager.getString("label.embbed_biojson"));
     embbedBioJSON.setBounds(new Rectangle(228, 200, 250, 23));
 
-    TitledBorder backupFilesBorder = new TitledBorder(
-            MessageManager.getString("label.backup_files"));
-
     jPanel11.add(jLabel1);
     jPanel11.add(blcjv);
     jPanel11.add(clustaljv);
@@ -642,6 +643,7 @@ public class GPreferences extends JPanel
     linkTab.setLayout(new GridBagLayout());
 
     // Set up table for Url links
+    linkUrlTable.getTableHeader().setReorderingAllowed(false);
     linkUrlTable.setFillsViewportHeight(true);
     linkUrlTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
     linkUrlTable.setAutoCreateRowSorter(true);
@@ -1714,6 +1716,23 @@ public class GPreferences extends JPanel
     updateBackupFilesExampleLabel();
   }
 
+  private boolean warnAboutSuffixReverseChange()
+  {
+    boolean savedSuffixReverse = Cache.getDefault(BackupFiles.REVERSE_ORDER,
+            false);
+    int savedSuffixDigits = Cache.getDefault(BackupFiles.SUFFIX_DIGITS, 3);
+    String savedSuffixTemplate = Cache.getDefault(BackupFiles.SUFFIX,
+            ".bak" + BackupFiles.NUM_PLACEHOLDER);
+
+    boolean nowSuffixReverse = suffixReverse.isSelected();
+    int nowSuffixDigits = getSpinnerInt(suffixDigitsSpinner, 3);
+    String nowSuffixTemplate = suffixTemplate.getText();
+    return nowSuffixReverse != savedSuffixReverse
+            && nowSuffixDigits == savedSuffixDigits
+            && nowSuffixTemplate != null
+            && nowSuffixTemplate.equals(savedSuffixTemplate);
+  }
+
   /**
    * Initialises the Backups tabbed panel.
    * 
@@ -1727,9 +1746,9 @@ public class GPreferences extends JPanel
     backupsTab.setLayout(new GridBagLayout());
 
     GridBagConstraints gbc = new GridBagConstraints();
-    gbc.weightx = 1.0;
+    gbc.weightx = 0.0;
     gbc.weighty = 0.0;
-    gbc.anchor = GridBagConstraints.NORTHWEST;
+    gbc.anchor = GridBagConstraints.FIRST_LINE_START;
     gbc.fill = GridBagConstraints.NONE;
 
     initBackupsTabPresetsPanel();
@@ -1737,7 +1756,6 @@ public class GPreferences extends JPanel
     initBackupsTabKeepFilesPanel();
     initBackupsTabFilenameExamplesPanel();
 
-    gbc.weightx = 0.5;
     enableBackupFiles.setFont(LABEL_FONT_BOLD);
     enableBackupFiles
             .setText(MessageManager.getString("label.enable_backupfiles"));
@@ -1746,44 +1764,56 @@ public class GPreferences extends JPanel
       @Override
       public void actionPerformed(ActionEvent e)
       {
-        boolean selected = enableBackupFiles.isSelected();
         // enable other options only when the first is checked
         backupsOptionsSetEnabled();
       }
     });
 
-    // enable checkbox 1 row
+
+    // enable checkbox 1 col
     gbc.gridwidth = 1;
+    gbc.gridheight = 1;
     gbc.gridx = 0;
-    gbc.gridy = 0;
+    gbc.gridy = 0; // row 0
     backupsTab.add(enableBackupFiles, gbc);
 
+    // summary of scheme box (over two rows)
     gbc.gridx = 1;
-    gbc.weightx = 1.0;
+    gbc.weightx = 0.0;
     gbc.gridheight = 2;
-    // gbc.anchor = GridBagConstraints.NORTHEAST;
-    // gbc.fill = GridBagConstraints.HORIZONTAL;
+    gbc.anchor = GridBagConstraints.FIRST_LINE_END;
+    gbc.fill = GridBagConstraints.BOTH;
     backupsTab.add(exampleFilesPanel, gbc);
+    gbc.gridheight = 1;
+    gbc.anchor = GridBagConstraints.FIRST_LINE_START;
+    gbc.fill = GridBagConstraints.NONE;
 
+    // fill empty space on right
+    gbc.gridx++;
+    gbc.weightx = 1.0;
+    backupsTab.add(new JPanel(), gbc);
+
+    // schemes box
+    gbc.weightx = 0.0;
     gbc.gridx = 0;
-    gbc.gridy = 1;
+    gbc.gridy++; // row 1
     backupsTab.add(presetsPanel, gbc);
 
-    gbc.anchor = GridBagConstraints.NORTHWEST;
-    gbc.fill = GridBagConstraints.NONE;
+    // gbc.anchor = GridBagConstraints.NORTHWEST;
+    // now using whole row
     gbc.gridwidth = 2;
     gbc.gridheight = 1;
-    // whole suffix panel next row
+    // keep files box
     gbc.gridx = 0;
-    gbc.gridy = 2;
+    gbc.gridy++; // row 2
     backupsTab.add(keepfilesPanel, gbc);
 
-    // keep files panel
-    gbc.gridy = 3;
+    // filename strategy box
+    gbc.gridy++; // row 3
     backupsTab.add(suffixPanel, gbc);
 
     // fill empty space
-    gbc.gridy = 4;
+    gbc.gridy++; // row 4
     gbc.weighty = 1.0;
     backupsTab.add(new JPanel(), gbc);
 
@@ -1791,7 +1821,9 @@ public class GPreferences extends JPanel
     return backupsTab;
   }
 
-  private final IntKeyStringValueEntry[] backupfilesPresetEntries = {
+  protected static final int BACKUPFILESSCHEMECUSTOMISE = 0;
+
+  private static final IntKeyStringValueEntry[] backupfilesPresetEntries = {
       new IntKeyStringValueEntry(1,
               MessageManager.getString("label.default")),
       new IntKeyStringValueEntry(2,
@@ -1801,14 +1833,17 @@ public class GPreferences extends JPanel
       new IntKeyStringValueEntry(4,
               MessageManager.getString("label.rolled_backups")),
       // ...
-      new IntKeyStringValueEntry(255,
-              MessageManager.getString("label.previously_saved_scheme")),
       // IMPORTANT, keep "Custom" entry with key 0 (even though it appears last)
-      new IntKeyStringValueEntry(0,
+      new IntKeyStringValueEntry(BACKUPFILESSCHEMECUSTOMISE,
               MessageManager.getString("label.customise")) };
 
-  private final Map<Integer, BackupFilesPresetEntry> backupfilesPresetEntriesValues = new HashMap<Integer, BackupFilesPresetEntry>()
+  private static final Map<Integer, BackupFilesPresetEntry> backupfilesPresetEntriesValues = new HashMap<Integer, BackupFilesPresetEntry>()
   {
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 125L;
+
     {
       put(1, new BackupFilesPresetEntry(
               ".bak" + BackupFiles.NUM_PLACEHOLDER, 3, false, false, 3,
@@ -1824,8 +1859,27 @@ public class GPreferences extends JPanel
 
   private JPanel initBackupsTabPresetsPanel()
   {
-    presetsPanel.setBorder(
-            new TitledBorder(MessageManager.getString("label.schemes")));
+
+    String title = MessageManager.getString("label.schemes");
+    // TitledBorder tb = new TitledBorder(new EmptyBorder(0, 0, 0, 0), title);
+    // TitledBorder tb = new TitledBorder(title);
+    // tb.setTitleFont(LABEL_FONT);
+    // presetsPanel.setBorder(tb);
+
+    presetsPanel.setLayout(new GridBagLayout());
+
+    GridBagConstraints gbc = new GridBagConstraints();
+    gbc.weightx = 0.0;
+    gbc.weighty = 0.0;
+    gbc.anchor = GridBagConstraints.BASELINE_LEADING;
+    gbc.fill = GridBagConstraints.NONE;
+    gbc.gridwidth = 1;
+    gbc.gridheight = 1;
+
+    // "Scheme: "
+    gbc.gridx = 0;
+    gbc.gridy = 0;
+    presetsPanel.add(new JLabel(title + ":"), gbc);
 
     for (int i = 0; i < backupfilesPresetEntries.length; i++)
     {
@@ -1846,33 +1900,64 @@ public class GPreferences extends JPanel
       }
     });
 
-    presetsPanel.add(backupfilesPresetsCombo);
+    // dropdown list of preset schemes
+    gbc.gridx = 1;
+    presetsPanel.add(backupfilesPresetsCombo, gbc);
+
+    revertButton.setText(MessageManager.getString("label.cancel_changes"));
+    revertButton.addActionListener(new ActionListener()
+    {
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        loadLastSavedBackupsOptions();
+      }
+
+    });
+    revertButton.setFont(LABEL_FONT);
+
+    // "Cancel changes" button (aligned with combo box above)
+    gbc.gridx = 1;
+    gbc.gridy++;
+    presetsPanel.add(revertButton, gbc);
+
     return presetsPanel;
   }
 
+  private JPanel initBackupsTabFilenameExamplesPanel()
+  {
+    String title = MessageManager
+            .getString("label.summary_of_backups_scheme");
+    TitledBorder tb = new TitledBorder(title);
+    exampleFilesPanel.setBorder(tb);
+    exampleFilesPanel.setLayout(new GridBagLayout());
+
+
+    backupfilesExampleLabel.setEditable(false);
+    backupfilesExampleLabel
+            .setBackground(exampleFilesPanel.getBackground());
+
+    updateBackupFilesExampleLabel();
+
+    GridBagConstraints gbc = new GridBagConstraints();
+    gbc.weightx = 1.0;
+    gbc.weighty = 1.0;
+    gbc.fill = GridBagConstraints.NONE;
+    gbc.anchor = GridBagConstraints.FIRST_LINE_START;
+
+    exampleFilesPanel.add(backupfilesExampleLabel, gbc);
+    return exampleFilesPanel;
+  }
+
   private void backupsTabUpdatePresets()
   {
     IntKeyStringValueEntry entry = (IntKeyStringValueEntry) backupfilesPresetsCombo
             .getSelectedItem();
     int key = entry.getKey();
     String value = entry.getValue();
-    // 0 reserved for "Custom" and 255 reserved or "Previously saved scheme"
-    boolean special = key == 0 || key == 255;
 
-    if (special)
-    {
-      if (key == 0)
-      {
-        // backupsSetCustomOptions();
-      }
-      else if (key == 255)
-      {
-        loadLastSavedBackupsOptions();
-        // switch to "Customise" scheme? probably not
-        // setComboIntStringKey(backupfilesPresetsCombo, 0);
-      }
-    }
-    else
+    // BACKUPFILESSCHEMECUSTOMISE (==0) reserved for "Custom"
+    if (key != BACKUPFILESSCHEMECUSTOMISE)
     {
       if (backupfilesPresetEntriesValues.containsKey(key))
       {
@@ -1888,7 +1973,7 @@ public class GPreferences extends JPanel
     updateBackupFilesExampleLabel();
   }
 
-  protected int getComboIntStringKey(JComboBox c)
+  protected int getComboIntStringKey(JComboBox<IntKeyStringValueEntry> c)
   {
     IntKeyStringValueEntry e = (IntKeyStringValueEntry) c.getSelectedItem();
     return e != null ? e.getKey() : 0;
@@ -1900,8 +1985,6 @@ public class GPreferences extends JPanel
     for (int i = 0; i < c.getItemCount(); i++)
     {
       IntKeyStringValueEntry e = c.getItemAt(i);
-      int k = e.getKey();
-      String v = e.getValue();
       if (e.getKey() == key)
       {
         c.setSelectedIndex(i);
@@ -1989,7 +2072,22 @@ public class GPreferences extends JPanel
       @Override
       public void actionPerformed(ActionEvent e)
       {
-        updateBackupFilesExampleLabel();
+        boolean okay = true;
+        if (warnAboutSuffixReverseChange())
+        {
+          // Warning popup
+          okay = confirmSuffixReverseChange();
+        }
+        if (okay)
+        {
+          updateBackupFilesExampleLabel();
+        }
+        else
+        {
+          boolean savedSuffixReverse = Cache
+                  .getDefault(BackupFiles.REVERSE_ORDER, false);
+          suffixReverse.setSelected(savedSuffixReverse);
+        }
       }
     });
 
@@ -2034,6 +2132,20 @@ public class GPreferences extends JPanel
     return suffixPanel;
   }
 
+  private boolean confirmSuffixReverseChange()
+  {
+    boolean ret = false;
+    String warningMessage = MessageManager
+            .getString("label.warning_confirm_change_reverse");
+    int confirm = JvOptionPane.showConfirmDialog(Desktop.desktop,
+            warningMessage,
+            MessageManager.getString("label.change_increment_decrement"),
+            JvOptionPane.YES_NO_OPTION, JvOptionPane.WARNING_MESSAGE);
+
+    ret = (confirm == JvOptionPane.YES_OPTION);
+    return ret;
+  }
+
   private JPanel initBackupsTabKeepFilesPanel()
   {
     keepfilesPanel.setBorder(
@@ -2057,7 +2169,6 @@ public class GPreferences extends JPanel
       @Override
       public void actionPerformed(ActionEvent e)
       {
-        boolean selected = backupfilesKeepAll.isSelected();
         keepRollMaxOptionsEnabled();
         updateBackupFilesExampleLabel();
       }
@@ -2075,7 +2186,7 @@ public class GPreferences extends JPanel
     setIntegerSpinner(backupfilesRollMaxSpinner, 1, 999, 4, true, c);
 
     backupfilesConfirmDelete.setLabels(
-            MessageManager.getString("label.confirm_delete"),
+            MessageManager.getString("label.always_ask"),
             MessageManager.getString("label.auto_delete"));
     // update the enabled section
     keepRollMaxOptionsEnabled();
@@ -2135,42 +2246,10 @@ public class GPreferences extends JPanel
     return keepfilesPanel;
   }
 
-  private JPanel initBackupsTabFilenameExamplesPanel()
-  {
-    String title = MessageManager
-            .getString("label.summary_of_backups_scheme");
-    TitledBorder tb = new TitledBorder(new EmptyBorder(0, 0, 0, 0), title);
-    // tb.setTitleFont(LABEL_FONT);
-    exampleFilesPanel.setBorder(tb);
-    exampleFilesPanel.setLayout(new GridBagLayout());
-
-    // inordinately difficult to get this titledborder the right size for the
-    // title
-
-    backupfilesExampleLabel.setEditable(false);
-    backupfilesExampleLabel.setPreferredSize(new Dimension(280, 85));
-    backupfilesExampleLabel.setAlignmentX(LEFT_ALIGNMENT);
-    backupfilesExampleLabel.setAlignmentY(TOP_ALIGNMENT);
-
-    backupfilesExampleLabel.setFont(LABEL_FONT_ITALIC);
-    backupfilesExampleLabel
-            .setBackground(exampleFilesPanel.getBackground());
-
-    updateBackupFilesExampleLabel();
-    exampleFilesPanel.setMinimumSize(new Dimension(280, 85));
-
-    GridBagConstraints gbc = new GridBagConstraints();
-    gbc.anchor = GridBagConstraints.EAST;
-
-    gbc.gridy = 0;
-    exampleFilesPanel.add(backupfilesExampleLabel, gbc);
-    return exampleFilesPanel;
-  }
-
   protected void updateBackupFilesExampleLabel()
   {
     int exampleindex = 12;
-    String base = MessageManager.getString("label.filename");
+    String base = MessageManager.getString("label.filename") + ".fa";
     if (base == null || base.length() == 0)
     {
       base = "file_name.fa";
@@ -2191,32 +2270,16 @@ public class GPreferences extends JPanel
       return;
     }
 
-    try
-    {
-      backupfilesRollMaxSpinner.commitEdit();
-      rollMax = (Integer) backupfilesRollMaxSpinner.getValue();
-      rollMax = rollMax < 1 ? 1 : rollMax;
-    } catch (Exception e)
-    {
-      System.out.println(
-              "Failed casting (Integer) backupfilesRollMaxSpinner.getValue()");
-    }
+    rollMax = getSpinnerInt(backupfilesRollMaxSpinner, 4);
+    rollMax = rollMax < 1 ? 1 : rollMax;
 
     if (suffix.indexOf(BackupFiles.NUM_PLACEHOLDER) == -1)
     {
       rollMax = 1;
     }
 
-    try
-    {
-      suffixDigitsSpinner.commitEdit();
-      digits = (Integer) suffixDigitsSpinner.getValue();
-      digits = digits < 1 ? 1 : digits;
-    } catch (Exception e)
-    {
-      System.out.println(
-              "Failed casting (Integer) suffixTemplateSpinner.getValue()");
-    }
+    digits = getSpinnerInt(suffixDigitsSpinner, 3);
+    digits = digits < 1 ? 1 : digits;
 
     int lowersurround = 2;
     int uppersurround = 0;
@@ -2247,7 +2310,7 @@ public class GPreferences extends JPanel
           {
             exampleSB.append("\n");
           }
-          exampleSB.append(BackupFilenameFilter.getBackupFilename(index,
+          exampleSB.append(BackupFilenameParts.getBackupFilename(index,
                   base, suffix, digits));
           if (min == max)
           {
@@ -2300,7 +2363,7 @@ public class GPreferences extends JPanel
           {
             exampleSB.append("\n");
           }
-          exampleSB.append(BackupFilenameFilter.getBackupFilename(index,
+          exampleSB.append(BackupFilenameParts.getBackupFilename(index,
                   base, suffix, digits));
           if (min == max)
           {
@@ -2709,18 +2772,20 @@ class BackupFilesPresetEntry
 
 class BackupFilesPresetsComboBoxRenderer extends DefaultListCellRenderer
 {
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 88L;
+
   @Override
-  public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+  public Component getListCellRendererComponent(JList list, Object value,
+          int index, boolean isSelected, boolean cellHasFocus)
+  {
     super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
     
     try {
       IntKeyStringValueEntry e = (IntKeyStringValueEntry) value;
-      if (e.getKey() == 255)
-      {
-        // "Previously saved scheme" item
-        this.setFont(this.getFont().deriveFont(Font.ITALIC));
-      }
-      else if (e.getKey() == 0)
+      if (e.getKey() == GPreferences.BACKUPFILESSCHEMECUSTOMISE)
       {
         // "Customise" item
         this.setFont(this.getFont().deriveFont(Font.BOLD));
@@ -2731,4 +2796,4 @@ class BackupFilesPresetsComboBoxRenderer extends DefaultListCellRenderer
 
     return this;
   }
-}
\ No newline at end of file
+}