Ignore:
Timestamp:
2018-08-31T00:57:57+02:00 (6 years ago)
Author:
Don-vip
Message:

fix #16698, see #15670 - make sure filters are executed (costly operation) only when necessary:

  • data changes imply execution of filters only when at least a filter is enabled
  • filter changes imply execution of filters even is no filter is enabled
  • filter dataset change events should not trigger a new filter execution!
Location:
trunk/src/org/openstreetmap/josm/gui/dialogs
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java

    r14138 r14206  
    3030import org.openstreetmap.josm.data.osm.FilterModel;
    3131import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
     32import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent.DatasetEventType;
    3233import org.openstreetmap.josm.data.osm.event.DataChangedEvent;
    3334import org.openstreetmap.josm.data.osm.event.DataSetListener;
     
    8384        DatasetEventManager.getInstance().addDatasetListener(this, FireMode.IN_EDT_CONSOLIDATED);
    8485        MapFrame.addMapModeChangeListener(this);
    85         filterModel.executeFilters();
     86        filterModel.executeFilters(true);
    8687    }
    8788
     
    326327    @Override
    327328    public void otherDatasetChange(AbstractDatasetChangedEvent event) {
    328         filterModel.executeFilters();
     329        if (!DatasetEventType.FILTERS_CHANGED.equals(event.getType())) {
     330            filterModel.executeFilters();
     331        }
    329332    }
    330333
  • trunk/src/org/openstreetmap/josm/gui/dialogs/FilterTableModel.java

    r12630 r14206  
    6363    private void updateFilters() {
    6464        AutoFilterManager.getInstance().setCurrentAutoFilter(null);
    65         executeFilters();
    66     }
    67 
    68     /**
    69      * Runs the filters on the current edit data set.
     65        executeFilters(true);
     66    }
     67
     68    /**
     69     * Runs the filters on the current edit data set, if any. Does nothing if no filter is enabled.
    7070     */
    7171    public void executeFilters() {
    72         if (AutoFilterManager.getInstance().getCurrentAutoFilter() == null) {
     72        executeFilters(false);
     73    }
     74
     75    /**
     76     * Runs the filter on a list of primitives that are part of the edit data set, if any. Does nothing if no filter is enabled.
     77     * @param primitives The primitives
     78     */
     79    public void executeFilters(Collection<? extends OsmPrimitive> primitives) {
     80        executeFilters(primitives, false);
     81    }
     82
     83    /**
     84     * Runs the filters on the current edit data set, if any.
     85     * @param force force execution of filters even if no filter is enabled. Useful to reset state after change of filters
     86     * @since 14206
     87     */
     88    public void executeFilters(boolean force) {
     89        if (AutoFilterManager.getInstance().getCurrentAutoFilter() == null && (force || model.hasFilters())) {
    7390            model.executeFilters();
    7491            updateMap();
     
    7794
    7895    /**
    79      * Runs the filter on a list of primitives that are part of the edit data set.
     96     * Runs the filter on a list of primitives that are part of the edit data set, if any.
     97     * @param force force execution of filters even if no filter is enabled. Useful to reset state after change of filters
    8098     * @param primitives The primitives
    81      */
    82     public void executeFilters(Collection<? extends OsmPrimitive> primitives) {
    83         if (AutoFilterManager.getInstance().getCurrentAutoFilter() == null) {
     99     * @since 14206
     100     */
     101    public void executeFilters(Collection<? extends OsmPrimitive> primitives, boolean force) {
     102        if (AutoFilterManager.getInstance().getCurrentAutoFilter() == null && (force || model.hasFilters())) {
    84103            model.executeFilters(primitives);
    85104            updateMap();
Note: See TracChangeset for help on using the changeset viewer.