Changeset 5442 in josm for trunk/src/org/openstreetmap
- Timestamp:
- 2012-08-13T09:10:23+02:00 (12 years ago)
- Location:
- trunk/src/org/openstreetmap/josm/data/osm
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/data/osm/FilterMatcher.java
r5437 r5442 11 11 import org.openstreetmap.josm.actions.search.SearchCompiler.Not; 12 12 import org.openstreetmap.josm.actions.search.SearchCompiler.ParseError; 13 import org.openstreetmap.josm.tools.SubclassFilteredCollection; 13 14 14 15 /** … … 42 43 * way without its nodes cannot be edited properly. 43 44 * 45 * Multipolygons and (untagged) member ways are handled in a similar way. 44 46 */ 45 47 public class FilterMatcher { … … 183 185 } 184 186 187 private boolean allParentMultipolygonsFiltered(OsmPrimitive primitive, boolean hidden) { 188 boolean isExplicit = false; 189 for (Relation r : new SubclassFilteredCollection<OsmPrimitive, Relation>( 190 primitive.getReferrers(), OsmPrimitive.multipolygonPredicate)) { 191 if (!isFiltered(r, hidden)) 192 return false; 193 isExplicit |= isFilterExplicit(r, hidden); 194 } 195 return isExplicit; 196 } 197 198 private boolean oneParentMultipolygonNotFiltered(OsmPrimitive primitive, boolean hidden) { 199 for (Relation r : new SubclassFilteredCollection<OsmPrimitive, Relation>( 200 primitive.getReferrers(), OsmPrimitive.multipolygonPredicate)) { 201 if (!isFiltered(r, hidden)) 202 return true; 203 } 204 return false; 205 } 206 185 207 private FilterType test(List<FilterInfo> filters, OsmPrimitive primitive, boolean hidden) { 186 208 … … 209 231 210 232 if (primitive instanceof Node) { 211 // Technically not hidden by any filter, but we hide it anyway, if 212 // it is untagged and all parent ways are hidden. 213 if (!filtered) { 233 if (filtered) { 234 // If there is a parent way, that is not hidden, we show the 235 // node anyway, unless there is no non-inverted filter that 236 // applies to the node directly. 237 if (explicitlyFiltered) 238 return FilterType.PASSIV; 239 else { 240 if (oneParentWayNotFiltered(primitive, hidden)) 241 return FilterType.NOT_FILTERED; 242 else 243 return FilterType.PASSIV; 244 } 245 } else { 214 246 if (!primitive.isTagged() && allParentWaysFiltered(primitive, hidden)) 247 // Technically not hidden by any filter, but we hide it anyway, if 248 // it is untagged and all parent ways are hidden. 215 249 return FilterType.PASSIV; 216 250 else 217 251 return FilterType.NOT_FILTERED; 218 252 } 219 // At this point, selected == true, so the node is hidden. 220 // However, if there is a parent way, that is not hidden, we ignore 221 // this and show the node anyway, unless there is no non-inverted 222 // filter that applies to the node directly. 223 if (!explicitlyFiltered) { 224 if (!oneParentWayNotFiltered(primitive, hidden)) 225 return FilterType.PASSIV; 253 } else if (primitive instanceof Way) { 254 if (filtered) { 255 if (explicitlyFiltered) 256 return FilterType.EXPLICIT; 257 else { 258 if (oneParentMultipolygonNotFiltered(primitive, hidden)) 259 return FilterType.NOT_FILTERED; 260 else 261 return FilterType.PASSIV; 262 } 263 } else { 264 if (!primitive.isTagged() && allParentMultipolygonsFiltered(primitive, hidden)) 265 return FilterType.EXPLICIT; 226 266 else 227 267 return FilterType.NOT_FILTERED; 228 268 } 229 return FilterType.PASSIV;230 269 } else { 231 270 if (filtered) -
trunk/src/org/openstreetmap/josm/data/osm/FilterWorker.java
r5437 r5442 44 44 if (disabledType != FilterType.NOT_FILTERED) { 45 45 changed |= primitive.setDisabledState(false); 46 primitive.setDisabledType( hiddenType == FilterType.EXPLICIT);46 primitive.setDisabledType(disabledType == FilterType.EXPLICIT); 47 47 } else { 48 48 changed |= primitive.unsetDisabledState(); -
trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
r5437 r5442 214 214 @Override public boolean evaluate(OsmPrimitive primitive) { 215 215 return primitive.getClass() == Relation.class; 216 } 217 }; 218 219 public static final Predicate<OsmPrimitive> multipolygonPredicate = new Predicate<OsmPrimitive>() { 220 @Override public boolean evaluate(OsmPrimitive primitive) { 221 return primitive.getClass() == Relation.class && ((Relation) primitive).isMultipolygon(); 216 222 } 217 223 };
Note:
See TracChangeset
for help on using the changeset viewer.