package app.gpx_animator.ui; import com.jgoodies.forms.builder.FormBuilder; import com.jgoodies.forms.layout.CellConstraints; import app.gpx_animator.Preferences; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JSpinner; import javax.swing.SwingUtilities; import javax.swing.border.EmptyBorder; import java.awt.BorderLayout; import java.util.ResourceBundle; import static javax.swing.JFileChooser.DIRECTORIES_ONLY; public class PreferencesDialog extends JDialog { private static final long serialVersionUID = -8767146323054030406L; public PreferencesDialog(final JFrame owner) { super(owner, true); final ResourceBundle resourceBundle = Preferences.getResourceBundle(); setTitle(resourceBundle.getString("ui.dialog.preferences.title")); setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); final FileSelector tileCachePathSelector = new FileSelector(DIRECTORIES_ONLY) { private static final long serialVersionUID = 7372002778979993241L; @Override protected Type configure(final JFileChooser outputFileChooser) { return Type.OPEN; } }; tileCachePathSelector.setToolTipText(resourceBundle.getString("ui.dialog.preferences.cachepath.tooltip")); final JSpinner tileCacheTimeLimitSpinner = new JSpinner(); tileCacheTimeLimitSpinner.setToolTipText(resourceBundle.getString("ui.dialog.preferences.cachetimelimit.tooltip")); tileCacheTimeLimitSpinner.setModel(new DurationSpinnerModel()); tileCacheTimeLimitSpinner.setEditor(new DurationEditor(tileCacheTimeLimitSpinner)); final JPanel trackColorPanel = new JPanel(new BorderLayout()); final JCheckBox trackColorRandom = new JCheckBox(resourceBundle.getString("ui.dialog.preferences.track.color.random")); final ColorSelector trackColorSelector = new ColorSelector(); trackColorRandom.setSelected(Preferences.getTrackColorRandom()); trackColorSelector.setColor(Preferences.getTrackColorDefault()); trackColorSelector.setEnabled(!Preferences.getTrackColorRandom()); trackColorRandom.addActionListener((event) -> trackColorSelector.setEnabled(!trackColorRandom.isSelected())); trackColorPanel.add(trackColorRandom, BorderLayout.LINE_START); trackColorPanel.add(trackColorSelector, BorderLayout.CENTER); final JButton cancelButton = new JButton(resourceBundle.getString("ui.dialog.preferences.button.cancel")); cancelButton.addActionListener(e -> SwingUtilities.invokeLater(() -> { setVisible(false); dispose(); })); final JButton saveButton = new JButton(resourceBundle.getString("ui.dialog.preferences.button.save")); saveButton.addActionListener(e -> SwingUtilities.invokeLater(() -> { Preferences.setTileCacheDir(tileCachePathSelector.getFilename()); Preferences.setTileCacheTimeLimit((Long) tileCacheTimeLimitSpinner.getValue()); Preferences.setTrackColorRandom(trackColorRandom.isSelected()); Preferences.setTrackColorDefault(trackColorSelector.getColor()); setVisible(false); dispose(); })); setContentPane(FormBuilder.create() .padding(new EmptyBorder(20, 20, 20, 20)) .columns("right:p, 5dlu, fill:[200dlu, pref]") //NON-NLS .rows("p, 5dlu, p, 5dlu, p, 5dlu, p, 5dlu, p, 5dlu, p, 10dlu, p") //NON-NLS .addSeparator(resourceBundle.getString("ui.dialog.preferences.cache.separator")).xyw(1, 1, 3) .add(resourceBundle.getString("ui.dialog.preferences.cachepath.label")).xy(1, 3) .add(tileCachePathSelector).xy(3, 3) .add(resourceBundle.getString("ui.dialog.preferences.cachetimelimit.label")).xy(1, 5) .add(tileCacheTimeLimitSpinner).xy(3, 5) .addSeparator(resourceBundle.getString("ui.dialog.preferences.track")).xyw(1, 7, 3) .add(resourceBundle.getString("ui.dialog.preferences.track.color")).xy(1, 9) .add(trackColorPanel).xy(3, 9) .addSeparator("").xyw(1, 11, 3) .addBar(cancelButton, saveButton).xyw(1, 13, 3, CellConstraints.RIGHT, CellConstraints.FILL) .build()); tileCachePathSelector.setFilename(Preferences.getTileCacheDir()); tileCacheTimeLimitSpinner.setValue(Preferences.getTileCacheTimeLimit()); pack(); setLocationRelativeTo(owner); } }