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, org.openstreetmap.josm.data.Preferences.PreferenceChangedListener, org.openstreetmap.josm.gui.help.Helpful

public class MapView
extends NavigatableComponent
implements java.beans.PropertyChangeListener, org.openstreetmap.josm.data.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 hold 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.

Author:
imi
See Also:
Serialized Form

Nested Class Summary
static interface MapView.EditLayerChangeListener
           
static interface MapView.LayerChangeListener
          Interface to notify listeners of the change of the active layer.
 
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
 java.awt.event.MouseEvent lastMEvent
          The last event performed by mouse.
 org.openstreetmap.josm.gui.layer.markerlayer.PlayHeadMarker playHeadMarker
          The play head marker: there is only one of these so it isn't in any specific layer
 
Fields inherited from class org.openstreetmap.josm.gui.NavigatableComponent
center, CHINESE_SOM, IMPERIAL_SOM, METRIC_SOM, snapDistance, snapDistanceSq, 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)
           
 
Method Summary
static void addEditLayerChangeListener(MapView.EditLayerChangeListener listener)
           
static void addEditLayerChangeListener(MapView.EditLayerChangeListener listener, boolean initialFire)
          Adds a edit layer change listener
protected  void addGpxLayer(org.openstreetmap.josm.gui.layer.GpxLayer layer)
          Adds a GPX layer.
 void addLayer(org.openstreetmap.josm.gui.layer.Layer layer)
          Add a layer to the current MapView.
static void addLayerChangeListener(MapView.LayerChangeListener listener)
          Adds a layer change listener
 boolean addTemporaryLayer(org.openstreetmap.josm.gui.layer.MapViewPaintable mvp)
           
 void destroy()
           
protected  org.openstreetmap.josm.gui.layer.Layer determineNextActiveLayer(java.util.List<org.openstreetmap.josm.gui.layer.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(org.openstreetmap.josm.gui.layer.Layer oldLayer, org.openstreetmap.josm.gui.layer.Layer newLayer)
           
protected static void fireEditLayerChanged(org.openstreetmap.josm.gui.layer.OsmDataLayer oldLayer, org.openstreetmap.josm.gui.layer.OsmDataLayer newLayer)
           
protected static void fireLayerAdded(org.openstreetmap.josm.gui.layer.Layer newLayer)
           
protected static void fireLayerRemoved(org.openstreetmap.josm.gui.layer.Layer layer)
           
 org.openstreetmap.josm.gui.layer.Layer getActiveLayer()
          Replies the currently active layer
 java.util.Collection<org.openstreetmap.josm.gui.layer.Layer> getAllLayers()
           
 java.util.List<org.openstreetmap.josm.gui.layer.Layer> getAllLayersAsList()
           
protected  org.openstreetmap.josm.data.osm.DataSet getCurrentDataSet()
           
 org.openstreetmap.josm.gui.layer.OsmDataLayer getEditLayer()
          Replies the current edit layer, if any
 int getLayerPos(org.openstreetmap.josm.gui.layer.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<org.openstreetmap.josm.gui.layer.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(org.openstreetmap.josm.gui.layer.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(org.openstreetmap.josm.gui.layer.Layer layer, int pos)
          Moves the layer to the given new position.
 void paint(java.awt.Graphics g)
          Draw the component.
 void preferenceChanged(org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent e)
           
 void propertyChange(java.beans.PropertyChangeEvent evt)
           
 void recalculateCenterScale(org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor box)
          Set the new dimension to the view.
protected  void refreshTitle()
           
static void removeEditLayerChangeListener(MapView.EditLayerChangeListener listener)
           
 void removeLayer(org.openstreetmap.josm.gui.layer.Layer layer)
          Remove the layer from the mapview.
static void removeLayerChangeListener(MapView.LayerChangeListener listener)
          Removes a layer change listener
 boolean removeTemporaryLayer(org.openstreetmap.josm.gui.layer.MapViewPaintable mvp)
           
 void setActiveLayer(org.openstreetmap.josm.gui.layer.Layer layer)
          Sets the active layer to layer.
 void setVirtualNodesEnabled(boolean enabled)
           
 boolean zoomToDataSetBoundingBox(org.openstreetmap.josm.data.osm.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, fireZoomChanged, getAllNearest, getCenter, getDist100Pixel, getDist100PixelText, getDistText, getEastNorth, getLatLon, getLatLonBounds, getMaxProjectionBounds, getNearest, getNearestCollection, getNearestNode, getNearestNode, getNearestNodes, getNearestNodes, getNearestWay, getNearestWay, getNearestWaySegment, getNearestWaySegment, getNearestWaySegments, getPoint, getPoint, getPoint, getProjection, getProjectionBounds, getRealBounds, getSystemOfMeasurement, getViewID, hasZoomRedoEntries, hasZoomUndoEntries, helpTopic, removeZoomChangeListener, zoomNext, zoomPrevious, 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

playHeadMarker

public org.openstreetmap.josm.gui.layer.markerlayer.PlayHeadMarker playHeadMarker
The play head marker: there is only one of these so it isn't in any specific layer


lastMEvent

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

Constructor Detail

MapView

public MapView(javax.swing.JPanel contentPane)
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 a 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.

addEditLayerChangeListener

public static void addEditLayerChangeListener(MapView.EditLayerChangeListener listener)

fireActiveLayerChanged

protected static void fireActiveLayerChanged(org.openstreetmap.josm.gui.layer.Layer oldLayer,
                                             org.openstreetmap.josm.gui.layer.Layer newLayer)

fireLayerAdded

protected static void fireLayerAdded(org.openstreetmap.josm.gui.layer.Layer newLayer)

fireLayerRemoved

protected static void fireLayerRemoved(org.openstreetmap.josm.gui.layer.Layer layer)

fireEditLayerChanged

protected static void fireEditLayerChanged(org.openstreetmap.josm.gui.layer.OsmDataLayer oldLayer,
                                           org.openstreetmap.josm.gui.layer.OsmDataLayer newLayer)

addGpxLayer

protected void addGpxLayer(org.openstreetmap.josm.gui.layer.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(org.openstreetmap.josm.gui.layer.Layer layer)
Add a layer to the current MapView. The layer will be added at topmost position.


getCurrentDataSet

protected org.openstreetmap.josm.data.osm.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 org.openstreetmap.josm.gui.layer.Layer determineNextActiveLayer(java.util.List<org.openstreetmap.josm.gui.layer.Layer> layersList)
Determines the next active data layer according to the following rules:

Returns:
the next active data layer

removeLayer

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


setVirtualNodesEnabled

public void setVirtualNodesEnabled(boolean enabled)

isVirtualNodesEnabled

public boolean isVirtualNodesEnabled()

moveLayer

public void moveLayer(org.openstreetmap.josm.gui.layer.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(org.openstreetmap.josm.gui.layer.Layer layer)

getVisibleLayersInZOrder

protected java.util.List<org.openstreetmap.josm.gui.layer.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.

paint

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

Overrides:
paint in class javax.swing.JComponent

recalculateCenterScale

public void recalculateCenterScale(org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor box)
Set the new dimension to the view.


getAllLayers

public java.util.Collection<org.openstreetmap.josm.gui.layer.Layer> getAllLayers()
Returns:
An unmodifiable collection of all layers

getAllLayersAsList

public java.util.List<org.openstreetmap.josm.gui.layer.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

setActiveLayer

public void setActiveLayer(org.openstreetmap.josm.gui.layer.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

getActiveLayer

public org.openstreetmap.josm.gui.layer.Layer getActiveLayer()
Replies the currently active layer

Returns:
the currently active layer (may be null)

getEditLayer

public org.openstreetmap.josm.gui.layer.OsmDataLayer getEditLayer()
Replies the current edit layer, if any

Returns:
the current edit layer. May be null.

hasLayer

public boolean hasLayer(org.openstreetmap.josm.gui.layer.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(org.openstreetmap.josm.data.osm.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(org.openstreetmap.josm.gui.layer.MapViewPaintable mvp)

removeTemporaryLayer

public boolean removeTemporaryLayer(org.openstreetmap.josm.gui.layer.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(org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent e)
Specified by:
preferenceChanged in interface org.openstreetmap.josm.data.Preferences.PreferenceChangedListener

destroy

public void destroy()