Changeset 32395 in osm for applications/editors/josm/plugins/reltoolbox/src/relcontext/ChosenRelation.java
- Timestamp:
- 2016-06-24T09:10:57+02:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/reltoolbox/src/relcontext/ChosenRelation.java
r30841 r32395 1 // License: GPL. For details, see LICENSE file. 1 2 package relcontext; 2 3 3 import java.awt.*; 4 import java.awt.AlphaComposite; 5 import java.awt.BasicStroke; 6 import java.awt.Color; 7 import java.awt.Composite; 8 import java.awt.Graphics2D; 9 import java.awt.Point; 10 import java.awt.Stroke; 4 11 import java.awt.geom.GeneralPath; 5 import java.util.*; 12 import java.util.HashSet; 13 import java.util.Set; 14 6 15 import org.openstreetmap.josm.Main; 7 16 import org.openstreetmap.josm.data.Bounds; 8 import org.openstreetmap.josm.data.osm.*; 9 import org.openstreetmap.josm.data.osm.event.*; 17 import org.openstreetmap.josm.data.osm.Node; 18 import org.openstreetmap.josm.data.osm.OsmPrimitive; 19 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 20 import org.openstreetmap.josm.data.osm.Relation; 21 import org.openstreetmap.josm.data.osm.Way; 22 import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent; 23 import org.openstreetmap.josm.data.osm.event.DataChangedEvent; 24 import org.openstreetmap.josm.data.osm.event.DataSetListener; 25 import org.openstreetmap.josm.data.osm.event.NodeMovedEvent; 26 import org.openstreetmap.josm.data.osm.event.PrimitivesAddedEvent; 27 import org.openstreetmap.josm.data.osm.event.PrimitivesRemovedEvent; 28 import org.openstreetmap.josm.data.osm.event.RelationMembersChangedEvent; 29 import org.openstreetmap.josm.data.osm.event.TagsChangedEvent; 30 import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent; 10 31 import org.openstreetmap.josm.gui.MapView; 11 import org.openstreetmap.josm.gui.MapView.EditLayerChangeListener; 32 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent; 33 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener; 12 34 import org.openstreetmap.josm.gui.layer.MapViewPaintable; 13 35 import org.openstreetmap.josm.gui.layer.OsmDataLayer; … … 18 40 * @author Zverik 19 41 */ 20 public class ChosenRelation implements EditLayerChangeListener, MapViewPaintable, DataSetListener {42 public class ChosenRelation implements ActiveLayerChangeListener, MapViewPaintable, DataSetListener { 21 43 protected Relation chosenRelation = null; 22 44 private Set<ChosenRelationListener> chosenRelationListeners = new HashSet<>(); 23 45 24 public void set( 25 if (rel == chosenRelation || (rel != null && chosenRelation != null && rel.equals(chosenRelation))) {46 public void set(Relation rel) { 47 if (rel == chosenRelation || (rel != null && chosenRelation != null && rel.equals(chosenRelation))) 26 48 return; // new is the same as old 27 }28 49 Relation oldRel = chosenRelation; 29 50 chosenRelation = rel; … … 33 54 } 34 55 35 protected void fireRelationChanged( 36 for (ChosenRelationListener listener : chosenRelationListeners)56 protected void fireRelationChanged(Relation oldRel) { 57 for (ChosenRelationListener listener : chosenRelationListeners) { 37 58 listener.chosenRelationChanged(oldRel, chosenRelation); 59 } 38 60 } 39 61 … … 46 68 } 47 69 48 public boolean isSame( Object r) {49 if (r == null )70 public boolean isSame(Object r) { 71 if (r == null ) 50 72 return chosenRelation == null; 51 else if (!(r instanceof Relation) )73 else if (!(r instanceof Relation) ) 52 74 return false; 53 75 else 54 76 return chosenRelation != null && r.equals(chosenRelation); 55 77 } 56 57 private final staticString[] MULTIPOLYGON_TYPES = new String[] {58 "multipolygon", "boundary" 78 79 private static final String[] MULTIPOLYGON_TYPES = new String[] { 80 "multipolygon", "boundary" 59 81 }; 60 82 … … 66 88 } 67 89 68 public static boolean isMultipolygon( 69 if (r == null )90 public static boolean isMultipolygon(Relation r) { 91 if (r == null ) 70 92 return false; 71 93 String type = r.get("type"); 72 if (type == null )94 if (type == null ) 73 95 return false; 74 for (String t : MULTIPOLYGON_TYPES )75 if (t.equals(type) )96 for (String t : MULTIPOLYGON_TYPES ) 97 if (t.equals(type) ) 76 98 return true; 77 99 return false; … … 90 112 } 91 113 92 public void addChosenRelationListener( 114 public void addChosenRelationListener(ChosenRelationListener listener) { 93 115 chosenRelationListeners.add(listener); 94 116 } 95 117 96 public void removeChosenRelationListener( 118 public void removeChosenRelationListener(ChosenRelationListener listener) { 97 119 chosenRelationListeners.remove(listener); 98 120 } 99 121 100 public void editLayerChanged( OsmDataLayer oldLayer, OsmDataLayer newLayer ) { 122 @Override 123 public void activeOrEditLayerChanged(ActiveLayerChangeEvent e) { 101 124 // todo: dim chosen relation when changing layer 102 125 // todo: check this WTF! 126 OsmDataLayer newLayer = Main.getLayerManager().getEditLayer(); 103 127 clear(); 104 if (newLayer != null &&oldLayer== null128 if (newLayer != null && e.getPreviousEditLayer() == null) { 105 129 Main.map.mapView.addTemporaryLayer(this); 106 } else if (newLayer == null130 } else if (newLayer == null) { 107 131 Main.map.mapView.removeTemporaryLayer(this); 108 132 } 109 133 } 110 134 111 public void paint( Graphics2D g, MapView mv, Bounds bbox ) { 112 if( chosenRelation == null ) { 135 @Override 136 public void paint(Graphics2D g, MapView mv, Bounds bbox) { 137 if (chosenRelation == null) 113 138 return; 114 }115 139 116 140 OsmDataLayer dataLayer = mv.getEditLayer(); 117 141 float opacity = dataLayer == null ? 0.0f : !dataLayer.isVisible() ? 0.0f : (float)dataLayer.getOpacity(); 118 if (opacity < 0.01 )142 if (opacity < 0.01 ) 119 143 return; 120 144 121 145 Composite oldComposite = g.getComposite(); 122 146 Stroke oldStroke = g.getStroke(); … … 124 148 g.setColor(Color.yellow); 125 149 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f * opacity)); 126 150 127 151 drawRelations(g, mv, bbox, chosenRelation); 128 152 129 153 g.setComposite(oldComposite); 130 154 g.setStroke(oldStroke); 131 132 } 155 156 } 157 133 158 private void drawRelations(Graphics2D g, MapView mv, Bounds bbox, Relation rel) { 134 for (OsmPrimitive element : rel.getMemberPrimitives()135 if (element.getType() == OsmPrimitiveType.NODE159 for (OsmPrimitive element : rel.getMemberPrimitives()) { 160 if (element.getType() == OsmPrimitiveType.NODE) { 136 161 Node node = (Node)element; 137 162 Point center = mv.getPoint(node); 138 163 g.drawOval(center.x - 4, center.y - 4, 9, 9); 139 } else if (element.getType() == OsmPrimitiveType.WAY164 } else if (element.getType() == OsmPrimitiveType.WAY) { 140 165 Way way = (Way)element; 141 if (way.getNodesCount() >= 2166 if (way.getNodesCount() >= 2) { 142 167 GeneralPath b = new GeneralPath(); 143 168 Point p = mv.getPoint(way.getNode(0)); 144 169 b.moveTo(p.x, p.y); 145 for (int i = 1; i < way.getNodesCount(); i++170 for (int i = 1; i < way.getNodesCount(); i++) { 146 171 p = mv.getPoint(way.getNode(i)); 147 172 b.lineTo(p.x, p.y); … … 149 174 g.draw(b); 150 175 } 151 } else if (element.getType() == OsmPrimitiveType.RELATION176 } else if (element.getType() == OsmPrimitiveType.RELATION) { 152 177 Color oldColor = g.getColor(); 153 178 g.setColor(Color.magenta); … … 159 184 } 160 185 161 public void relationMembersChanged( RelationMembersChangedEvent event ) { 162 if( chosenRelation != null && event.getRelation().equals(chosenRelation) ) 186 @Override 187 public void relationMembersChanged(RelationMembersChangedEvent event) { 188 if (chosenRelation != null && event.getRelation().equals(chosenRelation) ) { 163 189 fireRelationChanged(chosenRelation); 164 } 165 166 public void tagsChanged( TagsChangedEvent event ) { 167 if( chosenRelation != null && event.getPrimitive().equals(chosenRelation) ) 190 } 191 } 192 193 @Override 194 public void tagsChanged(TagsChangedEvent event) { 195 if (chosenRelation != null && event.getPrimitive().equals(chosenRelation) ) { 168 196 fireRelationChanged(chosenRelation); 169 } 170 171 public void dataChanged( DataChangedEvent event ) { 172 if( chosenRelation != null ) 197 } 198 } 199 200 @Override 201 public void dataChanged(DataChangedEvent event) { 202 if (chosenRelation != null ) { 173 203 fireRelationChanged(chosenRelation); 174 } 175 176 public void primitivesRemoved( PrimitivesRemovedEvent event ) { 177 if( chosenRelation != null && event.getPrimitives().contains(chosenRelation) ) 204 } 205 } 206 207 @Override 208 public void primitivesRemoved(PrimitivesRemovedEvent event) { 209 if (chosenRelation != null && event.getPrimitives().contains(chosenRelation) ) { 178 210 clear(); 179 } 180 181 public void wayNodesChanged( WayNodesChangedEvent event ) { 182 if( chosenRelation != null ) 211 } 212 } 213 214 @Override 215 public void wayNodesChanged(WayNodesChangedEvent event) { 216 if (chosenRelation != null ) 217 { 183 218 fireRelationChanged(chosenRelation); // download incomplete primitives doesn't cause dataChanged event 184 } 185 186 public void primitivesAdded( PrimitivesAddedEvent event ) {} 187 public void nodeMoved( NodeMovedEvent event ) {} 188 public void otherDatasetChange( AbstractDatasetChangedEvent event ) {} 219 } 220 } 221 222 @Override 223 public void primitivesAdded(PrimitivesAddedEvent event) {} 224 @Override 225 public void nodeMoved(NodeMovedEvent event) {} 226 @Override 227 public void otherDatasetChange(AbstractDatasetChangedEvent event) {} 189 228 }
Note:
See TracChangeset
for help on using the changeset viewer.