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 |
static interface |
MapView.LayerChangeListener
Interface to notify listeners of a layer change.
|
NavigatableComponent.SoMChangeListener, 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 |
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 SelectionChangedListener |
repaintSelectionChangedListener |
private java.util.List<MapViewPaintable> |
temporaryLayers |
boolean |
viewportFollowing |
private boolean |
virtualNodesEnabled |
center, 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
|
boolean |
addTemporaryLayer(MapViewPaintable mvp) |
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
|
protected static void |
fireActiveLayerChanged(Layer oldLayer,
Layer newLayer) |
protected static void |
fireEditLayerChanged(OsmDataLayer oldLayer,
OsmDataLayer newLayer) |
protected static void |
fireLayerAdded(Layer newLayer) |
protected static 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) |
<T extends Layer> |
getLayersOfType(java.lang.Class<T> ofType)
Replies an unmodifiable list of layers of a certain type.
|
int |
getNumLayers()
Replies the number of layers managed by this mav view
|
protected 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 layer is drawable.
|
boolean |
isActiveLayerVisible()
Replies true if the active layer is visible.
|
boolean |
isVirtualNodesEnabled() |
void |
moveLayer(Layer layer,
int pos)
Moves the layer to the given new position.
|
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) |
void |
propertyChange(java.beans.PropertyChangeEvent evt) |
void |
recalculateCenterScale(BoundingXYVisitor box)
Set the new dimension to the view.
|
protected void |
refreshTitle() |
void |
rememberLastPositionOnScreen() |
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
|
boolean |
removeTemporaryLayer(MapViewPaintable mvp) |
void |
setActiveLayer(Layer layer)
Sets the active layer to
layer . |
private void |
setActiveLayer(Layer layer,
boolean setEditLayer) |
private void |
setEditLayer(java.util.List<Layer> layersList) |
void |
setVirtualNodesEnabled(boolean enabled) |
void |
uploadDiscouragedChanged(OsmDataLayer layer,
boolean newValue)
Notifies that the "upload discouraged" (upload=no) state has changed.
|
boolean |
zoomToDataSetBoundingBox(DataSet ds)
Tries to zoom to the download boundingbox[es] of the current edit layer
(aka
OsmDataLayer ). |
addSoMChangeListener, addZoomChangeListener, fireSoMChanged, fireZoomChanged, getAffineTransform, getAllNearest, getAllNearest, getAreaText, getAreaText, getCenter, 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, getSystemOfMeasurement, getViewID, hasZoomRedoEntries, hasZoomUndoEntries, helpTopic, perDist, project, project, removeSoMChangeListener, removeZoomChangeListener, requestClearPoly, requestClearRect, requestPaintPoly, requestPaintRect, resetCursor, setNewCursor, setNewCursor, setSystemOfMeasurement, smoothScrollTo, smoothScrollTo, zoomNext, zoomPrevious, 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, 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 PlayHeadMarker playHeadMarker
private Layer activeLayer
private OsmDataLayer editLayer
public java.awt.event.MouseEvent lastMEvent
private final java.util.List<MapViewPaintable> temporaryLayers
private java.awt.image.BufferedImage nonChangedLayersBuffer
private java.awt.image.BufferedImage offscreenBuffer
private final java.util.List<Layer> nonChangedLayers
private 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 SelectionChangedListener repaintSelectionChangedListener
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 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 static void fireActiveLayerChanged(Layer oldLayer, Layer newLayer)
protected static void fireLayerAdded(Layer newLayer)
protected static void fireLayerRemoved(Layer layer)
protected static void fireEditLayerChanged(OsmDataLayer oldLayer, OsmDataLayer newLayer)
public void rememberLastPositionOnScreen()
protected void addGpxLayer(GpxLayer 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 activepublic void removeLayer(Layer layer)
layer
- The layer to removepublic void setVirtualNodesEnabled(boolean enabled)
public boolean isVirtualNodesEnabled()
public void moveLayer(Layer layer, int pos)
layer
- The layer to movepos
- The new position of the layerpublic int getLayerPos(Layer layer)
protected java.util.List<Layer> getVisibleLayersInZOrder()
private void paintLayer(Layer layer, java.awt.Graphics2D g, Bounds box)
public void paint(java.awt.Graphics g)
paint
in class NavigatableComponent
public void recalculateCenterScale(BoundingXYVisitor box)
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);
public int getNumLayers()
public boolean hasLayers()
private void setEditLayer(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
- thrown if layer is not in the lis of layersprivate void setActiveLayer(Layer layer, boolean setEditLayer)
public Layer getActiveLayer()
public OsmDataLayer getEditLayer()
public boolean hasLayer(Layer layer)
layer
- the layerpublic boolean zoomToDataSetBoundingBox(DataSet ds)
OsmDataLayer
). If the edit layer has multiple download bounding
boxes it zooms to a large virtual bounding box containing all smaller ones.true
if a zoom operation has been performedpublic boolean addTemporaryLayer(MapViewPaintable mvp)
public boolean removeTemporaryLayer(MapViewPaintable mvp)
public void propertyChange(java.beans.PropertyChangeEvent evt)
propertyChange
in interface java.beans.PropertyChangeListener
protected void refreshTitle()
public void preferenceChanged(Preferences.PreferenceChangeEvent e)
preferenceChanged
in interface Preferences.PreferenceChangedListener
public 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.