Ticket #10058: line-selector.diff
| File line-selector.diff, 5.8 KB (added by , 12 years ago) |
|---|
-
src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
26 26 import org.openstreetmap.josm.data.Version; 27 27 import org.openstreetmap.josm.data.osm.Node; 28 28 import org.openstreetmap.josm.data.osm.OsmPrimitive; 29 import org.openstreetmap.josm.data.osm.OsmUtils; 29 30 import org.openstreetmap.josm.data.osm.Relation; 30 31 import org.openstreetmap.josm.data.osm.Way; 31 32 import org.openstreetmap.josm.gui.mappaint.Cascade; … … 58 59 public final List<MapCSSRule> rules = new ArrayList<>(); 59 60 // rule indices, filtered by primitive type 60 61 public final MapCSSRuleIndex nodeRules = new MapCSSRuleIndex(); // nodes 61 public final MapCSSRuleIndex wayRules = new MapCSSRuleIndex(); // ways without tag area=no 62 public final MapCSSRuleIndex wayNoAreaRules = new MapCSSRuleIndex(); // ways with tag area=no 62 public final MapCSSRuleIndex wayNoAreaTagRules = new MapCSSRuleIndex(); // ways without the tag area=yes/no 63 public final MapCSSRuleIndex wayAreaEqYesRules = new MapCSSRuleIndex(); // ways with tag area=yes 64 public final MapCSSRuleIndex wayAreaEqNoRules = new MapCSSRuleIndex(); // ways with tag area=no 63 65 public final MapCSSRuleIndex relationRules = new MapCSSRuleIndex(); // relations that are not multipolygon relations 64 66 public final MapCSSRuleIndex multipolygonRules = new MapCSSRuleIndex(); // multipolygon relations 65 67 public final MapCSSRuleIndex canvasRules = new MapCSSRuleIndex(); // rules to apply canvas properties … … 183 185 init(); 184 186 rules.clear(); 185 187 nodeRules.clear(); 186 wayRules.clear(); 187 wayNoAreaRules.clear(); 188 wayNoAreaTagRules.clear(); 189 wayAreaEqYesRules.clear(); 190 wayAreaEqNoRules.clear(); 188 191 relationRules.clear(); 189 192 multipolygonRules.clear(); 190 193 canvasRules.clear(); … … 231 234 nodeRules.add(optRule); 232 235 break; 233 236 case "way": 234 wayNoAreaRules.add(optRule); 235 wayRules.add(optRule); 237 wayNoAreaTagRules.add(optRule); 238 wayAreaEqYesRules.add(optRule); 239 wayAreaEqNoRules.add(optRule); 236 240 break; 241 case "line": 242 wayNoAreaTagRules.add(optRule); 243 wayAreaEqNoRules.add(optRule); 244 break; 237 245 case "area": 238 wayRules.add(optRule); 246 wayNoAreaTagRules.add(optRule); 247 wayAreaEqYesRules.add(optRule); 239 248 multipolygonRules.add(optRule); 240 249 break; 241 250 case "relation": … … 244 253 break; 245 254 case "*": 246 255 nodeRules.add(optRule); 247 way Rules.add(optRule);248 way NoAreaRules.add(optRule);256 wayNoAreaTagRules.add(optRule); 257 wayAreaEqNoRules.add(optRule); 249 258 relationRules.add(optRule); 250 259 multipolygonRules.add(optRule); 251 260 break; … … 262 271 } 263 272 } 264 273 nodeRules.initIndex(); 265 wayRules.initIndex(); 266 wayNoAreaRules.initIndex(); 274 wayNoAreaTagRules.initIndex(); 275 wayAreaEqYesRules.initIndex(); 276 wayAreaEqNoRules.initIndex(); 267 277 relationRules.initIndex(); 268 278 multipolygonRules.initIndex(); 269 279 canvasRules.initIndex(); … … 363 373 if (osm instanceof Node) { 364 374 matchingRuleIndex = nodeRules; 365 375 } else if (osm instanceof Way) { 366 if (osm.isKeyFalse("area")) { 367 matchingRuleIndex = wayNoAreaRules; 376 String areaValue = osm.get("area"); 377 if (areaValue == null) { 378 matchingRuleIndex = wayNoAreaTagRules; 379 } else if (OsmUtils.isTrue(areaValue)) { 380 matchingRuleIndex = wayAreaEqYesRules; 381 } else if (OsmUtils.isFalse(areaValue)) { 382 matchingRuleIndex = wayAreaEqNoRules; 368 383 } else { 369 matchingRuleIndex = way Rules;384 matchingRuleIndex = wayNoAreaTagRules; 370 385 } 371 386 } else { 372 387 if (((Relation) osm).isMultipolygon()) { -
src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
450 450 } else if (OsmPrimitiveType.NODE.equals(type)) { 451 451 return "node".equals(base); 452 452 } else if (OsmPrimitiveType.WAY.equals(type)) { 453 return "way".equals(base) || "area".equals(base) ;453 return "way".equals(base) || "area".equals(base) || "line".equals(base); 454 454 } else if (OsmPrimitiveType.RELATION.equals(type)) { 455 455 return "area".equals(base) || "relation".equals(base) || "canvas".equals(base); 456 456 } … … 467 467 } else if ("canvas".equals(base)) { 468 468 return p.get("#canvas") != null; 469 469 } 470 } else if (p instanceof Way) { 471 if ("area".equals(base)) { 472 return !p.isKeyFalse("area"); 473 } else if ("line".equals(base)) { 474 return !p.isKeyTrue("area"); 475 } 470 476 } 471 477 return true; 472 478 }
