Ticket #9891: selectedprop2.diff

File selectedprop2.diff, 5.3 KB (added by stoecker, 4 years ago)

Solve the name issue and update to recent SVN

  • src/org/openstreetmap/josm/data/osm/DataSet.java

     
    499499                throw new RuntimeException("failed to remove primitive: "+primitive);
    500500            synchronized (selectionLock) {
    501501                selectedPrimitives.remove(primitive);
    502                 selectionSnapshot = null;
     502                handleSelectionChanged(primitive);
    503503            }
    504504            allPrimitives.remove(primitive);
    505505            primitive.setDataset(null);
     
    548548        }
    549549    }
    550550
     551    private void handleSelectionChanged(OsmPrimitive p){
     552        handleSelectionChanged(Collections.singleton(p));
     553    }
     554
     555    private void handleSelectionChanged(Collection<OsmPrimitive> col){
     556        for (OsmPrimitive o : col) {
     557            o.clearCachedStyle();
     558            for (OsmPrimitive ref : o.getReferrers()) {
     559                ref.clearCachedStyle();
     560            }
     561        }
     562        selectionSnapshot = null;
     563    }
     564
     565    /**
     566     * List of currently selected primitives.
     567     */
    551568    private Set<OsmPrimitive> selectedPrimitives = new LinkedHashSet<>();
     569    /**
     570     * Cache of the collection returned by {@link getAllSelected()}. Must be
     571     * invalidated by the calling function through {@link handleSelectionChanged()}
     572     * when selection is changed.
     573     */
    552574    private Collection<OsmPrimitive> selectionSnapshot;
    553575
    554576    /**
     
    662684            for (PrimitiveId o : osm) {
    663685                changed = changed | this.__toggleSelected(o);
    664686            }
    665             if (changed) {
    666                 selectionSnapshot = null;
    667             }
    668687        }
    669688        if (changed) {
    670689            fireSelectionChanged();
     
    686705        if (!selectedPrimitives.remove(primitive)) {
    687706            selectedPrimitives.add(primitive);
    688707        }
    689         selectionSnapshot = null;
     708        handleSelectionChanged(primitive);
    690709        return true;
    691710    }
    692711
     
    733752            addSelected(selection, false);
    734753            changed = !oldSelection.equals(selectedPrimitives);
    735754            if (changed) {
    736                 selectionSnapshot = null;
     755                handleSelectionChanged(oldSelection);
    737756            }
    738757        }
    739758
     
    803822                OsmPrimitive primitive = getPrimitiveByIdChecked(id);
    804823                if (primitive != null) {
    805824                    changed = changed | selectedPrimitives.add(primitive);
     825                    handleSelectionChanged(primitive);
    806826                }
    807827            }
    808             if (changed) {
    809                 selectionSnapshot = null;
    810             }
    811828        }
    812829        if (fireSelectionChangeEvent && changed) {
    813830            fireSelectionChanged();
     
    848865                OsmPrimitive primitive = getPrimitiveById(id);
    849866                if (primitive != null) {
    850867                    changed = changed | selectedPrimitives.remove(primitive);
     868                    handleSelectionChanged(primitive);
    851869                }
    852870            }
    853             if (changed) {
    854                 selectionSnapshot = null;
    855             }
    856871        }
    857872        if (changed) {
    858873            fireSelectionChanged();
     
    865880    public void clearSelection() {
    866881        if (!selectedPrimitives.isEmpty()) {
    867882            synchronized (selectionLock) {
     883                handleSelectionChanged(selectedPrimitives);
    868884                selectedPrimitives.clear();
    869                 selectionSnapshot = null;
    870885            }
    871886            fireSelectionChanged();
    872887        }
     
    12681283                OsmPrimitive primitive = it.next();
    12691284                if (primitive.isDeleted() && (!primitive.isVisible() || primitive.isNew())) {
    12701285                    selectedPrimitives.remove(primitive);
    1271                     selectionSnapshot = null;
     1286                    handleSelectionChanged(primitive);
    12721287                    allPrimitives.remove(primitive);
    12731288                    primitive.setDataset(null);
    12741289                    changed = true;
  • src/org/openstreetmap/josm/gui/mappaint/Environment.java

     
    221221    }
    222222
    223223    public String getRole() {
    224         if (getContext().equals(Context.PRIMITIVE))
    225             return null;
     224        //if (getContext().equals(Context.PRIMITIVE))
     225        //    return null;
    226226
    227227        if (parent instanceof Relation)
    228228            return ((Relation) parent).getMember(index).getRole();
  • src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java

     
    445445        }
    446446
    447447        /**
     448         * {@code :selected} tests whether the object is selected.
     449         */
     450        static boolean selected(Environment e) {
     451            return e.osm.isSelected();
     452        }
     453
     454        /**
    448455         * {@code unconnected}: tests whether the object is a unconnected node.
    449456         */
    450457        static boolean unconnected(Environment e) {