com.bbn.openmap.layer.editor
Class DrawingEditorTool

java.lang.Object
  extended by com.bbn.openmap.omGraphics.event.StandardMapMouseInterpreter
      extended by com.bbn.openmap.layer.editor.AbstractEditorTool
          extended by com.bbn.openmap.layer.editor.DrawingEditorTool
All Implemented Interfaces:
MapMouseListener, EditorTool, LightMapHandlerChild, MapMouseInterpreter, PropertyConsumer, java.awt.event.ActionListener, java.beans.PropertyChangeListener, java.util.EventListener

public class DrawingEditorTool
extends AbstractEditorTool
implements java.awt.event.ActionListener, java.beans.PropertyChangeListener, PropertyConsumer

The DrawingEditorTool is a EditorTool for the EditorLayer that will use a custom OMDrawingTool to create OMGraphics as needed by the EditorTool. This is a class that lets you define which EditToolLoaders the internal OMDrawingTool will use for its own, targeted use. These definitions are specified in the properties for the EditorLayer using this tool. This class provides the OMDrawingTool and all the button mechanisms organized for smooth behavior integrated with the regular OpenMap mouse modes. Properties for an EditorLayer using the DrawingEditorTool:


   # Layer declaration, dtlayer has to go in openmap.layers property
   dtlayer.class=com.bbn.openmap.layer.editor.EditorLayer
   # GUI name for layer, will also be the ID of the 'hidden' mouse mode used for tool.
   dtlayer.prettyName=Drawing Layer
   # List of other MouseModes to respond to for the layer, when *not* in editing mode.
   dtlayer.mouseModes=Gestures
   # Editor Tool to use with layer
   dtlayer.editor=com.bbn.openmap.layer.editor.DrawingEditorTool
   # This tool lets you hide the drawing attribute controls (lines,
   # colors) for the different objects. Default is true.
   dtlayer.showAttributes=false
  
   # List of EditToolLoaders to use in DrawingEditorTool
   dtlayer.loaders=polys points lines
   # EditToolLoader class to use for the polys
   dtlayer.polys.class=com.bbn.openmap.tools.drawing.OMPolyLoader
   # Set the DrawingAttributes class to use for polys
   dtlayer.polys.attributesClass=com.bbn.openmap.omGraphics.DrawingAttributes
   # Polys have specific line color, defaults for other settings.
   dtlayer.polys.lineColor=FFFF0000
  
   # EditToolLoader classes for points and lines, they get rendered
   # with whatever color was set last for the DrawingEditorTool.
   dtlayer.points.class=com.bbn.openmap.tools.drawing.OMPointLoader
         dtlayer.lines.class=com.bbn.openmap.tools.drawing.OMLineLoader
 
 


Nested Class Summary
 
Nested classes/interfaces inherited from class com.bbn.openmap.omGraphics.event.StandardMapMouseInterpreter
StandardMapMouseInterpreter.GeometryOfInterest, StandardMapMouseInterpreter.MouseTimerListener
 
Field Summary
static java.lang.String AttributesClassProperty
           
protected  javax.swing.ButtonGroup bg
          The ButtonGroup to use for the face.
static java.lang.String DefaultDrawingAttributesClass
           
protected  java.util.Hashtable<java.lang.String,DrawingAttributes> drawingAttributesTable
          Hashtable that holds default DrawingAttributes for different loaders.
protected  OMDrawingTool drawingTool
          OMDrawingTool handling OMGraphic modifications and creations.
protected  GraphicAttributes ga
           
protected  java.util.ArrayList<EditToolLoader> loaderList
          The ArrayList containing the EditToolLoaders for the drawing tool.
static java.lang.String LoaderProperty
           
protected  MouseDelegator mouseDelegator
          The MouseDelegator that is controlling the MouseModes.
protected  OMDrawingToolMouseMode omdtmm
          A handler on the OMDrawingToolMouseMode that the OMDrawingTool is using, for convenience.
protected  java.lang.String propertyPrefix
          Property prefix for PropertyConsumer interface.
static java.lang.String RESET_CMD
           
protected  boolean showAttributes
           
static java.lang.String ShowAttributesProperty
           
protected  java.lang.String thingToCreate
          The class name of the next thing to create.
protected  javax.swing.JToggleButton unpickBtn
          The button that unpicks all the rest of the tool buttons.
 
Fields inherited from class com.bbn.openmap.layer.editor.AbstractEditorTool
face, visible, wantsEvents
 
Fields inherited from class com.bbn.openmap.omGraphics.event.StandardMapMouseInterpreter
active, clickInterest, consumeEvents, currentMouseEvent, DEBUG, grp, lastToolTip, layer, mouseModeServiceList, mouseTimer, mouseTimerInterval, mouseTimerListener, movementInterest, noTimerOverOMGraphic
 
Fields inherited from interface com.bbn.openmap.PropertyConsumer
EditorProperty, initPropertiesProperty, LabelEditorProperty, ScopedEditorProperty
 
Constructor Summary
DrawingEditorTool(EditorLayer layer)
          The general constructor that can be called from subclasses to initialize the drawing tool and interface.
 
Method Summary
 void actionPerformed(java.awt.event.ActionEvent e)
          actionPerformed - Handle the mouse clicks on the button(s)
protected  OMDrawingToolMouseMode activateDrawingTool(java.lang.String ttc)
          Method to set up the drawing tool with default behavior in order to create a new OMGraphic.
 void addEditToolLoader(EditToolLoader loader)
           
 void clearEditToolLoaders()
           
protected  OMDrawingTool createDrawingTool()
           
 void dispose()
          Called when the parent layer detects that it has been removed from the application.
 void drawingComplete(OMGraphic omg, OMAction action)
          When a graphic is complete, the drawing tool gets ready to make another.
protected  void fillFaceToolBar(javax.swing.JToolBar faceTB, javax.swing.ButtonGroup bg)
          Fill the Face's toolbar with buttons
 void findAndInit(java.lang.Object someObj)
          Called by findAndInit(Iterator) so subclasses can find objects, too.
 void findAndUndo(java.lang.Object someObj)
          Part of the interface where the EditorLayer can provide components that are available via the MapHandler/BeanContext.
 OMDrawingTool getDrawingTool()
          Get the OMDrawingTool to use with this DrawingEditorTool.
 java.awt.Container getFace()
          The tool's interface.
 GraphicAttributes getGraphicAttributes()
           
 MouseDelegator getMouseDelegator()
          Get the MouseDelegator used to control mouse gestures over the map.
 java.util.Properties getProperties(java.util.Properties props)
          Method to fill in a Properties object, reflecting the current values of the PropertyConsumer.
 java.util.Properties getPropertyInfo(java.util.Properties props)
          Method to fill in a Properties object with values reflecting the properties able to be set on this PropertyConsumer.
 java.lang.String getPropertyPrefix()
          Get the property key prefix that is being used to prepend to the property keys for Properties lookups.
 void initDefaultDrawingToolLoaders()
          Add the default (line, poly, rectangle, circle/range rings, point) capabilities to the tool.
 void initDrawingTool()
          Method called in the AbstractDrawingEditorTool constructor.
 boolean isShowAttributes()
           
 boolean mouseClicked(java.awt.event.MouseEvent e)
          Invoked when the mouse has been clicked on a component.
 boolean mouseDragged(java.awt.event.MouseEvent e)
          Invoked when a mouse button is pressed on a component and then dragged.
 void mouseEntered(java.awt.event.MouseEvent e)
          Invoked when the mouse enters a component.
 void mouseExited(java.awt.event.MouseEvent e)
          Invoked when the mouse exits a component.
 boolean mouseMoved(java.awt.event.MouseEvent e)
          Invoked when the mouse button has been moved on a component (with no buttons down).
 boolean mousePressed(java.awt.event.MouseEvent e)
          Invoked when a mouse button has been pressed on a component.
 boolean mouseReleased(java.awt.event.MouseEvent e)
          Invoked when a mouse button has been released on a component.
 void propertyChange(java.beans.PropertyChangeEvent evt)
          Listen for changes to the active mouse mode and for any changes to the list of available mouse modes
 void removeEditToolLoader(EditToolLoader loader)
           
 void resetForNewGraphic()
          Called when the Tool should be reset to draw a new graphic.
 void setDrawingTool(OMDrawingTool omdt)
          Set the OMDrawingTool to use.
 void setGraphicAttributes(GraphicAttributes ga)
           
 void setMouseDelegator(MouseDelegator md)
          Set the MouseDelegator used to hold the different MouseModes available to the map.
 void setProperties(java.util.Properties props)
          Method to set the properties in the PropertyConsumer.
 void setProperties(java.lang.String prefix, java.util.Properties props)
          Method to set the properties in the PropertyConsumer.
 void setPropertyPrefix(java.lang.String prefix)
          Set the property key prefix that should be used by the PropertyConsumer.
 void setShowAttributes(boolean showAttributes)
           
 void setVisible(boolean value)
          A method that lets the EditorTool know whether its interface should be visible.
 void setWantsEvents(boolean value)
          The EditorTool method, with the added bonus of resetting the tool if it doesn't want events.
protected  void setWantsEvents(java.lang.String command)
          The main method for getting the tool ready to create something.
 void totalReset()
          Does everything to make the DrawingEditorTool go to sleep, and disable all buttons.
protected  void unhook(java.lang.Object someObj)
           
 
Methods inherited from class com.bbn.openmap.layer.editor.AbstractEditorTool
isVisible, setLayer, wantsEvents
 
Methods inherited from class com.bbn.openmap.omGraphics.event.StandardMapMouseInterpreter
deselect, displayPopup, getClickInterest, getConsumeEvents, getCurrentMouseEvent, getGeometryUnder, getGRP, getLayer, getMouseModeServiceList, getMouseTimerInterval, getMovementInterest, getNoTimerOverOMGraphic, handleInfoLine, handleToolTip, isActive, isLeftMouseButton, leftClick, leftClick, leftClickOff, mouseMoved, mouseNotOver, mouseOver, mouseOver, rightClick, rightClick, rightClickOff, select, setActive, setClickInterest, setClickInterestFromMouseEvent, setConsumeEvents, setCurrentMouseEvent, setGRP, setMouseModeServiceList, setMouseTimerInterval, setMovementInterest, setNoTimerOverOMGraphic, testForAndHandlePopupTrigger, updateMouseMoved
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface com.bbn.openmap.omGraphics.event.MapMouseInterpreter
getCurrentMouseEvent, getGRP, isActive, leftClick, leftClick, leftClickOff, mouseNotOver, mouseOver, mouseOver, rightClick, rightClick, rightClickOff, setActive, setGRP
 
Methods inherited from interface com.bbn.openmap.event.MapMouseListener
getMouseModeServiceList, mouseMoved
 

Field Detail

drawingTool

protected OMDrawingTool drawingTool
OMDrawingTool handling OMGraphic modifications and creations.


omdtmm

protected OMDrawingToolMouseMode omdtmm
A handler on the OMDrawingToolMouseMode that the OMDrawingTool is using, for convenience. If this handle is not null, then that's an internal signal for this EditorTool to know that it's active and interpreting MouseEvents. If this is null, and the EditorTool wants events, that's a signal to create a new OMGraphic (see mousePressed).


thingToCreate

protected java.lang.String thingToCreate
The class name of the next thing to create. Used as a signal to this EditorTool that when the next appropriate MouseEvent comes in, this "thing" should be created.


bg

protected javax.swing.ButtonGroup bg
The ButtonGroup to use for the face.


unpickBtn

protected javax.swing.JToggleButton unpickBtn
The button that unpicks all the rest of the tool buttons. It is kept invisible, but a member of all the other button's ButtonGroup. When selected, all of the other buttons are deselected.


ga

protected GraphicAttributes ga

mouseDelegator

protected MouseDelegator mouseDelegator
The MouseDelegator that is controlling the MouseModes. We need to keep track of what's going on so we can adjust our tools accordingly.


loaderList

protected java.util.ArrayList<EditToolLoader> loaderList
The ArrayList containing the EditToolLoaders for the drawing tool.


RESET_CMD

public static final java.lang.String RESET_CMD
See Also:
Constant Field Values

propertyPrefix

protected java.lang.String propertyPrefix
Property prefix for PropertyConsumer interface.


drawingAttributesTable

protected java.util.Hashtable<java.lang.String,DrawingAttributes> drawingAttributesTable
Hashtable that holds default DrawingAttributes for different loaders.


showAttributes

protected boolean showAttributes

ShowAttributesProperty

public static final java.lang.String ShowAttributesProperty
See Also:
Constant Field Values

LoaderProperty

public static final java.lang.String LoaderProperty
See Also:
Constant Field Values

AttributesClassProperty

public static final java.lang.String AttributesClassProperty
See Also:
Constant Field Values

DefaultDrawingAttributesClass

public static final java.lang.String DefaultDrawingAttributesClass
See Also:
Constant Field Values
Constructor Detail

DrawingEditorTool

public DrawingEditorTool(EditorLayer layer)
The general constructor that can be called from subclasses to initialize the drawing tool and interface. All that is left to do for subclasses is to add EditToolLoaders to the DrawingEditorTool subclass.

Method Detail

initDrawingTool

public void initDrawingTool()
Method called in the AbstractDrawingEditorTool constructor.


createDrawingTool

protected OMDrawingTool createDrawingTool()

addEditToolLoader

public void addEditToolLoader(EditToolLoader loader)

removeEditToolLoader

public void removeEditToolLoader(EditToolLoader loader)

clearEditToolLoaders

public void clearEditToolLoaders()

initDefaultDrawingToolLoaders

public void initDefaultDrawingToolLoaders()
Add the default (line, poly, rectangle, circle/range rings, point) capabilities to the tool.


setWantsEvents

protected void setWantsEvents(java.lang.String command)
The main method for getting the tool ready to create something. When called, it sets the thingToCreate from the command, calls setWantEvents(true), which calls resetForNewGraphic().


setWantsEvents

public void setWantsEvents(boolean value)
The EditorTool method, with the added bonus of resetting the tool if it doesn't want events.

Overrides:
setWantsEvents in class AbstractEditorTool

findAndInit

public void findAndInit(java.lang.Object someObj)
Called by findAndInit(Iterator) so subclasses can find objects, too.

Specified by:
findAndInit in interface LightMapHandlerChild
Overrides:
findAndInit in class AbstractEditorTool

findAndUndo

public void findAndUndo(java.lang.Object someObj)
Description copied from class: AbstractEditorTool
Part of the interface where the EditorLayer can provide components that are available via the MapHandler/BeanContext. The object is something that has been removed from the MapHandler.

Specified by:
findAndUndo in interface LightMapHandlerChild
Overrides:
findAndUndo in class AbstractEditorTool

dispose

public void dispose()
Description copied from class: AbstractEditorTool
Called when the parent layer detects that it has been removed from the application.

Specified by:
dispose in interface EditorTool
Overrides:
dispose in class AbstractEditorTool

unhook

protected void unhook(java.lang.Object someObj)

drawingComplete

public void drawingComplete(OMGraphic omg,
                            OMAction action)
When a graphic is complete, the drawing tool gets ready to make another.

Specified by:
drawingComplete in interface EditorTool
Overrides:
drawingComplete in class AbstractEditorTool

resetForNewGraphic

public void resetForNewGraphic()
Called when the Tool should be reset to draw a new graphic. Currently sets the OMDrawingToolMouseMode to null, which is a signal to the DrawingEditorTool that if an appropriate MouseEvent is provided, that the DrawingTool should be configured to create a new OMGraphic. If the OMDrawingToolMouseMode is not null, then the MouseEvent is just given to it.


totalReset

public void totalReset()
Does everything to make the DrawingEditorTool go to sleep, and disable all buttons.


setDrawingTool

public void setDrawingTool(OMDrawingTool omdt)
Set the OMDrawingTool to use. It's created internally, though.


getDrawingTool

public OMDrawingTool getDrawingTool()
Get the OMDrawingTool to use with this DrawingEditorTool.


getGraphicAttributes

public GraphicAttributes getGraphicAttributes()

setGraphicAttributes

public void setGraphicAttributes(GraphicAttributes ga)

isShowAttributes

public boolean isShowAttributes()

setShowAttributes

public void setShowAttributes(boolean showAttributes)

actionPerformed

public void actionPerformed(java.awt.event.ActionEvent e)
actionPerformed - Handle the mouse clicks on the button(s)

Specified by:
actionPerformed in interface java.awt.event.ActionListener

activateDrawingTool

protected OMDrawingToolMouseMode activateDrawingTool(java.lang.String ttc)
Method to set up the drawing tool with default behavior in order to create a new OMGraphic. Will try to deactivate the OMDrawingTool if it thinks it's busy.

Parameters:
ttc - thingToCreate, classname of thing to create
Returns:
OMDrawingToolMouseMode of DrawingTool if all goes well, null if the drawing tool can't create the new thingy.

mousePressed

public boolean mousePressed(java.awt.event.MouseEvent e)
Invoked when a mouse button has been pressed on a component.

Specified by:
mousePressed in interface MapMouseListener
Overrides:
mousePressed in class StandardMapMouseInterpreter
Parameters:
e - MouseEvent
Returns:
false

mouseReleased

public boolean mouseReleased(java.awt.event.MouseEvent e)
Invoked when a mouse button has been released on a component.

Specified by:
mouseReleased in interface MapMouseListener
Overrides:
mouseReleased in class StandardMapMouseInterpreter
Parameters:
e - MouseEvent
Returns:
false

mouseClicked

public boolean mouseClicked(java.awt.event.MouseEvent e)
Invoked when the mouse has been clicked on a component.

Specified by:
mouseClicked in interface MapMouseListener
Overrides:
mouseClicked in class StandardMapMouseInterpreter
Parameters:
e - MouseEvent
Returns:
false

mouseEntered

public void mouseEntered(java.awt.event.MouseEvent e)
Invoked when the mouse enters a component.

Specified by:
mouseEntered in interface MapMouseListener
Overrides:
mouseEntered in class StandardMapMouseInterpreter
Parameters:
e - MouseEvent

mouseExited

public void mouseExited(java.awt.event.MouseEvent e)
Invoked when the mouse exits a component.

Specified by:
mouseExited in interface MapMouseListener
Overrides:
mouseExited in class StandardMapMouseInterpreter
Parameters:
e - MouseEvent

mouseDragged

public boolean mouseDragged(java.awt.event.MouseEvent e)
Invoked when a mouse button is pressed on a component and then dragged. The listener will receive these events if it

Specified by:
mouseDragged in interface MapMouseListener
Overrides:
mouseDragged in class StandardMapMouseInterpreter
Parameters:
e - MouseEvent
Returns:
false

mouseMoved

public boolean mouseMoved(java.awt.event.MouseEvent e)
Invoked when the mouse button has been moved on a component (with no buttons down).

Specified by:
mouseMoved in interface MapMouseListener
Overrides:
mouseMoved in class StandardMapMouseInterpreter
Parameters:
e - MouseEvent
Returns:
false

setVisible

public void setVisible(boolean value)
Description copied from class: AbstractEditorTool
A method that lets the EditorTool know whether its interface should be visible.

Specified by:
setVisible in interface EditorTool
Overrides:
setVisible in class AbstractEditorTool

getFace

public java.awt.Container getFace()
The tool's interface. This is added to the tool bar.

Specified by:
getFace in interface EditorTool
Overrides:
getFace in class AbstractEditorTool
Returns:
String The key for this tool.

fillFaceToolBar

protected void fillFaceToolBar(javax.swing.JToolBar faceTB,
                               javax.swing.ButtonGroup bg)
Fill the Face's toolbar with buttons


setMouseDelegator

public void setMouseDelegator(MouseDelegator md)
Set the MouseDelegator used to hold the different MouseModes available to the map.


getMouseDelegator

public MouseDelegator getMouseDelegator()
Get the MouseDelegator used to control mouse gestures over the map.


propertyChange

public void propertyChange(java.beans.PropertyChangeEvent evt)
Listen for changes to the active mouse mode and for any changes to the list of available mouse modes

Specified by:
propertyChange in interface java.beans.PropertyChangeListener

setPropertyPrefix

public void setPropertyPrefix(java.lang.String prefix)
Description copied from interface: PropertyConsumer
Set the property key prefix that should be used by the PropertyConsumer. The prefix, along with a '.', should be prepended to the property keys known by the PropertyConsumer.

Specified by:
setPropertyPrefix in interface PropertyConsumer
Parameters:
prefix - the prefix String.

getPropertyPrefix

public java.lang.String getPropertyPrefix()
Description copied from interface: PropertyConsumer
Get the property key prefix that is being used to prepend to the property keys for Properties lookups.

Specified by:
getPropertyPrefix in interface PropertyConsumer
Returns:
the prefix string

setProperties

public void setProperties(java.util.Properties props)
Description copied from interface: PropertyConsumer
Method to set the properties in the PropertyConsumer. It is assumed that the properties do not have a prefix associated with them, or that the prefix has already been set.

Specified by:
setProperties in interface PropertyConsumer
Parameters:
props - a properties object that the PropertyConsumer can use to retrieve expected properties it can use for configuration.

setProperties

public void setProperties(java.lang.String prefix,
                          java.util.Properties props)
Description copied from interface: PropertyConsumer
Method to set the properties in the PropertyConsumer. The prefix is a string that should be prepended to each property key (in addition to a separating '.') in order for the PropertyConsumer to uniquely identify properties meant for it, in the midst of of Properties meant for several objects.

Specified by:
setProperties in interface PropertyConsumer
Parameters:
prefix - a String used by the PropertyConsumer to prepend to each property value it wants to look up - setList.getProperty(prefix.propertyKey). If the prefix had already been set, then the prefix passed in should replace that previous value.
props - a Properties object that the PropertyConsumer can use to retrieve expected properties it can use for configuration.

getProperties

public java.util.Properties getProperties(java.util.Properties props)
Description copied from interface: PropertyConsumer
Method to fill in a Properties object, reflecting the current values of the PropertyConsumer. If the PropertyConsumer has a prefix set, the property keys should have that prefix plus a separating '.' prepended to each property key it uses for configuration.

Specified by:
getProperties in interface PropertyConsumer
Parameters:
props - a Properties object to load the PropertyConsumer properties into. If getList equals null, then a new Properties object should be created.
Returns:
Properties object containing PropertyConsumer property values. If getList was not null, this should equal getList. Otherwise, it should be the Properties object created by the PropertyConsumer.

getPropertyInfo

public java.util.Properties getPropertyInfo(java.util.Properties props)
Description copied from interface: PropertyConsumer
Method to fill in a Properties object with values reflecting the properties able to be set on this PropertyConsumer. The key for each property should be the raw property name (without a prefix) with a value that is a String that describes what the property key represents, along with any other information about the property that would be helpful (range, default value, etc.).

Specified by:
getPropertyInfo in interface PropertyConsumer
Parameters:
props - a Properties object to load the PropertyConsumer properties into. If getList equals null, then a new Properties object should be created.
Returns:
Properties object containing PropertyConsumer property values. If getList was not null, this should equal getList. Otherwise, it should be the Properties object created by the PropertyConsumer.


Copyright (C) BBNT Solutions LLC; See http://openmap.bbn.com/ for details