source: josm/trunk/src/org/openstreetmap/josm/gui/preferences/map/BackupPreference.java@ 15049

Last change on this file since 15049 was 12634, checked in by Don-vip, 7 years ago

see #15182 - deprecate Main.worker, replace it by gui.MainApplication.worker + code refactoring to make sure only editor packages use it

  • Property svn:eol-style set to native
File size: 6.0 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.preferences.map;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.GridBagLayout;
7import java.awt.event.ActionListener;
8
9import javax.swing.BorderFactory;
10import javax.swing.Box;
11import javax.swing.JCheckBox;
12import javax.swing.JLabel;
13import javax.swing.JPanel;
14import javax.swing.JScrollPane;
15import javax.swing.JSeparator;
16
17import org.openstreetmap.josm.data.preferences.BooleanProperty;
18import org.openstreetmap.josm.gui.layer.AutosaveTask;
19import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
20import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
21import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
22import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
23import org.openstreetmap.josm.gui.util.GuiHelper;
24import org.openstreetmap.josm.gui.widgets.HtmlPanel;
25import org.openstreetmap.josm.gui.widgets.JosmTextField;
26import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
27import org.openstreetmap.josm.tools.GBC;
28
29/**
30 * Preference settings for data layer autosave.
31 */
32public class BackupPreference implements SubPreferenceSetting {
33
34 /**
35 * Factory used to create a new {@code BackupPreference}.
36 */
37 public static class Factory implements PreferenceSettingFactory {
38 @Override
39 public BackupPreference createPreferenceSetting() {
40 return new BackupPreference();
41 }
42 }
43
44 private static final BooleanProperty PROP_KEEP_BACKUP = new BooleanProperty("save.keepbackup", false);
45 private JCheckBox notification;
46 private JCheckBox keepBackup;
47 private JCheckBox autosave;
48 private final JosmTextField autosaveInterval = new JosmTextField(8);
49 private final JosmTextField backupPerLayer = new JosmTextField(8);
50
51 @Override
52 public void addGui(PreferenceTabbedPane gui) {
53 JPanel panel = new VerticallyScrollablePanel(new GridBagLayout());
54 panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
55
56 autosave = new JCheckBox(tr("Auto save enabled"));
57 autosave.setSelected(AutosaveTask.PROP_AUTOSAVE_ENABLED.get());
58 panel.add(autosave, GBC.eol());
59
60 final JLabel autosaveIntervalLabel = new JLabel(tr("Auto save interval (seconds)"));
61 autosaveIntervalLabel.setLabelFor(autosaveInterval);
62 panel.add(autosaveIntervalLabel, GBC.std().insets(60, 0, 0, 0));
63 autosaveInterval.setText(Integer.toString(AutosaveTask.PROP_INTERVAL.get()));
64 autosaveInterval.setToolTipText(tr("Default value: {0}", AutosaveTask.PROP_INTERVAL.getDefaultValue()));
65 autosaveInterval.setMinimumSize(autosaveInterval.getPreferredSize());
66 panel.add(autosaveInterval, GBC.eol().insets(5, 0, 0, 5));
67
68 final JLabel backupPerLayerLabel = new JLabel(tr("Auto saved files per layer"));
69 backupPerLayerLabel.setLabelFor(backupPerLayer);
70 panel.add(backupPerLayerLabel, GBC.std().insets(60, 0, 0, 0));
71 backupPerLayer.setText(Integer.toString(AutosaveTask.PROP_FILES_PER_LAYER.get()));
72 backupPerLayer.setToolTipText(tr("Default value: {0}", AutosaveTask.PROP_FILES_PER_LAYER.getDefaultValue()));
73 backupPerLayer.setMinimumSize(backupPerLayer.getPreferredSize());
74 panel.add(backupPerLayer, GBC.eol().insets(5, 0, 0, 10));
75
76 panel.add(new HtmlPanel(
77 tr("<i>(Autosave stores the changed data layers in periodic intervals. " +
78 "The backups are saved in JOSM''s preference folder. " +
79 "In case of a crash, JOSM tries to recover the unsaved changes " +
80 "on next start.)</i>")),
81 GBC.eop().fill(GBC.HORIZONTAL).insets(5, 0, 0, 10));
82
83 panel.add(new JSeparator(), GBC.eop().fill(GBC.HORIZONTAL));
84
85 keepBackup = new JCheckBox(tr("Keep backup files when saving data layers"));
86 keepBackup.setSelected(PROP_KEEP_BACKUP.get());
87 keepBackup.setToolTipText(tr("When saving, keep backup files ending with a ~"));
88 panel.add(keepBackup, GBC.eop());
89
90 panel.add(new HtmlPanel(
91 tr("<i>(JOSM can keep a backup file when saving data layers. "+
92 "It appends ''~'' to the file name and saves it in the same folder.)</i>")),
93 GBC.eop().fill(GBC.HORIZONTAL).insets(5, 0, 0, 0));
94
95 panel.add(new JSeparator(), GBC.eop().fill(GBC.HORIZONTAL));
96
97 notification = new JCheckBox(tr("Notification at each save"));
98 notification.setSelected(AutosaveTask.PROP_NOTIFICATION.get());
99 notification.setToolTipText(tr("When saving, display a small notification"));
100 panel.add(notification, GBC.eop());
101
102 ActionListener autosaveEnabled = e -> {
103 boolean enabled = autosave.isSelected();
104 autosaveIntervalLabel.setEnabled(enabled);
105 autosaveInterval.setEnabled(enabled);
106 backupPerLayerLabel.setEnabled(enabled);
107 backupPerLayer.setEnabled(enabled);
108 };
109 autosave.addActionListener(autosaveEnabled);
110 autosaveEnabled.actionPerformed(null);
111
112 panel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH));
113 JScrollPane sp = GuiHelper.embedInVerticalScrollPane(panel);
114
115 gui.getMapPreference().addSubTab(this, tr("File backup"), sp, tr("Configure whether to create backup files"));
116 }
117
118 @Override
119 public boolean ok() {
120 boolean restartRequired = false;
121 PROP_KEEP_BACKUP.put(keepBackup.isSelected());
122
123 restartRequired |= AutosaveTask.PROP_AUTOSAVE_ENABLED.put(autosave.isSelected());
124 restartRequired |= AutosaveTask.PROP_INTERVAL.parseAndPut(autosaveInterval.getText());
125 AutosaveTask.PROP_FILES_PER_LAYER.parseAndPut(backupPerLayer.getText());
126 AutosaveTask.PROP_NOTIFICATION.put(notification.isSelected());
127 return restartRequired;
128 }
129
130 @Override
131 public boolean isExpert() {
132 return false;
133 }
134
135 @Override
136 public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
137 return gui.getMapPreference();
138 }
139}
Note: See TracBrowser for help on using the repository browser.