Changeset 3471 in josm for trunk/src


Ignore:
Timestamp:
2010-08-25T22:01:42+02:00 (14 years ago)
Author:
jttt
Message:

Fix #5379 Fixing duplicate nodes very slow when filter dock is open

Location:
trunk/src/org/openstreetmap/josm
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/DataSet.java

    r3458 r3471  
    279279            boolean success = false;
    280280            if (primitive instanceof Node) {
    281                 success = nodes.remove((Node) primitive);
     281                success = nodes.remove(primitive);
    282282            } else if (primitive instanceof Way) {
    283                 success = ways.remove((Way) primitive);
     283                success = ways.remove(primitive);
    284284            } else if (primitive instanceof Relation) {
    285                 success = relations.remove((Relation) primitive);
     285                success = relations.remove(primitive);
    286286            }
    287287            if (!success)
     
    436436            selectedPrimitives = new LinkedHashSet<OsmPrimitive>();
    437437            changed = addSelected(selection, false)
    438                             || (!wasEmpty && selectedPrimitives.isEmpty());
     438            || (!wasEmpty && selectedPrimitives.isEmpty());
    439439            if (changed) {
    440440                selectionSnapshot = null;
  • trunk/src/org/openstreetmap/josm/data/osm/FilterWorker.java

    r3371 r3471  
    3232     * (but hides them only if they are not used by any unfiltered way).
    3333     */
    34     public static void executeFilters(Collection<OsmPrimitive> all, FilterMatcher filterMatcher) {
     34    public static boolean executeFilters(Collection<OsmPrimitive> all, FilterMatcher filterMatcher) {
     35
     36        boolean changed = false;
    3537
    3638        // First relation and ways
     
    3840            if (!(primitive instanceof Node)) {
    3941                if (filterMatcher.isHidden(primitive)) {
    40                     primitive.setDisabledState(true);
     42                    changed = changed | primitive.setDisabledState(true);
    4143                } else if (filterMatcher.isDisabled(primitive)) {
    42                     primitive.setDisabledState(false);
     44                    changed = changed | primitive.setDisabledState(false);
    4345                } else {
    44                     primitive.unsetDisabledState();
     46                    changed = changed | primitive.unsetDisabledState();
    4547                }
    4648            }
     
    5153            if (primitive instanceof Node) {
    5254                if (filterMatcher.isHidden(primitive)) {
    53                     primitive.setDisabledState(true);
     55                    changed = changed | primitive.setDisabledState(true);
    5456                } else if (filterMatcher.isDisabled(primitive)) {
    55                     primitive.setDisabledState(false);
     57                    changed = changed | primitive.setDisabledState(false);
    5658                } else {
    57                     primitive.unsetDisabledState();
     59                    changed = changed | primitive.unsetDisabledState();
    5860                }
    5961            }
    6062        }
     63
     64        return changed;
    6165    }
    6266
    6367    public static boolean executeFilters(OsmPrimitive primitive, FilterMatcher filterMatcher) {
    64         boolean hidden = primitive.isDisabledAndHidden();
    65         boolean disabled = primitive.isDisabled();
     68        boolean changed = false;
    6669        if (filterMatcher.isHidden(primitive)) {
    67             primitive.setDisabledState(true);
     70            changed = changed | primitive.setDisabledState(true);
    6871        } else if (filterMatcher.isDisabled(primitive)) {
    69             primitive.setDisabledState(false);
     72            changed = changed | primitive.setDisabledState(false);
    7073        } else {
    71             primitive.unsetDisabledState();
     74            changed = changed | primitive.unsetDisabledState();
    7275        }
    73         return hidden != primitive.isDisabledAndHidden() || disabled != primitive.isDisabled();
     76        return changed;
    7477    }
    7578
  • trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java

    r3466 r3471  
    617617     *             just shown in gray color.
    618618     */
    619     public void setDisabledState(boolean hide) {
     619    public boolean setDisabledState(boolean hide) {
    620620        boolean locked = writeLock();
    621621        try {
     622            int oldFlags = flags;
    622623            updateFlagsNoLock(FLAG_DISABLED, true);
    623624            updateFlagsNoLock(FLAG_HIDE_IF_DISABLED, hide);
     625            return oldFlags != flags;
    624626        } finally {
    625627            writeUnlock(locked);
     
    632634     * again.
    633635     */
    634     public void unsetDisabledState() {
    635         updateFlags(FLAG_DISABLED + FLAG_HIDE_IF_DISABLED, false);
     636    public boolean unsetDisabledState() {
     637        boolean locked = writeLock();
     638        try {
     639            int oldFlags = flags;
     640            updateFlagsNoLock(FLAG_DISABLED + FLAG_HIDE_IF_DISABLED, false);
     641            return oldFlags != flags;
     642        } finally {
     643            writeUnlock(locked);
     644        }
    636645    }
    637646
  • trunk/src/org/openstreetmap/josm/gui/dialogs/FilterTableModel.java

    r3393 r3471  
    6464    public void executeFilters() {
    6565        DataSet ds = Main.main.getCurrentDataSet();
     66        boolean changed = false;
    6667        if (ds == null) {
    6768            disabledAndHiddenCount = 0;
    6869            disabledCount = 0;
     70            changed = true;
    6971        } else {
    7072            final Collection<OsmPrimitive> deselect = new HashSet<OsmPrimitive>();
     
    7577                final Collection<OsmPrimitive> all = ds.allNonDeletedCompletePrimitives();
    7678
    77                 FilterWorker.executeFilters(all, filterMatcher);
     79                changed = FilterWorker.executeFilters(all, filterMatcher);
    7880
    7981                disabledCount = 0;
     
    101103        }
    102104
    103         if (Main.isDisplayingMapView()) {
     105        if (Main.isDisplayingMapView() && changed) {
    104106            Main.map.mapView.repaint();
    105107            Main.map.filterDialog.updateDialogHeader();
Note: See TracChangeset for help on using the changeset viewer.