Ticket #5144: fix-5144.patch

File fix-5144.patch, 6.0 KB (added by michael2402, 7 years ago)
  • src/org/openstreetmap/josm/actions/mapmode/DrawAction.java

    diff --git a/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java b/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
    index e623b70..5167817 100644
    a b public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh  
    12981298    }
    12991299
    13001300    @Override
     1301    public Collection<? extends OsmPrimitive> getPreservedPrimitives() {
     1302        DataSet ds = getLayerManager().getEditDataSet();
     1303        if (ds == null) {
     1304            return null;
     1305        } else {
     1306            return ds.getSelected();
     1307        }
     1308    }
     1309
     1310    @Override
    13011311    public boolean layerIsSupported(Layer l) {
    13021312        return l instanceof OsmDataLayer;
    13031313    }
  • src/org/openstreetmap/josm/actions/mapmode/MapMode.java

    diff --git a/src/org/openstreetmap/josm/actions/mapmode/MapMode.java b/src/org/openstreetmap/josm/actions/mapmode/MapMode.java
    index f6d774f..7e3caf0 100644
    a b import java.awt.event.InputEvent;  
    77import java.awt.event.MouseEvent;
    88import java.awt.event.MouseListener;
    99import java.awt.event.MouseMotionListener;
     10import java.util.Collection;
     11import java.util.Collections;
    1012
    1113import org.openstreetmap.josm.Main;
    1214import org.openstreetmap.josm.actions.JosmAction;
     15import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
     16import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
     17import org.openstreetmap.josm.data.osm.OsmPrimitive;
    1318import org.openstreetmap.josm.gui.MapFrame;
    1419import org.openstreetmap.josm.gui.layer.Layer;
    1520import org.openstreetmap.josm.tools.ImageProvider;
    1621import org.openstreetmap.josm.tools.Shortcut;
    17 import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
    18 import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
    1922
    2023/**
    2124 * A class implementing MapMode is able to be selected as an mode for map editing.
    public abstract class MapMode extends JosmAction implements MouseListener, Mouse  
    171174    public void preferenceChanged(PreferenceChangeEvent e) {
    172175        readPreferences();
    173176    }
     177
     178    /**
     179     * Gets a collection of primitives that should not be hidden by the filter.
     180     * @return The primitives that the filter should not hide.
     181     */
     182    public Collection<? extends OsmPrimitive> getPreservedPrimitives() {
     183        return Collections.emptySet();
     184    }
    174185}
  • src/org/openstreetmap/josm/data/osm/FilterMatcher.java

    diff --git a/src/org/openstreetmap/josm/data/osm/FilterMatcher.java b/src/org/openstreetmap/josm/data/osm/FilterMatcher.java
    index ae5a979..e3f206c 100644
    a b import java.util.ArrayList;  
    55import java.util.Collection;
    66import java.util.List;
    77
     8import org.openstreetmap.josm.Main;
    89import org.openstreetmap.josm.actions.search.SearchAction.SearchMode;
    910import org.openstreetmap.josm.actions.search.SearchCompiler;
    1011import org.openstreetmap.josm.actions.search.SearchCompiler.Match;
    public class FilterMatcher {  
    225226
    226227    private static FilterType test(List<FilterInfo> filters, OsmPrimitive primitive, boolean hidden) {
    227228
    228         if (primitive.isIncomplete())
     229        if (primitive.isIncomplete() || Main.map.mapMode.getPreservedPrimitives().contains(primitive))
    229230            return FilterType.NOT_FILTERED;
    230231
    231232        boolean filtered = false;
  • src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java

    diff --git a/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java b/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
    index 721e1db..0f4fcb3 100644
    a b import javax.swing.table.JTableHeader;  
    2626import javax.swing.table.TableCellRenderer;
    2727
    2828import org.openstreetmap.josm.Main;
     29import org.openstreetmap.josm.actions.mapmode.MapMode;
    2930import org.openstreetmap.josm.actions.search.SearchAction;
    3031import org.openstreetmap.josm.data.osm.Filter;
    3132import org.openstreetmap.josm.data.osm.OsmPrimitive;
    import org.openstreetmap.josm.data.osm.event.PrimitivesRemovedEvent;  
    4344import org.openstreetmap.josm.data.osm.event.RelationMembersChangedEvent;
    4445import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
    4546import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
     47import org.openstreetmap.josm.gui.MapFrame;
     48import org.openstreetmap.josm.gui.MapFrame.MapModeChangeListener;
    4649import org.openstreetmap.josm.gui.SideButton;
    4750import org.openstreetmap.josm.tools.ImageProvider;
    4851import org.openstreetmap.josm.tools.InputMapUtils;
    import org.openstreetmap.josm.tools.Shortcut;  
    5457 *
    5558 * @author Petr_Dlouhý
    5659 */
    57 public class FilterDialog extends ToggleDialog implements DataSetListener {
     60public class FilterDialog extends ToggleDialog implements DataSetListener, MapModeChangeListener {
    5861
    5962    private JTable userTable;
    6063    private final FilterTableModel filterModel = new FilterTableModel();
    public class FilterDialog extends ToggleDialog implements DataSetListener {  
    7982    @Override
    8083    public void showNotify() {
    8184        DatasetEventManager.getInstance().addDatasetListener(this, FireMode.IN_EDT_CONSOLIDATED);
     85        MapFrame.addMapModeChangeListener(this);
    8286        filterModel.executeFilters();
    8387    }
    8488
    8589    @Override
    8690    public void hideNotify() {
    8791        DatasetEventManager.getInstance().removeDatasetListener(this);
     92        MapFrame.removeMapModeChangeListener(this);
    8893        filterModel.clearFilterFlags();
    8994        Main.map.mapView.repaint();
    9095    }
    public class FilterDialog extends ToggleDialog implements DataSetListener {  
    361366        filterModel.executeFilters(getAffectedPrimitives(event.getPrimitives()));
    362367    }
    363368
     369    @Override
     370    public void mapModeChange(MapMode oldMapMode, MapMode newMapMode) {
     371        filterModel.executeFilters();
     372    }
     373
    364374    /**
    365375     * This method is intendet for Plugins getting the filtermodel and using .addFilter() to
    366376     * add a new filter.