org.openstreetmap.josm.gui
Class MapView

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by org.openstreetmap.josm.gui.NavigatableComponent
                  extended by org.openstreetmap.josm.gui.MapView
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.beans.PropertyChangeListener, java.io.Serializable, java.util.EventListener, Preferences.PreferenceChangedListener, Helpful

public class MapView
extends NavigatableComponent
implements java.beans.PropertyChangeListener, Preferences.PreferenceChangedListener

This is a component used in the 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.

See Also:
Serialized Form

Nested Class Summary
static interface MapView.EditLayerChangeListener
           
static interface MapView.LayerChangeListener
          Interface to notify listeners of a layer change.
 
Nested classes/interfaces inherited from class org.openstreetmap.josm.gui.NavigatableComponent
NavigatableComponent.SystemOfMeasurement, NavigatableComponent.ZoomChangeListener
 
Nested classes/interfaces inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
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  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.LinkedList<MapViewPaintable> temporaryLayers
           
 boolean viewportFollowing
           
private  boolean virtualNodesEnabled
           
 
Fields inherited from class org.openstreetmap.josm.gui.NavigatableComponent
center, CHINESE_SOM, IMPERIAL_SOM, METRIC_SOM, PROP_SNAP_DISTANCE, PROPNAME_CENTER, PROPNAME_SCALE, SYSTEMS_OF_MEASUREMENT
 
Fields inherited from class javax.swing.JComponent
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
MapView(javax.swing.JPanel contentPane)
          Constructs a new MapView.
 
Method Summary
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
 int getLayerPos(Layer layer)
           
<T> java.util.List<T>
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()
           
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)
           
 boolean zoomToDataSetBoundingBox(DataSet ds)
          Tries to zoom to the download boundingbox[es] of the current edit layer (aka OsmDataLayer).
 
Methods inherited from class org.openstreetmap.josm.gui.NavigatableComponent
addZoomChangeListener, asColl, fireZoomChanged, getAffineTransform, getAllNearest, getAllNearest, getCenter, getDist100Pixel, getDist100PixelText, getDistText, getEastNorth, getLatLon, getLatLon, getLatLonBounds, getMaxProjectionBounds, getNearestNode, getNearestNode, getNearestNodeOrWay, getNearestNodes, getNearestNodes, getNearestNodesOrWays, getNearestNodesOrWays, getNearestWay, getNearestWays, getNearestWays, getNearestWaySegment, getNearestWaySegment, getNearestWaySegments, getNearestWaySegments, getPoint, getPoint, getPoint, getPoint2D, getPoint2D, getPoint2D, getProjection, getProjectionBounds, getRealBounds, getSystemOfMeasurement, getViewID, hasZoomRedoEntries, hasZoomUndoEntries, helpTopic, perDist, project, project, removeZoomChangeListener, resetCursor, setNewCursor, setNewCursor, smoothScrollTo, smoothScrollTo, zoomNext, zoomPrevious, zoomTo, zoomTo, zoomTo, zoomTo, zoomTo, zoomToFactor, zoomToFactor, zoomToFactor
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getAccessibleContext, 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, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, 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
 
Methods inherited from class java.awt.Container
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
 
Methods inherited from class java.awt.Component
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, 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, hide, 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
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

viewportFollowing

public boolean viewportFollowing

layerChangeListeners

private static final java.util.concurrent.CopyOnWriteArrayList<MapView.LayerChangeListener> layerChangeListeners
the layer listeners


editLayerChangeListeners

private static final java.util.concurrent.CopyOnWriteArrayList<MapView.EditLayerChangeListener> editLayerChangeListeners

layers

private final java.util.List<Layer> layers
A list of all layers currently loaded.


playHeadMarker

public PlayHeadMarker playHeadMarker
The play head marker: there is only one of these so it isn't in any specific layer


activeLayer

private Layer activeLayer
The layer from the layers list that is currently active.


editLayer

private OsmDataLayer editLayer

lastMEvent

public java.awt.event.MouseEvent lastMEvent
The last event performed by mouse.


temporaryLayers

private java.util.LinkedList<MapViewPaintable> temporaryLayers

nonChangedLayersBuffer

private java.awt.image.BufferedImage nonChangedLayersBuffer

offscreenBuffer

private java.awt.image.BufferedImage offscreenBuffer

nonChangedLayers

private final java.util.List<Layer> nonChangedLayers

changedLayer

private Layer changedLayer

lastViewID

private int lastViewID

paintPreferencesChanged

private boolean paintPreferencesChanged

lastClipBounds

private java.awt.Rectangle lastClipBounds

mapMover

private MapMover mapMover

virtualNodesEnabled

private boolean virtualNodesEnabled

repaintSelectionChangedListener

private SelectionChangedListener repaintSelectionChangedListener
Constructor Detail

MapView

public MapView(javax.swing.JPanel contentPane)
Constructs a new MapView.

Parameters:
contentPane - The content pane used to register shortcuts in its InputMap and ActionMap
Method Detail

removeLayerChangeListener

public static void removeLayerChangeListener(MapView.LayerChangeListener listener)
Removes a layer change listener

Parameters:
listener - the listener. Ignored if null or already registered.

removeEditLayerChangeListener

public static void removeEditLayerChangeListener(MapView.EditLayerChangeListener listener)

addLayerChangeListener

public static void addLayerChangeListener(MapView.LayerChangeListener listener)
Adds a layer change listener

Parameters:
listener - the listener. Ignored if null or already registered.

addEditLayerChangeListener

public static void addEditLayerChangeListener(MapView.EditLayerChangeListener listener,
                                              boolean initialFire)
Adds an edit layer change listener

Parameters:
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 present

addEditLayerChangeListener

public static void addEditLayerChangeListener(MapView.EditLayerChangeListener listener)
Adds an edit layer change listener

Parameters:
listener - the listener. Ignored if null or already registered.

fireActiveLayerChanged

protected static void fireActiveLayerChanged(Layer oldLayer,
                                             Layer newLayer)

fireLayerAdded

protected static void fireLayerAdded(Layer newLayer)

fireLayerRemoved

protected static void fireLayerRemoved(Layer layer)

fireEditLayerChanged

protected static void fireEditLayerChanged(OsmDataLayer oldLayer,
                                           OsmDataLayer newLayer)

addGpxLayer

protected void addGpxLayer(GpxLayer layer)
Adds a GPX layer. A GPX layer is added below the lowest data layer.

Parameters:
layer - the GPX layer

addLayer

public void addLayer(Layer layer)
Add a layer to the current MapView. The layer will be added at topmost position.

Parameters:
layer - The layer to add

getCurrentDataSet

protected DataSet getCurrentDataSet()
Overrides:
getCurrentDataSet in class NavigatableComponent

isActiveLayerDrawable

public boolean isActiveLayerDrawable()
Replies true if the active layer is drawable.

Returns:
true if the active layer is drawable, false otherwise

isActiveLayerVisible

public boolean isActiveLayerVisible()
Replies true if the active layer is visible.

Returns:
true if the active layer is visible, false otherwise

determineNextActiveLayer

protected Layer determineNextActiveLayer(java.util.List<Layer> layersList)
Determines the next active data layer according to the following rules:

Returns:
the next active data layer

removeLayer

public void removeLayer(Layer layer)
Remove the layer from the mapview. If the layer was in the list before, an LayerChange event is fired.

Parameters:
layer - The layer to remove

setVirtualNodesEnabled

public void setVirtualNodesEnabled(boolean enabled)

isVirtualNodesEnabled

public boolean isVirtualNodesEnabled()

moveLayer

public void moveLayer(Layer layer,
                      int pos)
Moves the layer to the given new position. No event is fired, but repaints according to the new Z-Order of the layers.

Parameters:
layer - The layer to move
pos - The new position of the layer

getLayerPos

public int getLayerPos(Layer layer)

getVisibleLayersInZOrder

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.

Returns:
a list of the visible in Z-Order, the layer with the lowest Z-Order first, layer with the highest Z-Order last.

paintLayer

private void paintLayer(Layer layer,
                        java.awt.Graphics2D g,
                        Bounds box)

paint

public void paint(java.awt.Graphics g)
Draw the component.

Overrides:
paint in class javax.swing.JComponent

recalculateCenterScale

public void recalculateCenterScale(BoundingXYVisitor box)
Set the new dimension to the view.


getAllLayers

public java.util.Collection<Layer> getAllLayers()
Returns:
An unmodifiable collection of all layers

getAllLayersAsList

public java.util.List<Layer> getAllLayersAsList()
Returns:
An unmodifiable ordered list of all layers

getLayersOfType

public <T> java.util.List<T> getLayersOfType(java.lang.Class<T> ofType)
Replies an unmodifiable list of layers of a certain type. Example:
     List wmsLayers = getLayersOfType(WMSLayer.class);
 

Returns:
an unmodifiable list of layers of a certain type.

getNumLayers

public int getNumLayers()
Replies the number of layers managed by this mav view

Returns:
the number of layers managed by this mav view

hasLayers

public boolean hasLayers()
Replies true if there is at least one layer in this map view

Returns:
true if there is at least one layer in this map view

setEditLayer

private void setEditLayer(java.util.List<Layer> layersList)

setActiveLayer

public void setActiveLayer(Layer layer)
Sets the active layer to layer. If layer is an instance of OsmDataLayer also sets editLayer to layer.

Parameters:
layer - the layer to be activate; must be one of the layers in the list of layers
Throws:
java.lang.IllegalArgumentException - thrown if layer is not in the lis of layers

setActiveLayer

private void setActiveLayer(Layer layer,
                            boolean setEditLayer)

getActiveLayer

public Layer getActiveLayer()
Replies the currently active layer

Returns:
the currently active layer (may be null)

getEditLayer

public OsmDataLayer getEditLayer()
Replies the current edit layer, if any

Returns:
the current edit layer. May be null.

hasLayer

public boolean hasLayer(Layer layer)
replies true if the list of layers managed by this map view contain layer

Parameters:
layer - the layer
Returns:
true if the list of layers managed by this map view contain layer

zoomToDataSetBoundingBox

public boolean zoomToDataSetBoundingBox(DataSet ds)
Tries to zoom to the download boundingbox[es] of the current edit layer (aka OsmDataLayer). If the edit layer has multiple download bounding boxes it zooms to a large virtual bounding box containing all smaller ones.

Returns:
true if a zoom operation has been performed

addTemporaryLayer

public boolean addTemporaryLayer(MapViewPaintable mvp)

removeTemporaryLayer

public boolean removeTemporaryLayer(MapViewPaintable mvp)

propertyChange

public void propertyChange(java.beans.PropertyChangeEvent evt)
Specified by:
propertyChange in interface java.beans.PropertyChangeListener

refreshTitle

protected void refreshTitle()

preferenceChanged

public void preferenceChanged(Preferences.PreferenceChangeEvent e)
Specified by:
preferenceChanged in interface Preferences.PreferenceChangedListener

destroy

public void destroy()


JOSM