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
|
1298 | 1298 | } |
1299 | 1299 | |
1300 | 1300 | @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 |
1301 | 1311 | public boolean layerIsSupported(Layer l) { |
1302 | 1312 | return l instanceof OsmDataLayer; |
1303 | 1313 | } |
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;
|
7 | 7 | import java.awt.event.MouseEvent; |
8 | 8 | import java.awt.event.MouseListener; |
9 | 9 | import java.awt.event.MouseMotionListener; |
| 10 | import java.util.Collection; |
| 11 | import java.util.Collections; |
10 | 12 | |
11 | 13 | import org.openstreetmap.josm.Main; |
12 | 14 | import org.openstreetmap.josm.actions.JosmAction; |
| 15 | import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent; |
| 16 | import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener; |
| 17 | import org.openstreetmap.josm.data.osm.OsmPrimitive; |
13 | 18 | import org.openstreetmap.josm.gui.MapFrame; |
14 | 19 | import org.openstreetmap.josm.gui.layer.Layer; |
15 | 20 | import org.openstreetmap.josm.tools.ImageProvider; |
16 | 21 | import org.openstreetmap.josm.tools.Shortcut; |
17 | | import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent; |
18 | | import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener; |
19 | 22 | |
20 | 23 | /** |
21 | 24 | * A class implementing MapMode is able to be selected as an mode for map editing. |
… |
… |
public abstract class MapMode extends JosmAction implements MouseListener, Mouse
|
171 | 174 | public void preferenceChanged(PreferenceChangeEvent e) { |
172 | 175 | readPreferences(); |
173 | 176 | } |
| 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 | } |
174 | 185 | } |
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;
|
5 | 5 | import java.util.Collection; |
6 | 6 | import java.util.List; |
7 | 7 | |
| 8 | import org.openstreetmap.josm.Main; |
8 | 9 | import org.openstreetmap.josm.actions.search.SearchAction.SearchMode; |
9 | 10 | import org.openstreetmap.josm.actions.search.SearchCompiler; |
10 | 11 | import org.openstreetmap.josm.actions.search.SearchCompiler.Match; |
… |
… |
public class FilterMatcher {
|
225 | 226 | |
226 | 227 | private static FilterType test(List<FilterInfo> filters, OsmPrimitive primitive, boolean hidden) { |
227 | 228 | |
228 | | if (primitive.isIncomplete()) |
| 229 | if (primitive.isIncomplete() || Main.map.mapMode.getPreservedPrimitives().contains(primitive)) |
229 | 230 | return FilterType.NOT_FILTERED; |
230 | 231 | |
231 | 232 | boolean filtered = false; |
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;
|
26 | 26 | import javax.swing.table.TableCellRenderer; |
27 | 27 | |
28 | 28 | import org.openstreetmap.josm.Main; |
| 29 | import org.openstreetmap.josm.actions.mapmode.MapMode; |
29 | 30 | import org.openstreetmap.josm.actions.search.SearchAction; |
30 | 31 | import org.openstreetmap.josm.data.osm.Filter; |
31 | 32 | import org.openstreetmap.josm.data.osm.OsmPrimitive; |
… |
… |
import org.openstreetmap.josm.data.osm.event.PrimitivesRemovedEvent;
|
43 | 44 | import org.openstreetmap.josm.data.osm.event.RelationMembersChangedEvent; |
44 | 45 | import org.openstreetmap.josm.data.osm.event.TagsChangedEvent; |
45 | 46 | import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent; |
| 47 | import org.openstreetmap.josm.gui.MapFrame; |
| 48 | import org.openstreetmap.josm.gui.MapFrame.MapModeChangeListener; |
46 | 49 | import org.openstreetmap.josm.gui.SideButton; |
47 | 50 | import org.openstreetmap.josm.tools.ImageProvider; |
48 | 51 | import org.openstreetmap.josm.tools.InputMapUtils; |
… |
… |
import org.openstreetmap.josm.tools.Shortcut;
|
54 | 57 | * |
55 | 58 | * @author Petr_Dlouhý |
56 | 59 | */ |
57 | | public class FilterDialog extends ToggleDialog implements DataSetListener { |
| 60 | public class FilterDialog extends ToggleDialog implements DataSetListener, MapModeChangeListener { |
58 | 61 | |
59 | 62 | private JTable userTable; |
60 | 63 | private final FilterTableModel filterModel = new FilterTableModel(); |
… |
… |
public class FilterDialog extends ToggleDialog implements DataSetListener {
|
79 | 82 | @Override |
80 | 83 | public void showNotify() { |
81 | 84 | DatasetEventManager.getInstance().addDatasetListener(this, FireMode.IN_EDT_CONSOLIDATED); |
| 85 | MapFrame.addMapModeChangeListener(this); |
82 | 86 | filterModel.executeFilters(); |
83 | 87 | } |
84 | 88 | |
85 | 89 | @Override |
86 | 90 | public void hideNotify() { |
87 | 91 | DatasetEventManager.getInstance().removeDatasetListener(this); |
| 92 | MapFrame.removeMapModeChangeListener(this); |
88 | 93 | filterModel.clearFilterFlags(); |
89 | 94 | Main.map.mapView.repaint(); |
90 | 95 | } |
… |
… |
public class FilterDialog extends ToggleDialog implements DataSetListener {
|
361 | 366 | filterModel.executeFilters(getAffectedPrimitives(event.getPrimitives())); |
362 | 367 | } |
363 | 368 | |
| 369 | @Override |
| 370 | public void mapModeChange(MapMode oldMapMode, MapMode newMapMode) { |
| 371 | filterModel.executeFilters(); |
| 372 | } |
| 373 | |
364 | 374 | /** |
365 | 375 | * This method is intendet for Plugins getting the filtermodel and using .addFilter() to |
366 | 376 | * add a new filter. |