/** Resets all derived attributes, based on a set of looks. */ public void setLooks(Set<Look> looks) { testFixed(false); VisualMap newValues = Look.getVisualsFor(looks); Set<VisualKey> staleKeys = EnumSet.noneOf(VisualKey.class); for (VisualKey key : VisualKey.deriveds()) { if (key.getNature() == Nature.DERIVED) { Object newValue = newValues.map.get(key); boolean refresh; if (newValue == null) { Object oldValue = this.map.remove(key); refresh = oldValue != null; } else { Object oldValue = this.map.put(key, newValue); refresh = !newValue.equals(oldValue); } // tell the attribute to refresh // if something actually changed if (refresh) { staleKeys.add(key); } } } this.attrMap.setStale(staleKeys); }