source: josm/trunk/src/org/openstreetmap/josm/data/preferences/CachedProperty.java @ 5241

Revision 4932, 1.7 KB checked in by stoecker, 3 months ago (diff)

fix 6833 - use WindowGeometry for toggle dialogs and mainwindow replacing old custom methods, improve dual screen handling

Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data.preferences;
3
4import org.openstreetmap.josm.Main;
5import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
6import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
7
8public abstract class CachedProperty<T> extends AbstractProperty<T> implements PreferenceChangedListener {
9
10    protected final String defaultValue;
11    private T value;
12    private int updateCount;
13
14    protected CachedProperty(String key, String defaultValue) {
15        super(key);
16        Main.pref.addPreferenceChangeListener(this);
17        this.defaultValue = defaultValue;
18        updateValue();
19    }
20
21    protected void updateValue() {
22        if (!Main.pref.get(key).isEmpty()) {
23            this.value = fromString(Main.pref.get(key));
24        } else {
25            this.value = getDefaultValue();
26        }
27        updateCount++;
28    }
29
30    protected abstract T fromString(String s);
31
32    public T get() {
33        return value;
34    }
35
36    public void put(String value) {
37        Main.pref.put(key, value);
38        this.value = fromString(value);
39        updateCount++;
40    }
41
42    public int getUpdateCount() {
43        return updateCount;
44    }
45
46    @Override
47    public T getDefaultValue() {
48        return fromString(getDefaultValueAsString());
49    }
50
51    public String getDefaultValueAsString() {
52        return defaultValue;
53    }
54
55    public String getAsString() {
56        return Main.pref.get(getKey(), getDefaultValueAsString());
57    }
58
59    @Override
60    public void preferenceChanged(PreferenceChangeEvent e) {
61        if (e.getKey().equals(key)) {
62            updateValue();
63        }
64    }
65
66}
Note: See TracBrowser for help on using the repository browser.