public class MapView extends NavigatableComponent implements java.beans.PropertyChangeListener, Preferences.PreferenceChangedListener, OsmDataLayer.LayerStateChangeListener
MapFrame
for browsing the map. It use is to
provide the MapMode's enough capabilities to operate.MapView
holds meta-data about the data set currently displayed, as scale level,
center point viewed, what scrolling mode or editing mode is selected or with
what projection the map is viewed etc..MapView
is able to administrate several layers.Modifier and Type | Class and Description |
---|---|
static interface |
MapView.EditLayerChangeListener
An interface that needs to be implemented in order to listen for changes to the active edit layer.
|
static interface |
MapView.LayerChangeListener
Interface to notify listeners of a layer change.
|
private static class |
MapView.LayerListenerType |
static interface |
MapView.RepaintListener
This is a listener that gets informed whenever repaint is called for this MapView.
|
NavigatableComponent.ZoomChangeListener
javax.swing.JComponent.AccessibleJComponent
Modifier and Type | Field and Description |
---|---|
private Layer |
activeLayer
The layer from the layers list that is currently active.
|
private Layer |
changedLayer |
private OsmDataLayer |
editLayer
The edit layer is the current active data layer.
|
private static java.util.concurrent.CopyOnWriteArrayList<MapView.EditLayerChangeListener> |
editLayerChangeListeners |
private java.awt.Rectangle |
lastClipBounds |
java.awt.event.MouseEvent |
lastMEvent
The last event performed by mouse.
|
private int |
lastViewID |
private static java.util.concurrent.CopyOnWriteArrayList<MapView.LayerChangeListener> |
layerChangeListeners
the layer listeners
|
private java.util.List<Layer> |
layers
A list of all layers currently loaded.
|
private MapMover |
mapMover |
private java.util.List<Layer> |
nonChangedLayers |
private java.awt.image.BufferedImage |
nonChangedLayersBuffer |
private java.awt.image.BufferedImage |
offscreenBuffer |
private java.awt.Point |
oldLoc |
private java.awt.Dimension |
oldSize |
private boolean |
paintPreferencesChanged |
PlayHeadMarker |
playHeadMarker
The play head marker: there is only one of these so it isn't in any specific layer
|
private java.util.concurrent.CopyOnWriteArrayList<MapView.RepaintListener> |
repaintListeners |
private SelectionChangedListener |
repaintSelectionChangedListener |
private java.util.Set<MapViewPaintable> |
temporaryLayers
Temporary layers (selection rectangle, etc.) that are never cached and
drawn on top of regular layers.
|
boolean |
viewportFollowing |
private boolean |
virtualNodesEnabled |
center, cursorManager, initialViewport, isSelectablePredicate, PROP_SNAP_DISTANCE, PROPNAME_CENTER, PROPNAME_SCALE
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
Constructor and Description |
---|
MapView(javax.swing.JPanel contentPane,
ViewportData viewportData)
Constructs a new
MapView . |
Modifier and Type | Method and Description |
---|---|
static void |
addEditLayerChangeListener(MapView.EditLayerChangeListener listener)
Adds an edit layer change listener
|
static void |
addEditLayerChangeListener(MapView.EditLayerChangeListener listener,
boolean initialFire)
Adds an edit layer change listener
|
protected void |
addGpxLayer(GpxLayer layer)
Adds a GPX layer.
|
void |
addLayer(Layer layer)
Add a layer to the current MapView.
|
static void |
addLayerChangeListener(MapView.LayerChangeListener listener)
Adds a layer change listener
|
static void |
addLayerChangeListener(MapView.LayerChangeListener listener,
boolean initialFire)
Adds a layer change listener
|
void |
addRepaintListener(MapView.RepaintListener l)
Adds a listener that gets informed whenever repaint() is called for this class.
|
boolean |
addTemporaryLayer(MapViewPaintable mvp)
Adds a new temporary layer.
|
void |
destroy() |
protected Layer |
determineNextActiveLayer(java.util.List<Layer> layersList)
Determines the next active data layer according to the following
rules:
if there is at least one
OsmDataLayer the first one
becomes active
otherwise, the top most layer of any type becomes active
|
private OsmDataLayer |
findNewEditLayer(java.util.List<Layer> layersList) |
protected void |
fireActiveLayerChanged(Layer oldLayer,
Layer newLayer)
Calls the
MapView.LayerChangeListener.activeLayerChange(Layer, Layer) method of all listeners. |
protected void |
fireEditLayerChanged(OsmDataLayer oldLayer,
OsmDataLayer newLayer) |
protected void |
fireLayerAdded(Layer newLayer) |
protected void |
fireLayerRemoved(Layer layer) |
Layer |
getActiveLayer()
Replies the currently active layer
|
java.util.Collection<Layer> |
getAllLayers() |
java.util.List<Layer> |
getAllLayersAsList() |
protected DataSet |
getCurrentDataSet() |
OsmDataLayer |
getEditLayer()
Replies the current edit layer, if any
|
java.lang.String |
getLayerInformationForSourceTag()
Get a string representation of all layers suitable for the
source changeset tag. |
int |
getLayerPos(Layer layer)
Gets the index of the layer in the layer list.
|
<T extends Layer> |
getLayersOfType(java.lang.Class<T> ofType)
Replies an unmodifiable list of layers of a certain type.
|
static java.util.List<? extends javax.swing.JComponent> |
getMapNavigationComponents(MapView forMapView)
Adds the map navigation components to a
|
int |
getNumLayers()
Replies the number of layers managed by this map view
|
java.util.List<MapViewPaintable> |
getTemporaryLayers()
Gets a list of temporary layers.
|
java.util.List<Layer> |
getVisibleLayersInZOrder()
Creates a list of the visible layers in Z-Order, the layer with the lowest Z-Order
first, layer with the highest Z-Order last.
|
boolean |
hasLayer(Layer layer)
replies true if the list of layers managed by this map view contain layer
|
boolean |
hasLayers()
Replies true if there is at least one layer in this map view
|
boolean |
isActiveLayerDrawable()
Replies true if the active data layer (edit layer) is drawable.
|
boolean |
isActiveLayerVisible()
Replies true if the active data layer (edit layer) is visible.
|
boolean |
isVirtualNodesEnabled()
Checks if virtual nodes should be drawn.
|
void |
moveLayer(Layer layer,
int pos)
Moves the layer to the given new position.
|
private void |
onActiveEditLayerChanged(Layer oldActive,
OsmDataLayer oldEdit,
java.util.EnumSet<MapView.LayerListenerType> listenersToFire)
This is called whenever one of active layer/edit layer or both may have been changed,
|
private void |
onActiveLayerChanged(Layer old) |
private void |
onEditLayerChanged(OsmDataLayer oldEditLayer) |
void |
paint(java.awt.Graphics g)
Draw the component.
|
private void |
paintLayer(Layer layer,
java.awt.Graphics2D g,
Bounds box) |
void |
preferenceChanged(Preferences.PreferenceChangeEvent e)
Trigerred when a preference entry value changes.
|
boolean |
prepareToDraw()
Sets up the viewport to prepare for drawing the view.
|
void |
propertyChange(java.beans.PropertyChangeEvent evt) |
protected void |
refreshTitle()
Sets the title of the JOSM main window, adding a star if there are dirty layers.
|
void |
rememberLastPositionOnScreen()
Call this method to keep map position on screen during next repaint
|
static void |
removeEditLayerChangeListener(MapView.EditLayerChangeListener listener) |
void |
removeLayer(Layer layer)
Remove the layer from the mapview.
|
static void |
removeLayerChangeListener(MapView.LayerChangeListener listener)
Removes a layer change listener
|
void |
removeRepaintListener(MapView.RepaintListener l)
Removes a registered repaint listener.
|
boolean |
removeTemporaryLayer(MapViewPaintable mvp)
Removes a layer previously added as temporary layer.
|
void |
repaint(long tm,
int x,
int y,
int width,
int height) |
void |
setActiveLayer(Layer layer)
Sets the active layer to
layer . |
private java.util.EnumSet<MapView.LayerListenerType> |
setActiveLayer(Layer layer,
boolean setEditLayer)
Sets the active layer.
|
private java.util.EnumSet<MapView.LayerListenerType> |
setEditLayer(java.util.List<Layer> layersList)
Sets the active edit layer.
|
void |
setVirtualNodesEnabled(boolean enabled) |
void |
uploadDiscouragedChanged(OsmDataLayer layer,
boolean newValue)
Notifies that the "upload discouraged" (upload=no) state has changed.
|
addZoomChangeListener, fireZoomChanged, getAffineTransform, getAllNearest, getAllNearest, getAreaText, getAreaText, getCenter, getCursorManager, getDist100Pixel, getDist100Pixel, getDist100PixelText, getDistText, getDistText, getEastNorth, getLatLon, getLatLon, getLatLonBounds, getMaxProjectionBounds, getNearestNode, getNearestNode, getNearestNode, getNearestNodeOrWay, getNearestNodes, getNearestNodes, getNearestNodesOrWays, getNearestNodesOrWays, getNearestWay, getNearestWays, getNearestWays, getNearestWaySegment, getNearestWaySegment, getNearestWaySegment, getNearestWaySegments, getNearestWaySegments, getPoint, getPoint, getPoint, getPoint2D, getPoint2D, getPoint2D, getProjection, getProjectionBounds, getRealBounds, getScale, getViewID, hasZoomRedoEntries, hasZoomUndoEntries, helpTopic, perDist, project, project, removeZoomChangeListener, requestClearPoly, requestClearRect, requestPaintPoly, requestPaintRect, resetCursor, setNewCursor, setNewCursor, smoothScrollTo, smoothScrollTo, zoomNext, zoomPrevious, zoomTo, zoomTo, zoomTo, zoomTo, zoomTo, zoomTo, zoomTo, zoomTo, zoomToFactor, zoomToFactor, zoomToFactor
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getUIClassID, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, paramString, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update, updateUI
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getAccessibleContext, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
public boolean viewportFollowing
private static final java.util.concurrent.CopyOnWriteArrayList<MapView.LayerChangeListener> layerChangeListeners
private static final java.util.concurrent.CopyOnWriteArrayList<MapView.EditLayerChangeListener> editLayerChangeListeners
public transient PlayHeadMarker playHeadMarker
private transient Layer activeLayer
private transient OsmDataLayer editLayer
public java.awt.event.MouseEvent lastMEvent
private final transient java.util.Set<MapViewPaintable> temporaryLayers
private transient java.awt.image.BufferedImage nonChangedLayersBuffer
private transient java.awt.image.BufferedImage offscreenBuffer
private final transient java.util.List<Layer> nonChangedLayers
private transient Layer changedLayer
private int lastViewID
private boolean paintPreferencesChanged
private java.awt.Rectangle lastClipBounds
private java.awt.Dimension oldSize
private java.awt.Point oldLoc
private boolean virtualNodesEnabled
private final transient SelectionChangedListener repaintSelectionChangedListener
private final java.util.concurrent.CopyOnWriteArrayList<MapView.RepaintListener> repaintListeners
public MapView(javax.swing.JPanel contentPane, ViewportData viewportData)
MapView
.contentPane
- The content pane used to register shortcuts in its
InputMap
and ActionMap
viewportData
- the initial viewport of the map. Can be null, then
the viewport is derived from the layer data.public static void removeLayerChangeListener(MapView.LayerChangeListener listener)
listener
- the listener. Ignored if null or already registered.public static void removeEditLayerChangeListener(MapView.EditLayerChangeListener listener)
public static void addLayerChangeListener(MapView.LayerChangeListener listener)
listener
- the listener. Ignored if null or already registered.public static void addLayerChangeListener(MapView.LayerChangeListener listener, boolean initialFire)
listener
- the listener. Ignored if null or already registered.initialFire
- fire an active-layer-changed-event right after adding
the listener in case there is a layer present (should be)public static void addEditLayerChangeListener(MapView.EditLayerChangeListener listener, boolean initialFire)
listener
- the listener. Ignored if null or already registered.initialFire
- fire an edit-layer-changed-event right after adding
the listener in case there is an edit layer presentpublic static void addEditLayerChangeListener(MapView.EditLayerChangeListener listener)
listener
- the listener. Ignored if null or already registered.protected void fireActiveLayerChanged(Layer oldLayer, Layer newLayer)
MapView.LayerChangeListener.activeLayerChange(Layer, Layer)
method of all listeners.oldLayer
- The old layernewLayer
- The new active layer.protected void fireLayerAdded(Layer newLayer)
protected void fireLayerRemoved(Layer layer)
protected void fireEditLayerChanged(OsmDataLayer oldLayer, OsmDataLayer newLayer)
public static java.util.List<? extends javax.swing.JComponent> getMapNavigationComponents(MapView forMapView)
forMapView
- The map view to get the components for.public void rememberLastPositionOnScreen()
protected void addGpxLayer(GpxLayer layer)
Does not call fireLayerAdded(Layer)
.
layer
- the GPX layerpublic void addLayer(Layer layer)
layer
- The layer to addprotected DataSet getCurrentDataSet()
getCurrentDataSet
in class NavigatableComponent
public boolean isActiveLayerDrawable()
public boolean isActiveLayerVisible()
protected Layer determineNextActiveLayer(java.util.List<Layer> layersList)
OsmDataLayer
the first one
becomes activelayersList
- lit of layerspublic void removeLayer(Layer layer)
layer
- The layer to removeprivate void onEditLayerChanged(OsmDataLayer oldEditLayer)
public void setVirtualNodesEnabled(boolean enabled)
public boolean isVirtualNodesEnabled()
false
Rendering.render(DataSet, boolean, Bounds)
public void moveLayer(Layer layer, int pos)
layer
- The layer to movepos
- The new position of the layerpublic int getLayerPos(Layer layer)
layer
- The layer to search for.java.lang.IllegalArgumentException
- if that layer does not belong to this view.public java.util.List<Layer> getVisibleLayersInZOrder()
The active data layer is pulled above all adjacent data layers.
private void paintLayer(Layer layer, java.awt.Graphics2D g, Bounds box)
public void paint(java.awt.Graphics g)
paint
in class NavigatableComponent
public boolean prepareToDraw()
true
if the view can be drawn, false
otherwise.public java.util.Collection<Layer> getAllLayers()
public java.util.List<Layer> getAllLayersAsList()
public <T extends Layer> java.util.List<T> getLayersOfType(java.lang.Class<T> ofType)
List<WMSLayer> wmsLayers = getLayersOfType(WMSLayer.class);
T
- layer typeofType
- The layer type.public int getNumLayers()
public boolean hasLayers()
private java.util.EnumSet<MapView.LayerListenerType> setEditLayer(java.util.List<Layer> layersList)
layersList
- A list to select that layer from.onActiveEditLayerChanged(Layer, OsmDataLayer, EnumSet)
private OsmDataLayer findNewEditLayer(java.util.List<Layer> layersList)
public void setActiveLayer(Layer layer)
layer
. If layer
is an instance
of OsmDataLayer
also sets editLayer
to layer
.layer
- the layer to be activate; must be one of the layers in the list of layersjava.lang.IllegalArgumentException
- if layer is not in the lis of layersprivate java.util.EnumSet<MapView.LayerListenerType> setActiveLayer(Layer layer, boolean setEditLayer)
layer
- The layer to be active.setEditLayer
- if this is true
, the edit layer is also set.onActiveEditLayerChanged(Layer, OsmDataLayer, EnumSet)
public Layer getActiveLayer()
private void onActiveEditLayerChanged(Layer oldActive, OsmDataLayer oldEdit, java.util.EnumSet<MapView.LayerListenerType> listenersToFire)
oldActive
- The old active layeroldEdit
- The old edit layer.listenersToFire
- A mask of listeners to fire using MapView.LayerListenerType
sprivate void onActiveLayerChanged(Layer old)
public OsmDataLayer getEditLayer()
public boolean hasLayer(Layer layer)
layer
- the layerpublic boolean addTemporaryLayer(MapViewPaintable mvp)
A temporary layer is a layer that is painted above all normal layers. Layers are painted in the order they are added.
mvp
- The layer to paint.true
if the layer was added.public boolean removeTemporaryLayer(MapViewPaintable mvp)
mvp
- The layer to remove.true
if that layer was removed.public java.util.List<MapViewPaintable> getTemporaryLayers()
public void propertyChange(java.beans.PropertyChangeEvent evt)
propertyChange
in interface java.beans.PropertyChangeListener
protected void refreshTitle()
Main.parent
public void preferenceChanged(Preferences.PreferenceChangeEvent e)
Preferences.PreferenceChangedListener
preferenceChanged
in interface Preferences.PreferenceChangedListener
e
- the preference change eventpublic void destroy()
public void uploadDiscouragedChanged(OsmDataLayer layer, boolean newValue)
OsmDataLayer.LayerStateChangeListener
uploadDiscouragedChanged
in interface OsmDataLayer.LayerStateChangeListener
layer
- The layer that has been modifiednewValue
- The new value of the statepublic java.lang.String getLayerInformationForSourceTag()
source
changeset tag.public void addRepaintListener(MapView.RepaintListener l)
l
- The listener.public void removeRepaintListener(MapView.RepaintListener l)
l
- The listener.public void repaint(long tm, int x, int y, int width, int height)
repaint
in class javax.swing.JComponent