X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fjbgui%2FGPreferences.java;h=8c60b3616a64cf7ba9a9613850a3d88d00896807;hb=2d2b6828b010b374731bb3de3945440977b77a66;hp=4477620bc48c4431108ed22295e731583607b644;hpb=fbe3e90a9629de09b83db68d7c1e4b820825317e;p=jalview.git diff --git a/src/jalview/jbgui/GPreferences.java b/src/jalview/jbgui/GPreferences.java index 4477620..8c60b36 100755 --- a/src/jalview/jbgui/GPreferences.java +++ b/src/jalview/jbgui/GPreferences.java @@ -20,13 +20,15 @@ */ package jalview.jbgui; +import jalview.bin.Cache; import jalview.fts.core.FTSDataColumnPreferences; import jalview.fts.core.FTSDataColumnPreferences.PreferenceSource; import jalview.fts.service.pdb.PDBFTSRestClient; import jalview.gui.JalviewBooleanRadioButtons; 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; import java.awt.BorderLayout; @@ -47,6 +49,8 @@ import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.util.HashMap; +import java.util.Map; import javax.swing.AbstractCellEditor; import javax.swing.BorderFactory; @@ -57,6 +61,7 @@ import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JFileChooser; import javax.swing.JLabel; +import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; @@ -91,6 +96,9 @@ public class GPreferences extends JPanel private static final Font LABEL_FONT_ITALIC = JvSwingUtils .getLabelFont(false, true); + private static final Font LABEL_FONT_BOLD = JvSwingUtils + .getLabelFont(true, false); + /* * Visual tab components */ @@ -271,7 +279,6 @@ public class GPreferences extends JPanel protected JCheckBox sortByTree = new JCheckBox(); - /* * Web Services tab */ @@ -285,6 +292,12 @@ public class GPreferences extends JPanel protected JCheckBox enableBackupFiles = new JCheckBox(); + protected JPanel presetsPanel = new JPanel(); + + protected JButton revertButton = new JButton(); + + protected JComboBox backupfilesPresetsCombo = new JComboBox<>(); + protected JPanel suffixPanel = new JPanel(); protected JPanel keepfilesPanel = new JPanel(); @@ -303,14 +316,12 @@ public class GPreferences extends JPanel protected JalviewBooleanRadioButtons backupfilesKeepAll = new JalviewBooleanRadioButtons(); - protected JSpinner backupfilesRollMaxSpinner = new JSpinner(); + public JSpinner backupfilesRollMaxSpinner = new JSpinner(); protected JLabel oldBackupFilesLabel = new JLabel(); protected JalviewBooleanRadioButtons backupfilesConfirmDelete = new JalviewBooleanRadioButtons(); - protected JLabel exampleLabel = new JLabel(); - protected JTextArea backupfilesExampleLabel = new JTextArea(); /** @@ -523,11 +534,8 @@ 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")); - + MessageManager.getString("label.backup_files")); jPanel11.add(jLabel1); jPanel11.add(blcjv); @@ -1060,14 +1068,13 @@ public class GPreferences extends JPanel hiddenColour_actionPerformed(hiddenColour); } }); - + useLegacyGap = new JCheckBox( MessageManager.getString("label.ov_legacy_gap")); useLegacyGap.setFont(LABEL_FONT); useLegacyGap.setHorizontalAlignment(SwingConstants.LEFT); useLegacyGap.setVerticalTextPosition(SwingConstants.TOP); - gapLabel = new JLabel( - MessageManager.getString("label.gap_colour")); + gapLabel = new JLabel(MessageManager.getString("label.gap_colour")); gapLabel.setFont(LABEL_FONT); gapLabel.setHorizontalAlignment(SwingConstants.LEFT); gapLabel.setVerticalTextPosition(SwingConstants.TOP); @@ -1683,6 +1690,33 @@ public class GPreferences extends JPanel } /** + * Load the saved Backups options EXCEPT "Enabled" and "Scheme" + */ + + protected void loadLastSavedBackupsOptions() + { + enableBackupFiles + .setSelected(Cache.getDefault(BackupFiles.ENABLED, true)); + setComboIntStringKey(backupfilesPresetsCombo, + Cache.getDefault(BackupFiles.NS + "_PRESET", 1)); + suffixTemplate.setText(Cache.getDefault(BackupFiles.SUFFIX, + ".bak" + BackupFiles.NUM_PLACEHOLDER)); + suffixDigitsSpinner + .setValue(Cache.getDefault(BackupFiles.SUFFIX_DIGITS, 3)); + suffixReverse.setSelected( + Cache.getDefault(BackupFiles.REVERSE_ORDER, false)); + backupfilesKeepAll + .setSelected(Cache.getDefault(BackupFiles.NO_MAX, false)); + backupfilesRollMaxSpinner + .setValue(Cache.getDefault(BackupFiles.ROLL_MAX, 3)); + backupfilesConfirmDelete.setSelected( + Cache.getDefault(BackupFiles.CONFIRM_DELETE_OLD, true)); + + backupsOptionsSetEnabled(); + updateBackupFilesExampleLabel(); + } + + /** * Initialises the Backups tabbed panel. * * @return @@ -1690,13 +1724,24 @@ public class GPreferences extends JPanel private JPanel initBackupsTab() { JPanel backupsTab = new JPanel(); - // backupsTab.setBorder(new TitledBorder(MessageManager - // .getString("label.backup_files"))); + backupsTab.setBorder(new TitledBorder( + MessageManager.getString("label.backup_files"))); backupsTab.setLayout(new GridBagLayout()); - enableBackupFiles.setFont(LABEL_FONT); - enableBackupFiles.setText( - MessageManager.getString("label.enable_backupfiles")); + GridBagConstraints gbc = new GridBagConstraints(); + gbc.weightx = 0.0; + gbc.weighty = 0.0; + gbc.anchor = GridBagConstraints.FIRST_LINE_START; + gbc.fill = GridBagConstraints.NONE; + + initBackupsTabPresetsPanel(); + initBackupsTabSuffixPanel(); + initBackupsTabKeepFilesPanel(); + initBackupsTabFilenameExamplesPanel(); + + enableBackupFiles.setFont(LABEL_FONT_BOLD); + enableBackupFiles + .setText(MessageManager.getString("label.enable_backupfiles")); enableBackupFiles.addActionListener(new ActionListener() { @Override @@ -1704,76 +1749,246 @@ public class GPreferences extends JPanel { boolean selected = enableBackupFiles.isSelected(); // enable other options only when the first is checked - backupsOptionsSetEnabled(selected); + backupsOptionsSetEnabled(); } }); - GridBagConstraints gbc = new GridBagConstraints(); - gbc.weightx = 1.0; - gbc.weighty = 0.0; - gbc.anchor = GridBagConstraints.NORTHWEST; - gbc.fill = GridBagConstraints.NONE; - // enable checkbox 1 row + // enable checkbox 1 col gbc.gridwidth = 1; - gbc.gridy = 0; + gbc.gridheight = 1; + gbc.gridx = 0; + gbc.gridy = 0; // row 0 backupsTab.add(enableBackupFiles, gbc); - initBackupsTabSuffixPanel(); - initBackupsTabKeepFilesPanel(); - initBackupsTabFilenameExamplesPanel(); + // summary of scheme box (over two rows) + gbc.gridx = 1; + gbc.weightx = 0.0; + gbc.gridheight = 2; + 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; - /* - // set widths of the panels to the max one - int maxw = suffixPanel.getWidth(); - if (maxw < keepfilesPanel.getWidth()) + // 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++; // row 1 + backupsTab.add(presetsPanel, gbc); + + // gbc.anchor = GridBagConstraints.NORTHWEST; + // now using whole row + gbc.gridwidth = 2; + gbc.gridheight = 1; + // keep files box + gbc.gridx = 0; + gbc.gridy++; // row 2 + backupsTab.add(keepfilesPanel, gbc); + + // filename strategy box + gbc.gridy++; // row 3 + backupsTab.add(suffixPanel, gbc); + + // fill empty space + gbc.gridy++; // row 4 + gbc.weighty = 1.0; + backupsTab.add(new JPanel(), gbc); + + backupsOptionsSetEnabled(); + return backupsTab; + } + + private final int BACKUPFILESSCHEMECUSTOMISE = 0; + private final IntKeyStringValueEntry[] backupfilesPresetEntries = { + new IntKeyStringValueEntry(1, + MessageManager.getString("label.default")), + new IntKeyStringValueEntry(2, + MessageManager.getString("label.single_file")), + new IntKeyStringValueEntry(3, + MessageManager.getString("label.keep_all_versions")), + 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(BACKUPFILESSCHEMECUSTOMISE, + MessageManager.getString("label.customise")) }; + + private final Map backupfilesPresetEntriesValues = new HashMap() + { { - maxw = keepfilesPanel.getWidth(); + put(1, new BackupFilesPresetEntry( + ".bak" + BackupFiles.NUM_PLACEHOLDER, 3, false, false, 3, + false)); + put(2, new BackupFilesPresetEntry("~", 1, false, false, 1, false)); + put(3, new BackupFilesPresetEntry(".v" + BackupFiles.NUM_PLACEHOLDER, + 3, false, true, 10, true)); + put(4, new BackupFilesPresetEntry( + "_bak." + BackupFiles.NUM_PLACEHOLDER, 1, true, false, 9, + false)); } - if (maxw < exampleFilesPanel.getWidth()) + }; + + private JPanel initBackupsTabPresetsPanel() + { + + 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++) { - maxw = exampleFilesPanel.getWidth(); + backupfilesPresetsCombo.addItem(backupfilesPresetEntries[i]); } - suffixPanel.setSize(suffixPanel.getHeight(), maxw); - keepfilesPanel.setSize(keepfilesPanel.getHeight(), maxw); - exampleFilesPanel.setSize(exampleFilesPanel.getHeight(), maxw); - */ - // whole suffix panel next row - gbc.gridy = 1; - backupsTab.add(suffixPanel, gbc); + // put "Previously saved scheme" item in italics (it's not really + // selectable, as such -- it deselects itself when selected) and + // "Customise" in bold + backupfilesPresetsCombo + .setRenderer(new BackupFilesPresetsComboBoxRenderer()); + backupfilesPresetsCombo.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + backupsTabUpdatePresets(); + } + }); - // keep files panel - gbc.gridy = 2; - backupsTab.add(keepfilesPanel, gbc); + // dropdown list of preset schemes + gbc.gridx = 1; + presetsPanel.add(backupfilesPresetsCombo, gbc); - // whole examples panel next row - gbc.gridy = 3; - backupsTab.add(exampleFilesPanel, gbc); + revertButton.setText(MessageManager.getString("label.cancel_changes")); + revertButton.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + loadLastSavedBackupsOptions(); + } - // fill empty space - gbc.gridy = 4; + }); + 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; - backupsTab.add(new JPanel(), gbc); + gbc.fill = GridBagConstraints.NONE; + gbc.anchor = GridBagConstraints.FIRST_LINE_START; - backupsOptionsSetEnabled(enableBackupFiles.isSelected()); - return backupsTab; + exampleFilesPanel.add(backupfilesExampleLabel, gbc); + return exampleFilesPanel; } + private void backupsTabUpdatePresets() + { + IntKeyStringValueEntry entry = (IntKeyStringValueEntry) backupfilesPresetsCombo + .getSelectedItem(); + int key = entry.getKey(); + String value = entry.getValue(); - public JPanel initBackupsTabSuffixPanel() + // BACKUPFILESSCHEMECUSTOMISE (==0) reserved for "Custom" + if (key != BACKUPFILESSCHEMECUSTOMISE) + { + if (backupfilesPresetEntriesValues.containsKey(key)) + { + backupsSetOptions(backupfilesPresetEntriesValues.get(key)); + } + else + { + System.out.println("Preset '" + value + "' not implemented"); + } + } + + backupfilesCustomOptionsSetEnabled(); + updateBackupFilesExampleLabel(); + } + + protected int getComboIntStringKey(JComboBox c) + { + IntKeyStringValueEntry e = (IntKeyStringValueEntry) c.getSelectedItem(); + return e != null ? e.getKey() : 0; + } + + protected void setComboIntStringKey(JComboBox c, + int key) + { + 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); + break; + } + } + backupsTabUpdatePresets(); + } + + private JPanel initBackupsTabSuffixPanel() { suffixPanel.setBorder(new TitledBorder( - MessageManager.getString("label.suffix_format"))); + MessageManager.getString("label.backup_filename_strategy"))); suffixPanel.setLayout(new GridBagLayout()); suffixTemplateLabel - .setText(MessageManager.getString("label.suffix_template")); + .setText(MessageManager.getString("label.append_to_filename")); suffixTemplateLabel.setHorizontalAlignment(SwingConstants.LEFT); suffixTemplateLabel.setFont(LABEL_FONT); - final String tooltip = JvSwingUtils.wrapTooltip(true, MessageManager - .getString("label.suffix_template_tooltip")); + final String tooltip = JvSwingUtils.wrapTooltip(true, + MessageManager.getString("label.append_to_filename_tooltip")); suffixTemplate.setToolTipText(tooltip); suffixTemplate.addActionListener(new ActionListener() { @@ -1781,6 +1996,7 @@ public class GPreferences extends JPanel public void actionPerformed(ActionEvent e) { updateBackupFilesExampleLabel(); + backupfilesCustomOptionsSetEnabled(); } }); @@ -1790,6 +2006,7 @@ public class GPreferences extends JPanel public void keyReleased(KeyEvent e) { updateBackupFilesExampleLabel(); + backupfilesCustomOptionsSetEnabled(); } @Override @@ -1797,14 +2014,14 @@ public class GPreferences extends JPanel { } - // disable use of ':' + // disable use of ':' or '/' or '\' @Override public void keyTyped(KeyEvent e) { char c = e.getKeyChar(); - if (c == ':') + if (c == ':' || c == '/' || c == '\\') { - // don't process ':' + // don't process ':' or '/' or '\' e.consume(); } } @@ -1830,8 +2047,7 @@ public class GPreferences extends JPanel }; setIntegerSpinner(suffixDigitsSpinner, defaultmin, defaultmax, 3, c); - suffixReverse.setLabels( - MessageManager.getString("label.reverse_roll"), + suffixReverse.setLabels(MessageManager.getString("label.reverse_roll"), MessageManager.getString("label.increment_index")); suffixReverse.addActionListener(new ActionListener() { @@ -1853,15 +2069,15 @@ public class GPreferences extends JPanel sgbc.weightx = 1.0; sgbc.weighty = 0.0; sgbc.fill = GridBagConstraints.NONE; - suffixPanel.add(suffixTemplateLabel,sgbc); - + suffixPanel.add(suffixTemplateLabel, sgbc); + sgbc.gridx = 1; sgbc.fill = GridBagConstraints.HORIZONTAL; suffixPanel.add(suffixTemplate, sgbc); - + // second row (number of digits spinner) sgbc.gridy = 1; - + sgbc.gridx = 0; sgbc.fill = GridBagConstraints.NONE; suffixPanel.add(suffixDigitsLabel, sgbc); @@ -1907,7 +2123,7 @@ public class GPreferences extends JPanel public void actionPerformed(ActionEvent e) { boolean selected = backupfilesKeepAll.isSelected(); - keepRollMaxOptionsEnabled(!selected); + keepRollMaxOptionsEnabled(); updateBackupFilesExampleLabel(); } }); @@ -1927,7 +2143,7 @@ public class GPreferences extends JPanel MessageManager.getString("label.confirm_delete"), MessageManager.getString("label.auto_delete")); // update the enabled section - keepRollMaxOptionsEnabled(!backupfilesKeepAll.isSelected()); + keepRollMaxOptionsEnabled(); GridBagConstraints kgbc = new GridBagConstraints(); @@ -1972,76 +2188,42 @@ public class GPreferences extends JPanel JPanel jp = new JPanel(); jp.setLayout(new FlowLayout()); oldBackupFilesLabel - .setText(MessageManager.getString("label.old_backup_files")); + .setText(MessageManager + .getString("label.autodelete_old_backup_files")); oldBackupFilesLabel.setFont(LABEL_FONT); oldBackupFilesLabel.setHorizontalAlignment(SwingConstants.LEFT); jp.add(oldBackupFilesLabel); jp.add(backupfilesConfirmDelete.getTrueButton()); jp.add(backupfilesConfirmDelete.getFalseButton()); keepfilesPanel.add(jp, kgbc); - - return keepfilesPanel; - } - - private JPanel initBackupsTabFilenameExamplesPanel() - { - exampleFilesPanel.setBorder(new TitledBorder( - MessageManager.getString("label.example_filenames"))); - exampleFilesPanel.setLayout(new GridBagLayout()); - /* - exampleLabel.setText( - MessageManager.getString("label.suffix_example_filenames")); - exampleLabel.setFont(LABEL_FONT); - exampleLabel.setHorizontalAlignment(SwingConstants.LEFT); - */ - - backupfilesExampleLabel.setEditable(false); - backupfilesExampleLabel.setPreferredSize(new Dimension(400, 85)); - backupfilesExampleLabel.setAlignmentX(LEFT_ALIGNMENT); - backupfilesExampleLabel.setAlignmentY(TOP_ALIGNMENT); - - backupfilesExampleLabel.setFont(LABEL_FONT_ITALIC); - backupfilesExampleLabel.setBackground(exampleLabel.getBackground()); - - updateBackupFilesExampleLabel(); - - GridBagConstraints gbc = new GridBagConstraints(); - gbc.anchor = GridBagConstraints.WEST; - gbc.fill = GridBagConstraints.NONE; - - gbc.gridy = 0; - /* - exampleFilesPanel.add(exampleLabel, gbc); - gbc.gridy = 1; - */ - exampleFilesPanel.add(backupfilesExampleLabel, gbc); - return exampleFilesPanel; + return keepfilesPanel; } protected void updateBackupFilesExampleLabel() { int exampleindex = 12; - String base = MessageManager.getString("label.filename"); - if (base == null || base.length() > 0) + String base = MessageManager.getString("label.filename") + ".fa"; + if (base == null || base.length() == 0) { - base = "filename"; + base = "file_name.fa"; } - String extension = ".fa"; + boolean reverse = suffixReverse.isSelected(); + boolean keepAll = backupfilesKeepAll.isSelected(); + int rollMax = 4; String suffix = suffixTemplate.getText(); int digits = 3; - try { - suffixDigitsSpinner.commitEdit(); - digits = (Integer) suffixDigitsSpinner.getValue(); - digits = digits < 1 ? 1 : digits; - } catch (Exception e) + + backupfilesExampleLabel.setFont(LABEL_FONT_ITALIC); + if (suffix == null || suffix.length() == 0) { - System.out.println("Failed casting (Integer) suffixTemplateSpinner.getValue()"); + backupfilesExampleLabel + .setText(MessageManager.getString("label.no_backup_files")); + backupfilesExampleLabel.setFont(LABEL_FONT_BOLD); + return; } - boolean reverse = suffixReverse.isSelected(); - boolean keepAll = backupfilesKeepAll.isSelected(); - int rollMax = 4; + try { backupfilesRollMaxSpinner.commitEdit(); @@ -2053,6 +2235,22 @@ public class GPreferences extends JPanel "Failed casting (Integer) backupfilesRollMaxSpinner.getValue()"); } + 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()"); + } + int lowersurround = 2; int uppersurround = 0; StringBuilder exampleSB = new StringBuilder(); @@ -2082,8 +2280,8 @@ public class GPreferences extends JPanel { exampleSB.append("\n"); } - exampleSB.append(BackupFilenameFilter.getBackupFilename(index, - base, suffix, digits, extension)); + exampleSB.append(BackupFilenameParts.getBackupFilename(index, + base, suffix, digits)); if (min == max) { // no extra text needed @@ -2093,7 +2291,7 @@ public class GPreferences extends JPanel String newest = MessageManager.getString("label.braced_newest"); if (newest != null && newest.length() > 0) { - exampleSB.append(" "+newest); + exampleSB.append(" " + newest); } } else if (index == max) @@ -2101,7 +2299,7 @@ public class GPreferences extends JPanel String oldest = MessageManager.getString("label.braced_oldest"); if (oldest != null && oldest.length() > 0) { - exampleSB.append(" "+oldest); + exampleSB.append(" " + oldest); } } } @@ -2135,8 +2333,8 @@ public class GPreferences extends JPanel { exampleSB.append("\n"); } - exampleSB.append(BackupFilenameFilter.getBackupFilename(index, - base, suffix, digits, extension)); + exampleSB.append(BackupFilenameParts.getBackupFilename(index, + base, suffix, digits)); if (min == max) { // no extra text needed @@ -2146,7 +2344,7 @@ public class GPreferences extends JPanel String oldest = MessageManager.getString("label.braced_oldest"); if (oldest != null && oldest.length() > 0) { - exampleSB.append(" "+oldest); + exampleSB.append(" " + oldest); } } else if (index == max) @@ -2154,7 +2352,7 @@ public class GPreferences extends JPanel String newest = MessageManager.getString("label.braced_newest"); if (newest != null && newest.length() > 0) { - exampleSB.append(" "+newest); + exampleSB.append(" " + newest); } } } @@ -2199,7 +2397,7 @@ public class GPreferences extends JPanel } - public static int getSpinnerInt(JSpinner s, int def) + protected static int getSpinnerInt(JSpinner s, int def) { int i = def; try @@ -2213,33 +2411,92 @@ public class GPreferences extends JPanel return i; } - private void keepRollMaxOptionsEnabled(boolean enabled) + private void keepRollMaxOptionsEnabled() { + boolean enabled = backupfilesKeepAll.isEnabled() + && !backupfilesKeepAll.isSelected(); oldBackupFilesLabel.setEnabled(enabled); backupfilesRollMaxSpinner.setEnabled(enabled); backupfilesConfirmDelete.setEnabled(enabled); - } - protected void backupsOptionsSetEnabled(boolean enabled) + private void backupfilesKeepAllSetEnabled(boolean tryEnabled) { - suffixPanel.setEnabled(enabled); + boolean enabled = tryEnabled && enableBackupFiles.isSelected() + && getComboIntStringKey(backupfilesPresetsCombo) == 0 + && suffixTemplate.getText() + .indexOf(BackupFiles.NUM_PLACEHOLDER) > -1; keepfilesPanel.setEnabled(enabled); - exampleFilesPanel.setEnabled(enabled); + backupfilesKeepAll.setEnabled(enabled); + oldBackupFilesLabel.setEnabled(enabled); + keepRollMaxOptionsEnabled(); + } - suffixTemplate.setEnabled(enabled); - suffixTemplateLabel.setEnabled(enabled); + private void backupfilesSuffixTemplateDigitsSetEnabled() + { + boolean enabled = suffixTemplate.isEnabled() && suffixTemplate.getText() + .indexOf(BackupFiles.NUM_PLACEHOLDER) > -1; suffixDigitsLabel.setEnabled(enabled); suffixDigitsSpinner.setEnabled(enabled); suffixReverse.setEnabled(enabled); - backupfilesKeepAll.setEnabled(enabled); - backupfilesRollMaxSpinner.setEnabled(enabled); - oldBackupFilesLabel.setEnabled(enabled); - backupfilesConfirmDelete.setEnabled(enabled); - exampleLabel.setEnabled(enabled); + } + + private void backupfilesSuffixTemplateSetEnabled(boolean tryEnabled) + { + boolean enabled = tryEnabled && enableBackupFiles.isSelected() + && getComboIntStringKey(backupfilesPresetsCombo) == 0; + suffixPanel.setEnabled(enabled); + suffixTemplateLabel.setEnabled(enabled); + suffixTemplate.setEnabled(enabled); + backupfilesSuffixTemplateDigitsSetEnabled(); + } + + protected void backupfilesCustomOptionsSetEnabled() + { + int scheme = getComboIntStringKey(backupfilesPresetsCombo); + boolean enabled = scheme == 0 && enableBackupFiles.isSelected(); + + backupfilesSuffixTemplateSetEnabled(enabled); + backupfilesKeepAllSetEnabled(enabled); + } + + private void backupfilesSummarySetEnabled() + { + boolean enabled = enableBackupFiles.isSelected(); backupfilesExampleLabel.setEnabled(enabled); + exampleFilesPanel.setEnabled(enabled); + } - keepRollMaxOptionsEnabled(enabled && !backupfilesKeepAll.isSelected()); + private void backupfilesPresetsSetEnabled() + { + boolean enabled = enableBackupFiles.isSelected(); + presetsPanel.setEnabled(enabled); + backupfilesPresetsCombo.setEnabled(enabled); + } + + protected void backupsOptionsSetEnabled() + { + backupfilesPresetsSetEnabled(); + backupfilesSummarySetEnabled(); + backupfilesCustomOptionsSetEnabled(); + } + + protected void backupsSetOptions(String suffix, int digits, + boolean reverse, boolean keepAll, int rollMax, + boolean confirmDelete) + { + suffixTemplate.setText(suffix); + suffixDigitsSpinner.setValue(digits); + suffixReverse.setSelected(reverse); + backupfilesKeepAll.setSelected(keepAll); + backupfilesRollMaxSpinner.setValue(rollMax); + backupfilesConfirmDelete.setSelected(confirmDelete); + } + + protected void backupsSetOptions(BackupFilesPresetEntry p) + { + backupsSetOptions(p.suffix, p.digits, p.reverse, p.keepAll, p.rollMax, + p.confirmDelete); } protected void autoIdWidth_actionPerformed() @@ -2427,3 +2684,84 @@ public class GPreferences extends JPanel } } + +class IntKeyStringValueEntry +{ + int k; + + String v; + + public IntKeyStringValueEntry(int k, String v) + { + this.k = k; + this.v = v; + } + + @Override + public String toString() + { + return this.getValue(); + } + + public int getKey() + { + return k; + } + + public String getValue() + { + return v; + } +} + +class BackupFilesPresetEntry +{ + String suffix; + + int digits; + + boolean reverse; + + boolean keepAll; + + int rollMax; + + boolean confirmDelete; + + public BackupFilesPresetEntry(String suffix, int digits, boolean reverse, + boolean keepAll, int rollMax, boolean confirmDelete) + { + this.suffix = suffix; + this.digits = digits; + this.reverse = reverse; + this.keepAll = keepAll; + this.rollMax = rollMax; + this.confirmDelete = confirmDelete; + } +} + +class BackupFilesPresetsComboBoxRenderer extends DefaultListCellRenderer +{ + @Override + 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) + { + // "Customise" item + this.setFont(this.getFont().deriveFont(Font.BOLD)); + } + } catch (Exception e) { + return this; + } + + return this; + } +} \ No newline at end of file