Ticket #19197: 19197.2.patch
| File 19197.2.patch, 6.0 KB (added by , 6 years ago) |
|---|
-
src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java
20 20 import org.openstreetmap.josm.data.osm.visitor.paint.PaintColors; 21 21 import org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon; 22 22 import org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache; 23 import org.openstreetmap.josm.data.preferences.NamedColorProperty; 23 24 import org.openstreetmap.josm.gui.MainApplication; 24 25 import org.openstreetmap.josm.gui.NavigatableComponent; 25 26 import org.openstreetmap.josm.gui.layer.OsmDataLayer; … … 39 40 import org.openstreetmap.josm.spi.preferences.Config; 40 41 import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent; 41 42 import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener; 43 import org.openstreetmap.josm.tools.ColorHelper; 42 44 import org.openstreetmap.josm.tools.Pair; 43 45 44 46 /** … … 603 605 * as frequent preference lookup (using <code>Config.getPref().get()</code>) for 604 606 * each primitive can be slow during rendering. 605 607 * 608 * @param source style source 606 609 * @param key preference key 607 610 * @param def default value 608 611 * @return the corresponding preference value 609 612 * @see org.openstreetmap.josm.data.Preferences#get(String, String) 610 613 */ 611 public String getPreferenceCached(St ring key, String def) {614 public String getPreferenceCached(StyleSource source, String key, String def) { 612 615 String res; 613 616 if (preferenceCache.containsKey(key)) { 614 617 res = preferenceCache.get(key); 615 618 } else { 616 res = Config.getPref().get(key, null); 619 Object realDef = Cascade.convertTo(def, Color.class); 620 if (realDef instanceof Color) { 621 String prefName = source != null ? source.getFileNamePart() : "unknown"; 622 res = ColorHelper.color2html(new NamedColorProperty(NamedColorProperty.COLOR_CATEGORY_MAPPAINT, prefName, key, (Color) realDef).get()); 623 } else { 624 res = Config.getPref().get(key, null); 625 } 617 626 preferenceCache.put(key, res); 618 627 } 619 628 return res != null ? res : def; -
src/org/openstreetmap/josm/gui/mappaint/mapcss/Functions.java
773 773 * @return value for key, or default value if not found 774 774 */ 775 775 public static String JOSM_pref(Environment env, String key, String def) { // NO_UCD (unused code) 776 return MapPaintStyles.getStyles().getPreferenceCached( key, def);776 return MapPaintStyles.getStyles().getPreferenceCached(env != null ? env.source : null, key, def); 777 777 } 778 778 779 779 /** -
test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/FunctionsTest.java
5 5 import static org.junit.Assert.assertTrue; 6 6 import static org.openstreetmap.josm.data.osm.OsmPrimitiveType.NODE; 7 7 8 import java.util.Collections; 9 import java.util.function.BiConsumer; 10 8 11 import org.junit.Rule; 9 12 import org.junit.Test; 10 13 import org.openstreetmap.josm.TestUtils; … … 11 14 import org.openstreetmap.josm.data.osm.OsmPrimitive; 12 15 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 13 16 import org.openstreetmap.josm.data.osm.User; 17 import org.openstreetmap.josm.data.preferences.NamedColorProperty; 14 18 import org.openstreetmap.josm.gui.mappaint.Environment; 15 19 import org.openstreetmap.josm.gui.util.GuiHelper; 16 20 import org.openstreetmap.josm.spi.preferences.Config; … … 111 115 */ 112 116 @Test 113 117 public void testPref() { 118 testPrefKey("", "foobar", "baz", (key, def) -> Config.getPref().put(key, def)); 119 testPrefKey(NamedColorProperty.NAMED_COLOR_PREFIX + NamedColorProperty.COLOR_CATEGORY_MAPPAINT + ".unknown.", "#000000", "#00FF00", 120 (key, def) -> { 121 if (def != null) { 122 Config.getPref().putList(key, Collections.singletonList(def)); 123 } else { 124 Config.getPref().put(key, def); 125 } 126 }); 127 } 128 129 /** 130 * Test a preference key 131 * @param prefix A prefix, if necessary. Some objects (color specifically) will add a prefix. 132 * @param def The default value 133 * @param toSet The value to set and test against 134 * @param setPref A biconsumer to set the key and pref values 135 */ 136 private void testPrefKey(String prefix, String def, String toSet, BiConsumer<String, String> setPref) { 114 137 String key = "Functions.JOSM_pref"; 115 assertEquals("foobar", Functions.JOSM_pref(null, key, "foobar")); 116 Config.getPref().put(key, "baz"); 138 setPref.accept(prefix + key, null); 139 assertEquals(def, Functions.JOSM_pref(null, key, def)); 140 setPref.accept(prefix + key, toSet); 117 141 GuiHelper.runInEDTAndWait(() -> { 118 142 // await org.openstreetmap.josm.gui.mappaint.ElemStyles.clearCached 119 143 }); 120 assertEquals( "baz", Functions.JOSM_pref(null, key, "foobar"));121 Config.getPref().put(key, null);144 assertEquals(toSet, Functions.JOSM_pref(null, key, def)); 145 setPref.accept(prefix + key, null); 122 146 GuiHelper.runInEDTAndWait(() -> { 123 147 // await org.openstreetmap.josm.gui.mappaint.ElemStyles.clearCached 124 148 }); 125 assertEquals("foobar", Functions.JOSM_pref(null, key, "foobar")); 149 assertEquals(def, Functions.JOSM_pref(null, key, def)); 150 setPref.accept(prefix + key, null); 126 151 } 127 152 }
