Ticket #17021: base_constants.patch
| File base_constants.patch, 8.0 KB (added by , 7 years ago) |
|---|
-
src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
471 471 MapCSSRule optRule = new MapCSSRule(r.selector.optimizedBaseCheck(), r.declaration); 472 472 final String base = ((GeneralSelector) selRightmost).getBase(); 473 473 switch (base) { 474 case "node":474 case Selector.BASE_NODE: 475 475 nodeRules.add(optRule); 476 476 break; 477 case "way":477 case Selector.BASE_WAY: 478 478 wayNoAreaRules.add(optRule); 479 479 wayRules.add(optRule); 480 480 break; 481 case "area":481 case Selector.BASE_AREA: 482 482 wayRules.add(optRule); 483 483 multipolygonRules.add(optRule); 484 484 break; 485 case "relation":485 case Selector.BASE_RELATION: 486 486 relationRules.add(optRule); 487 487 multipolygonRules.add(optRule); 488 488 break; 489 case "*":489 case Selector.BASE_ANY: 490 490 nodeRules.add(optRule); 491 491 wayRules.add(optRule); 492 492 wayNoAreaRules.add(optRule); … … 493 493 relationRules.add(optRule); 494 494 multipolygonRules.add(optRule); 495 495 break; 496 case "canvas":496 case Selector.BASE_CANVAS: 497 497 canvasRules.add(r); 498 498 break; 499 case "meta":500 case "setting":499 case Selector.BASE_META: 500 case Selector.BASE_SETTING: 501 501 break; 502 502 default: 503 503 final RuntimeException e = new JosmRuntimeException(MessageFormat.format("Unknown MapCSS base selector {0}", base)); … … 556 556 * load meta info from a selector "meta" 557 557 */ 558 558 private void loadMeta() { 559 Cascade c = constructSpecial( "meta");559 Cascade c = constructSpecial(Selector.BASE_META); 560 560 String pTitle = c.get("title", null, String.class); 561 561 if (title == null) { 562 562 title = pTitle; … … 568 568 } 569 569 570 570 private void loadCanvas() { 571 Cascade c = constructSpecial( "canvas");571 Cascade c = constructSpecial(Selector.BASE_CANVAS); 572 572 backgroundColorOverride = c.get("fill-color", null, Color.class); 573 573 } 574 574 … … 585 585 for (MapCSSRule r : rules) { 586 586 if (r.selector instanceof GeneralSelector) { 587 587 GeneralSelector gs = (GeneralSelector) r.selector; 588 if ( "setting".equals(gs.getBase())) {588 if (Selector.BASE_SETTING.equals(gs.getBase())) { 589 589 if (!gs.matchesConditions(env)) { 590 590 continue; 591 591 } … … 737 737 MapCSSRule x = it.next(); 738 738 if (x.selector instanceof GeneralSelector) { 739 739 GeneralSelector gs = (GeneralSelector) x.selector; 740 if ( "meta".equals(gs.base)) {740 if (Selector.BASE_META.equals(gs.base)) { 741 741 it.remove(); 742 742 } 743 743 } -
src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
50 50 */ 51 51 public interface Selector { 52 52 53 /** selector base that matches anything. */ 54 public static final String BASE_ANY = "*"; 55 /** selector base that matches on OSM object node. */ 56 public static final String BASE_NODE = "node"; 57 /** selector base that matches on OSM object way. */ 58 public static final String BASE_WAY = "way"; 59 /** selector base that matches on OSM object relation. */ 60 public static final String BASE_RELATION = "relation"; 61 62 /** selector base that matches with any area regardless of whether the area border is only modelled with a single way or with a set of ways glued together with a relation.*/ 63 public static final String BASE_AREA = "area"; 64 65 /** selector base for special rules containing meta information. */ 66 public static final String BASE_META = "meta"; 67 68 /** selector base for style information not specific to nodes, ways or relations. */ 69 public static final String BASE_CANVAS = "canvas"; 70 71 /** selector base for artificial bases created to use preferences. */ 72 public static final String BASE_SETTING = "setting"; 73 53 74 /** 54 75 * Apply the selector to the primitive and check if it matches. 55 76 * … … 575 596 576 597 public OptimizedGeneralSelector(String base, Pair<Integer, Integer> zoom, List<Condition> conds, Subpart subpart) { 577 598 super(conds); 578 this.base = base;599 this.base = checkBase(base); 579 600 if (zoom != null) { 580 601 int a = zoom.a == null ? 0 : zoom.a; 581 602 int b = zoom.b == null ? Integer.MAX_VALUE : zoom.b; … … 592 613 593 614 public OptimizedGeneralSelector(String base, Range range, List<Condition> conds, Subpart subpart) { 594 615 super(conds); 595 this.base = base;616 this.base = checkBase(base); 596 617 this.range = range; 597 618 this.subpart = subpart != null ? subpart : Subpart.DEFAULT_SUBPART; 598 619 } … … 611 632 return range; 612 633 } 613 634 635 /** 636 * Check if this is a known base and return the corresponding string constant. 637 * @param base 638 * @return the matching String constant 639 */ 640 private static String checkBase(String base) { 641 switch(base) { 642 case "*": return BASE_ANY; 643 case "node": return BASE_NODE; 644 case "way": return BASE_WAY; 645 case "relation": return BASE_RELATION; 646 case "area": return BASE_AREA; 647 case "meta": return BASE_META; 648 case "canvas": return BASE_CANVAS; 649 case "setting": return BASE_SETTING; 650 default: 651 throw new IllegalArgumentException("unknown selector " + base); 652 } 653 } 654 614 655 public String getBase() { 615 656 return base; 616 657 } 617 658 618 659 public boolean matchesBase(OsmPrimitiveType type) { 619 if ( "*".equals(base)) {660 if (BASE_ANY.equals(base)) { 620 661 return true; 621 662 } else if (OsmPrimitiveType.NODE == type) { 622 return "node".equals(base);663 return BASE_NODE.equals(base); 623 664 } else if (OsmPrimitiveType.WAY == type) { 624 return "way".equals(base) || "area".equals(base);665 return BASE_WAY.equals(base) || BASE_AREA.equals(base); 625 666 } else if (OsmPrimitiveType.RELATION == type) { 626 return "area".equals(base) || "relation".equals(base) || "canvas".equals(base);667 return BASE_AREA.equals(base) || BASE_RELATION.equals(base) || BASE_CANVAS.equals(base); 627 668 } 628 669 return false; 629 670 } … … 633 674 return false; 634 675 } else { 635 676 if (p instanceof IRelation) { 636 if ( "area".equals(base)) {677 if (BASE_AREA.equals(base)) { 637 678 return ((IRelation<?>) p).isMultipolygon(); 638 } else if ( "canvas".equals(base)) {679 } else if (BASE_CANVAS.equals(base)) { 639 680 return p.get("#canvas") != null; 640 681 } 641 682 }
