Changeset 15289 in josm for trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
- Timestamp:
- 2019-08-07T21:50:20+02:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
r14801 r15289 49 49 import org.openstreetmap.josm.gui.mappaint.StyleSetting; 50 50 import org.openstreetmap.josm.gui.mappaint.StyleSetting.BooleanStyleSetting; 51 import org.openstreetmap.josm.gui.mappaint.StyleSetting.StyleSettingGroup; 51 52 import org.openstreetmap.josm.gui.mappaint.StyleSource; 52 53 import org.openstreetmap.josm.gui.mappaint.mapcss.ConditionFactory.KeyCondition; … … 502 503 case Selector.BASE_META: 503 504 case Selector.BASE_SETTING: 505 case Selector.BASE_SETTINGS: 504 506 break; 505 507 default: … … 576 578 } 577 579 580 private static void loadSettings(MapCSSRule r, GeneralSelector gs, Environment env) { 581 if (gs.matchesConditions(env)) { 582 env.layer = null; 583 env.layer = gs.getSubpart().getId(env); 584 r.execute(env); 585 } 586 } 587 578 588 private void loadSettings() { 579 589 settings.clear(); 580 590 settingValues.clear(); 591 settingGroups.clear(); 581 592 MultiCascade mc = new MultiCascade(); 593 MultiCascade mcGroups = new MultiCascade(); 582 594 Node n = new Node(); 583 String code = LanguageInfo.getJOSMLocaleCode(); 584 n.put("lang", code); 595 n.put("lang", LanguageInfo.getJOSMLocaleCode()); 585 596 // create a fake environment to read the meta data block 586 597 Environment env = new Environment(n, mc, "default", this); 587 598 Environment envGroups = new Environment(n, mcGroups, "default", this); 599 600 // Parse rules 588 601 for (MapCSSRule r : rules) { 589 602 if (r.selector instanceof GeneralSelector) { 590 603 GeneralSelector gs = (GeneralSelector) r.selector; 591 604 if (Selector.BASE_SETTING.equals(gs.getBase())) { 592 if (!gs.matchesConditions(env)) { 593 continue; 594 } 595 env.layer = null; 596 env.layer = gs.getSubpart().getId(env); 597 r.execute(env); 598 } 599 } 600 } 605 loadSettings(r, gs, env); 606 } else if (Selector.BASE_SETTINGS.equals(gs.getBase())) { 607 loadSettings(r, gs, envGroups); 608 } 609 } 610 } 611 // Load groups 612 for (Entry<String, Cascade> e : mcGroups.getLayers()) { 613 if ("default".equals(e.getKey())) { 614 Logging.warn("settings requires layer identifier e.g. 'settings::settings_group {...}'"); 615 continue; 616 } 617 settingGroups.put(StyleSettingGroup.create(e.getValue(), this, e.getKey()), new ArrayList<>()); 618 } 619 // Load settings 601 620 for (Entry<String, Cascade> e : mc.getLayers()) { 602 621 if ("default".equals(e.getKey())) { … … 610 629 set = BooleanStyleSetting.create(c, this, e.getKey()); 611 630 } else { 612 Logging.warn("Unknown setting type: "+type);631 Logging.warn("Unknown setting type: {0}", type); 613 632 } 614 633 if (set != null) { 615 634 settings.add(set); 616 635 settingValues.put(e.getKey(), set.getValue()); 636 String groupId = c.get("group", null, String.class); 637 if (groupId != null) { 638 settingGroups.get(settingGroups.keySet().stream().filter(g -> g.key.equals(groupId)).findAny() 639 .orElseThrow(() -> new IllegalArgumentException("Unknown settings group: " + groupId))).add(set); 640 } 617 641 } 618 642 }
Note:
See TracChangeset
for help on using the changeset viewer.