+ /**
+ * Initialises the Backups tabbed panel.
+ *
+ * @return
+ */
+ private JPanel initBackupsTab()
+ {
+ JPanel backupsTab = new JPanel();
+ backupsTab.setBorder(new TitledBorder(MessageManager
+ .getString("label.backup_files")));
+ backupsTab.setLayout(new GridBagLayout());
+
+ enableBackupFiles.setFont(LABEL_FONT);
+ enableBackupFiles.setText(
+ MessageManager.getString("label.enable_backupfiles"));
+ enableBackupFiles
+ .setSelected(Cache.getDefault(BackupFiles.ENABLED, true));
+ enableBackupFiles.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ boolean selected = enableBackupFiles.isSelected();
+ // enable other options only when the first is checked
+ backupsOptionsSetEnabled(selected);
+ }
+ });
+
+ GridBagConstraints gbc = new GridBagConstraints();
+ gbc.weightx = 1.0;
+ gbc.weighty = 0.0;
+ gbc.anchor = GridBagConstraints.NORTHWEST;
+
+ // enable checkbox 1 row
+ gbc.gridwidth = 1;
+ gbc.gridy = 0;
+ backupsTab.add(enableBackupFiles, gbc);
+
+ // whole suffix panel next row
+ initBackupsTabSuffixPanel();
+ gbc.gridy = 1;
+ backupsTab.add(suffixPanel, gbc);
+
+ // keep files panel
+ initBackupsTabKeepFilesPanel();
+ gbc.gridy = 2;
+ backupsTab.add(keepfilesPanel, gbc);
+
+ // whole examples panel next row
+ initBackupsTabFilenameExamplesPanel();
+ gbc.gridy = 3;
+ backupsTab.add(exampleFilesPanel, gbc);
+
+ return backupsTab;
+ }
+
+
+ public JPanel initBackupsTabSuffixPanel()
+ {
+ suffixPanel.setBorder(new TitledBorder(
+ MessageManager.getString("label.suffix_format")));
+ suffixPanel.setLayout(new GridBagLayout());
+
+ suffixTemplateLabel
+ .setText(MessageManager.getString("label.suffix_template"));
+ suffixTemplateLabel.setHorizontalAlignment(SwingConstants.LEFT);
+ suffixTemplateLabel.setFont(LABEL_FONT);
+
+ String suffix = Cache.getDefault(BackupFiles.SUFFIX, BackupFiles.getNumPlaceHolder());
+ suffixTemplate.setText(suffix);
+ final String tooltip = JvSwingUtils.wrapTooltip(true, MessageManager
+ .getString("label.suffix_template_tooltip"));
+ suffixTemplate.setToolTipText(tooltip);
+ suffixTemplate.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ updateBackupFilesExampleLabel();
+ }
+
+ });
+ KeyListener kl = new KeyListener()
+ {
+ @Override
+ public void keyReleased(KeyEvent e)
+ {
+ updateBackupFilesExampleLabel();
+ }
+
+ @Override
+ public void keyPressed(KeyEvent e)
+ {
+ }
+
+ // disable use of ':'
+ @Override
+ public void keyTyped(KeyEvent e)
+ {
+ char c = e.getKeyChar();
+ if (c == ':')
+ {
+ // don't process ':'
+ e.consume();
+ }
+ }
+
+ };
+ suffixTemplate.addKeyListener(kl);
+
+ // digits spinner
+ suffixDigitsLabel
+ .setText(MessageManager.getString("label.index_digits"));
+ suffixDigitsLabel.setHorizontalAlignment(SwingConstants.LEFT);
+ suffixDigitsLabel.setFont(LABEL_FONT);
+ int defaultmin = 1;
+ try
+ {
+ defaultmin = Integer.parseInt(
+ MessageManager.getString("default.suffix_index_digits_min"));
+ } catch (Exception e)
+ {
+ defaultmin = 1;
+ System.out.println(
+ "Exception setting suffix digits min from default.suffix_index_digits_min label, setting to "
+ + defaultmin);
+ }
+ int defaultmax = 6;
+ try {
+ defaultmax = Integer.parseInt(
+ MessageManager.getString("default.suffix_index_digits_max"));
+ } catch (Exception e) {
+ defaultmax = 6;
+ System.out.println(
+ "Exception setting suffix digits max from default.suffix_index_digits_max label, setting to "
+ + defaultmax);
+ }
+ setIntegerSpinner(suffixDigitsSpinner, defaultmin, defaultmax,
+ Cache.getDefault(BackupFiles.SUFFIX_DIGITS, 3));
+
+ suffixReverse.setSelected(
+ Cache.getDefault(BackupFiles.REVERSE_ORDER, false));
+ suffixReverse.setLabels(
+ MessageManager.getString("label.reverse_roll"),
+ MessageManager.getString("label.increment_index"));
+ suffixReverse.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ updateBackupFilesExampleLabel();
+ }
+ });
+
+ GridBagConstraints sgbc = new GridBagConstraints();
+
+ // first row (template text box)
+ sgbc.anchor = GridBagConstraints.WEST;
+ sgbc.gridx = 0;
+ sgbc.gridy = 0;
+ sgbc.gridwidth = 1;
+ sgbc.gridheight = 1;
+ sgbc.weightx = 1.0;
+ sgbc.weighty = 0.0;
+ sgbc.fill = GridBagConstraints.NONE;
+ 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);
+
+ sgbc.gridx = 1;
+ sgbc.fill = GridBagConstraints.HORIZONTAL;
+ suffixPanel.add(suffixDigitsSpinner, sgbc);
+
+ // third row (forward order radio selection)
+ sgbc.gridx = 0;
+ sgbc.gridy = 2;
+ sgbc.gridwidth = GridBagConstraints.REMAINDER;
+ sgbc.fill = GridBagConstraints.HORIZONTAL;
+ suffixPanel.add(suffixReverse.getFalseButton(), sgbc);
+
+ // fourth row (reverse order radio selection)
+ sgbc.gridy = 3;
+ suffixPanel.add(suffixReverse.getTrueButton(), sgbc);
+ return suffixPanel;
+ }
+
+ private JPanel initBackupsTabKeepFilesPanel()
+ {
+ keepfilesPanel.setBorder(
+ new TitledBorder(MessageManager.getString("label.keep_files")));
+ keepfilesPanel.setLayout(new GridBagLayout());
+
+ backupfilesKeepAll
+ .setSelected(Cache.getDefault(BackupFiles.NO_MAX, true));
+ backupfilesKeepAll.setLabels(
+ MessageManager.getString("label.keep_all_backup_files"),
+ MessageManager.getString(
+ "label.keep_only_this_number_of_backup_files"));
+ backupfilesKeepAll.addTrueActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ updateBackupFilesExampleLabel();
+ }
+ });
+ backupfilesKeepAll.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ boolean selected = backupfilesKeepAll.isSelected();
+ keepRollMaxOptionsEnabled(!selected);
+ updateBackupFilesExampleLabel();
+ }
+ });
+
+ setIntegerSpinner(backupfilesRollMaxSpinner, 1, 999,
+ Cache.getDefault(BackupFiles.ROLL_MAX, 3));
+
+ backupfilesConfirmDelete.setSelected(
+ Cache.getDefault(BackupFiles.CONFIRM_DELETE_OLD, true));
+ backupfilesConfirmDelete.setLabels(
+ MessageManager.getString("label.confirm_delete"),
+ MessageManager.getString("label.auto_delete"));
+ // update the enabled section
+ keepRollMaxOptionsEnabled(!backupfilesKeepAll.isSelected());
+
+ GridBagConstraints kgbc = new GridBagConstraints();
+
+ // first row (template text box)
+ kgbc.anchor = GridBagConstraints.WEST;
+ kgbc.gridx = 0;
+ kgbc.gridy = 0;
+ kgbc.gridwidth = GridBagConstraints.REMAINDER;
+ kgbc.gridheight = 1;
+ kgbc.weightx = 1.0;
+ kgbc.weighty = 0.0;
+ kgbc.fill = GridBagConstraints.HORIZONTAL;
+ keepfilesPanel.add(backupfilesKeepAll.getTrueButton(), kgbc);
+
+ // second row
+ kgbc.gridy = 1;
+
+ kgbc.gridx = 0;
+ kgbc.gridwidth = GridBagConstraints.RELATIVE;
+ keepfilesPanel.add(backupfilesKeepAll.getFalseButton(), kgbc);
+
+ kgbc.gridx = 1;
+ // kgbc.fill = GridBagConstraints.HORIZONTAL;
+ keepfilesPanel.add(backupfilesRollMaxSpinner, kgbc);
+
+ // third row (indented)
+ kgbc.gridy = 2;
+ kgbc.insets = new Insets(0, 20, 0, 0);
+
+ kgbc.gridx = 0;
+ kgbc.gridwidth = GridBagConstraints.REMAINDER;
+ kgbc.fill = GridBagConstraints.HORIZONTAL;
+ kgbc.weightx = 1.0;
+ keepfilesPanel.add(backupfilesConfirmDelete.getTrueButton(), kgbc);
+
+ // fourth row (indented)
+ kgbc.gridy = 3;
+ keepfilesPanel.add(backupfilesConfirmDelete.getFalseButton(), kgbc);
+ return keepfilesPanel;
+ }
+
+ private JPanel initBackupsTabFilenameExamplesPanel()
+ {
+ exampleFilesPanel.setBorder(new TitledBorder(
+ MessageManager.getString("label.examples")));
+ 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(300, 100));
+ backupfilesExampleLabel.setAlignmentX(LEFT_ALIGNMENT);
+ backupfilesExampleLabel.setAlignmentY(TOP_ALIGNMENT);
+
+ backupfilesExampleLabel.setFont(LABEL_FONT_ITALIC);
+ backupfilesExampleLabel.setBackground(exampleLabel.getBackground());
+
+ /*
+ exampleScrollPane.setBounds(0, 0, 200, 100);
+ exampleScrollPane.setPreferredSize(new Dimension(800, 800));
+ exampleScrollPane.add(backupfilesExampleLabel);
+ */
+ updateBackupFilesExampleLabel();
+
+ GridBagConstraints gbc = new GridBagConstraints();
+ gbc.anchor = GridBagConstraints.WEST;
+
+ gbc.gridy = 0;
+ exampleFilesPanel.add(exampleLabel, gbc);
+ gbc.gridy = 1;
+ exampleFilesPanel.add(backupfilesExampleLabel, gbc);
+ // exampleFilesPanel.add(exampleScrollPane, gbc);
+ return exampleFilesPanel;
+ }
+
+ private void updateBackupFilesExampleLabel()
+ {
+ int exampleindex = 12;
+ String base = "filename";
+ String extension = ".fa";
+
+ String suffix = suffixTemplate.getText();
+ int digits = 3;
+ try {
+ suffixDigitsSpinner.commitEdit();
+ digits = (Integer) suffixDigitsSpinner.getValue();
+ digits = digits < 1 ? 1 : digits;
+ } catch (Exception e)
+ {
+ System.out.println("Failed casting (Integer) suffixTemplateSpinner.getValue()");
+ }
+ boolean reverse = suffixReverse.isSelected();
+ boolean keepAll = backupfilesKeepAll.isSelected();
+ int rollMax = 4;
+ try
+ {
+ backupfilesRollMaxSpinner.commitEdit();
+ rollMax = (Integer) backupfilesRollMaxSpinner.getValue();
+ rollMax = rollMax < 1 ? 1 : rollMax;
+ } catch (Exception e)
+ {
+ System.out.println(
+ "Failed casting (Integer) backupfilesRollMaxSpinner.getValue()");
+ }
+
+ int surround = 3;
+ StringBuilder exampleSB = new StringBuilder();
+ boolean firstLine = true;
+ if (reverse)
+ {
+
+ int min = 1;
+ int max = keepAll ? exampleindex : rollMax;
+ for (int index = min; index <= max; index++)
+ {
+ if (index == min + surround && index <= max - surround)
+ {
+ exampleSB.append("\n...");
+ }
+ else if (index > min + surround && index <= max - surround)
+ {
+ // nothing
+ }
+ else
+ {
+ if (firstLine)
+ {
+ firstLine = false;
+ }
+ else
+ {
+ exampleSB.append("\n");
+ }
+ exampleSB.append(BackupFilenameFilter.getBackupFilename(index,
+ base, suffix, digits, extension));
+ if (min == max)
+ {
+ // no extra text needed
+ }
+ else if (index == min)
+ {
+ exampleSB.append(" (most recent)");
+ }
+ else if (index == max)
+ {
+ exampleSB.append(" (oldest)");
+ }
+ }
+ }
+ }
+ else
+ {
+
+ int min = (keepAll || exampleindex - rollMax < 0) ? 1
+ : exampleindex - rollMax + 1;
+ int max = exampleindex;
+
+ for (int index = min; index <= max; index++)
+ {
+
+ if (index == min + surround && index <= max - surround)
+ {
+ exampleSB.append("\n...");
+ }
+ else if (index > min + surround && index <= max - surround)
+ {
+ // nothing
+ }
+ else
+ {
+ if (firstLine)
+ {
+ firstLine = false;
+ }
+ else
+ {
+ exampleSB.append("\n");
+ }
+ exampleSB.append(BackupFilenameFilter.getBackupFilename(index,
+ base, suffix, digits, extension));
+ if (min == max)
+ {
+ // no extra text needed
+ }
+ else if (index == min)
+ {
+ exampleSB.append(" (oldest)");
+ }
+ else if (index == max)
+ {
+ exampleSB.append(" (most recent)");
+ }
+ }
+ }
+
+ }
+
+ backupfilesExampleLabel.setText(exampleSB.toString());
+ }
+
+ protected void setIntegerSpinner(JSpinner s, int min,
+ int max, int def)
+ {
+ // integer spinner for number of digits
+ if (def > max)
+ {
+ max = def;
+ }
+ SpinnerModel sModel = new SpinnerNumberModel(def, min, max, 1);
+ s.setModel(sModel);
+
+ s.addChangeListener(new ChangeListener()
+ {
+ @Override
+ public void stateChanged(ChangeEvent e)
+ {
+ updateBackupFilesExampleLabel();
+ }
+
+ });
+
+ }
+
+ public static int getSpinnerInt(JSpinner s, int def)
+ {
+ int i = def;
+ try
+ {
+ s.commitEdit();
+ i = (Integer) s.getValue();
+ } catch (Exception e)
+ {
+ System.out.println("Failed casting (Integer) JSpinner s.getValue()");
+ }
+ return i;
+ }
+
+ private void keepRollMaxOptionsEnabled(boolean enabled)
+ {
+ backupfilesRollMaxSpinner.setEnabled(enabled);
+ backupfilesConfirmDelete.setEnabled(enabled);
+
+ }
+ private void backupsOptionsSetEnabled(boolean enabled)
+ {
+ suffixPanel.setEnabled(enabled);
+ keepfilesPanel.setEnabled(enabled);
+ exampleFilesPanel.setEnabled(enabled);
+
+ suffixTemplate.setEnabled(enabled);
+ suffixTemplateLabel.setEnabled(enabled);
+ suffixDigitsLabel.setEnabled(enabled);
+ suffixDigitsSpinner.setEnabled(enabled);
+ suffixReverse.setEnabled(enabled);
+ backupfilesKeepAll.setEnabled(enabled);
+ backupfilesRollMaxSpinner.setEnabled(enabled);
+ backupfilesConfirmDelete.setEnabled(enabled);
+ exampleLabel.setEnabled(enabled);
+ exampleScrollPane.setEnabled(enabled);
+ backupfilesExampleLabel.setEnabled(enabled);
+
+ keepRollMaxOptionsEnabled(enabled && !backupfilesKeepAll.isSelected());
+ }
+