org.openstreetmap.josm.actions.mapmode
Class DeleteAction

java.lang.Object
  extended by javax.swing.AbstractAction
      extended by org.openstreetmap.josm.actions.JosmAction
          extended by org.openstreetmap.josm.actions.mapmode.MapMode
              extended by org.openstreetmap.josm.actions.mapmode.DeleteAction
All Implemented Interfaces:
java.awt.event.ActionListener, java.awt.event.AWTEventListener, java.awt.event.MouseListener, java.awt.event.MouseMotionListener, java.io.Serializable, java.lang.Cloneable, java.util.EventListener, javax.swing.Action, Destroyable

public class DeleteAction
extends MapMode
implements java.awt.event.AWTEventListener

A map mode that enables the user to delete nodes and other objects. The user can click on an object, which gets deleted if possible. When Ctrl is pressed when releasing the button, the objects and all its references are deleted. If the user did not press Ctrl and the object has any references, the user is informed and nothing is deleted. If the user enters the mapmode and any object is selected, all selected objects are deleted, if possible.

See Also:
Serialized Form

Nested Class Summary
private static class DeleteAction.DeleteMode
           
private static class DeleteAction.DeleteParameters
           
 
Field Summary
private  boolean drawTargetHighlight
           
private  java.awt.event.MouseEvent oldEvent
           
private  WaySegment oldHighlightedWaySegment
           
private  java.util.Set<OsmPrimitive> oldHighlights
          elements that have been highlighted in the previous iteration.
 
Fields inherited from class org.openstreetmap.josm.actions.mapmode.MapMode
alt, ctrl, cursor, shift
 
Fields inherited from class org.openstreetmap.josm.actions.JosmAction
sc
 
Fields inherited from class javax.swing.AbstractAction
changeSupport, enabled
 
Fields inherited from interface javax.swing.Action
ACCELERATOR_KEY, ACTION_COMMAND_KEY, DEFAULT, DISPLAYED_MNEMONIC_INDEX_KEY, LARGE_ICON_KEY, LONG_DESCRIPTION, MNEMONIC_KEY, NAME, SELECTED_KEY, SHORT_DESCRIPTION, SMALL_ICON
 
Constructor Summary
DeleteAction(MapFrame mapFrame)
          Construct a new DeleteAction.
 
Method Summary
 void actionPerformed(java.awt.event.ActionEvent e)
          Call selectMapMode(this) on the parent mapFrame.
private  void addHighlighting(java.awt.event.MouseEvent e, int modifiers)
          handles everything related to highlighting primitives and way segments for the given pointer position (via MouseEvent) and modifiers.
private  Command buildDeleteCommands(java.awt.event.MouseEvent e, int modifiers, boolean silent)
          This function takes any mouse event argument and builds the list of elements that should be deleted but does not actually delete them.
static void deleteRelation(OsmDataLayer layer, Relation toDelete)
          Deletes the relation in the context of the given layer.
static void doActionPerformed(java.awt.event.ActionEvent e)
           
 void enterMode()
           
 void eventDispatched(java.awt.AWTEvent e)
          This is required to update the cursors when ctrl/shift/alt is pressed
 void exitMode()
           
private  DeleteAction.DeleteParameters getDeleteParameters(java.awt.event.MouseEvent e, int modifiers)
           
 java.lang.String getModeHelpText()
           
private  void giveUserFeedback(java.awt.event.MouseEvent e)
          Gives the user feedback for the action he/she is about to do.
private  void giveUserFeedback(java.awt.event.MouseEvent e, int modifiers)
          Gives the user feedback for the action he/she is about to do.
 boolean layerIsSupported(Layer l)
           
 void mouseDragged(java.awt.event.MouseEvent e)
           
 void mouseMoved(java.awt.event.MouseEvent e)
          Listen to mouse move to be able to update the cursor (and highlights)
 void mouseReleased(java.awt.event.MouseEvent e)
          If user clicked with the left button, delete the nearest object.
private  void removeHighlighting()
          removes any highlighting that may have been set beforehand.
private  void repaintIfRequired(java.util.Set<OsmPrimitive> newHighlights, WaySegment newHighlightedWaySegment)
           
private  void updateCursor(java.awt.event.MouseEvent e, int modifiers)
          This function handles all work related to updating the cursor and highlights
protected  void updateEnabledState()
          Override in subclasses to update the enabled state of the action when something in the JOSM state changes, i.e.
 
Methods inherited from class org.openstreetmap.josm.actions.mapmode.MapMode
mouseClicked, mouseEntered, mouseExited, mousePressed, updateKeyModifiers, updateKeyModifiers, updateKeyModifiers, updateStatusLine
 
Methods inherited from class org.openstreetmap.josm.actions.JosmAction
destroy, getCurrentDataSet, getEditLayer, getShortcut, initEnabledState, installAdapters, setTooltip, updateEnabledState
 
Methods inherited from class javax.swing.AbstractAction
addPropertyChangeListener, clone, firePropertyChange, getKeys, getPropertyChangeListeners, getValue, isEnabled, putValue, removePropertyChangeListener, setEnabled
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

oldEvent

private java.awt.event.MouseEvent oldEvent

oldHighlights

private java.util.Set<OsmPrimitive> oldHighlights
elements that have been highlighted in the previous iteration. Used to remove the highlight from them again as otherwise the whole data set would have to be checked.


oldHighlightedWaySegment

private WaySegment oldHighlightedWaySegment

drawTargetHighlight

private boolean drawTargetHighlight
Constructor Detail

DeleteAction

public DeleteAction(MapFrame mapFrame)
Construct a new DeleteAction. Mnemonic is the delete - key.

Parameters:
mapFrame - The frame this action belongs to.
Method Detail

enterMode

public void enterMode()
Overrides:
enterMode in class MapMode

exitMode

public void exitMode()
Overrides:
exitMode in class MapMode

actionPerformed

public void actionPerformed(java.awt.event.ActionEvent e)
Description copied from class: MapMode
Call selectMapMode(this) on the parent mapFrame.

Specified by:
actionPerformed in interface java.awt.event.ActionListener
Overrides:
actionPerformed in class MapMode

doActionPerformed

public static void doActionPerformed(java.awt.event.ActionEvent e)

mouseDragged

public void mouseDragged(java.awt.event.MouseEvent e)
Specified by:
mouseDragged in interface java.awt.event.MouseMotionListener
Overrides:
mouseDragged in class MapMode

mouseMoved

public void mouseMoved(java.awt.event.MouseEvent e)
Listen to mouse move to be able to update the cursor (and highlights)

Specified by:
mouseMoved in interface java.awt.event.MouseMotionListener
Overrides:
mouseMoved in class MapMode
Parameters:
e - The mouse event that has been captured

removeHighlighting

private void removeHighlighting()
removes any highlighting that may have been set beforehand.


addHighlighting

private void addHighlighting(java.awt.event.MouseEvent e,
                             int modifiers)
handles everything related to highlighting primitives and way segments for the given pointer position (via MouseEvent) and modifiers.

Parameters:
e -
modifiers -

repaintIfRequired

private void repaintIfRequired(java.util.Set<OsmPrimitive> newHighlights,
                               WaySegment newHighlightedWaySegment)

updateCursor

private void updateCursor(java.awt.event.MouseEvent e,
                          int modifiers)
This function handles all work related to updating the cursor and highlights

Parameters:
e -
modifiers -

giveUserFeedback

private void giveUserFeedback(java.awt.event.MouseEvent e,
                              int modifiers)
Gives the user feedback for the action he/she is about to do. Currently calls the cursor and target highlighting routines. Allows for modifiers not taken from the given mouse event. Normally the mouse event also contains the modifiers. However, when the mouse is not moved and only modifier keys are pressed, no mouse event occurs. We can use AWTEvent to catch those but still lack a proper mouseevent. Instead we copy the previous event and only update the modifiers.


giveUserFeedback

private void giveUserFeedback(java.awt.event.MouseEvent e)
Gives the user feedback for the action he/she is about to do. Currently calls the cursor and target highlighting routines. Extracts modifiers from mouse event.


mouseReleased

public void mouseReleased(java.awt.event.MouseEvent e)
If user clicked with the left button, delete the nearest object. position.

Specified by:
mouseReleased in interface java.awt.event.MouseListener
Overrides:
mouseReleased in class MapMode

getModeHelpText

public java.lang.String getModeHelpText()
Overrides:
getModeHelpText in class MapMode

layerIsSupported

public boolean layerIsSupported(Layer l)
Overrides:
layerIsSupported in class MapMode

updateEnabledState

protected void updateEnabledState()
Description copied from class: JosmAction
Override in subclasses to update the enabled state of the action when something in the JOSM state changes, i.e. when a layer is removed or added. See JosmAction.updateEnabledState(Collection) to respond to changes in the collection of selected primitives. Default behavior is empty.

Overrides:
updateEnabledState in class JosmAction
See Also:
JosmAction.updateEnabledState(Collection), JosmAction.initEnabledState()

deleteRelation

public static void deleteRelation(OsmDataLayer layer,
                                  Relation toDelete)
Deletes the relation in the context of the given layer.

Parameters:
layer - the layer in whose context the relation is deleted. Must not be null.
toDelete - the relation to be deleted. Must not be null.
Throws:
java.lang.IllegalArgumentException - thrown if layer is null
java.lang.IllegalArgumentException - thrown if toDelete is nul

getDeleteParameters

private DeleteAction.DeleteParameters getDeleteParameters(java.awt.event.MouseEvent e,
                                                          int modifiers)

buildDeleteCommands

private Command buildDeleteCommands(java.awt.event.MouseEvent e,
                                    int modifiers,
                                    boolean silent)
This function takes any mouse event argument and builds the list of elements that should be deleted but does not actually delete them.

Parameters:
e - MouseEvent from which modifiers and position are taken
modifiers - For explanation: @see updateCursor
silet - Set to true if the user should not be bugged with additional dialogs
Returns:

eventDispatched

public void eventDispatched(java.awt.AWTEvent e)
This is required to update the cursors when ctrl/shift/alt is pressed

Specified by:
eventDispatched in interface java.awt.event.AWTEventListener


JOSM