public class ReadoutProbe extends ucar.unidata.collab.SharableImpl implements java.beans.PropertyChangeListener, visad.DisplayListener
ReadoutProbe
is a probe that combines a "pickable" probe
widget with an adjacent text "readout" of the data value at the
probe's current location.
Primarily used with
MultiSpectralControl
.
Modifier and Type | Class and Description |
---|---|
static class |
ReadoutProbe.PointSelector
This class is a reimplementation of
PointProbe that whose
mouse movement is limited to the x- and y- axes. |
Modifier and Type | Field and Description |
---|---|
private java.awt.Color |
currentColor |
private double |
currentLatitude |
private double |
currentLongitude |
private java.lang.String |
currentValue |
private static java.awt.Color |
DEFAULT_COLOR |
private visad.FlatField |
field |
private float |
lastScale
Used to keep track of the last zoom "level".
|
private java.util.List<ProbeListener> |
listeners |
private static org.slf4j.Logger |
logger |
private ucar.visad.display.DisplayMaster |
master |
private static java.text.DecimalFormat |
numFmt |
private ReadoutProbe.PointSelector |
pointSelector |
private float |
pointSize |
static java.lang.String |
SHARE_POSITION |
static java.lang.String |
SHARE_PROFILE |
private static visad.TupleType |
TUPTYPE |
private ucar.visad.display.TextDisplayable |
valueDisplay
Displays the value of the data at the current position.
|
Constructor and Description |
---|
ReadoutProbe(ucar.unidata.idv.control.DisplayControlImpl control,
visad.FlatField flatField,
java.awt.Color color,
java.lang.String pattern,
boolean visible)
Create a "HYDRA" probe that allows for displaying things
like value at current position, current color, and location.
|
Modifier and Type | Method and Description |
---|---|
private void |
addListeners()
Add this probe instance to the relevant listeners.
|
void |
addProbeListener(ProbeListener listener)
Adds a
ProbeListener to the listener list so that it can be
notified when the probe is changed. |
private static ucar.visad.display.TextDisplayable |
createValueDisplay(java.awt.Color color) |
void |
displayChanged(visad.DisplayEvent e)
Called for events happening in the
DisplayImpl
associated with DisplayMaster . |
protected void |
fireProbeColorChanged(java.awt.Color previous,
java.awt.Color current)
Notifies the registered
ProbeListeners that this
probe's color has changed. |
protected void |
fireProbeFormatPatternChanged(java.lang.String previous,
java.lang.String current)
Notifies the registered
ProbeListeners that this
probe's location format pattern has changed. |
protected void |
fireProbePositionChanged(visad.RealTuple previous,
visad.RealTuple current)
Notifies the registered
ProbeListeners that this
probe's position has changed. |
protected void |
fireProbeVisibilityChanged(boolean previous)
Notifies registered
ProbeListeners that this
probe's visibility has changed. |
java.awt.Color |
getColor()
Get the current color of this
ReadoutProbe instance. |
float |
getDisplayScale()
Get the scaling factor for probes and such.
|
visad.georef.EarthLocationTuple |
getEarthPosition()
Get the current "earth location" of the probe.
|
java.lang.String |
getFormatPattern()
Returns the number format string current being used.
|
private static visad.RealTuple |
getInitialProbePosition() |
double |
getLatitude()
Get the current latitude of this
ReadoutProbe instance. |
double |
getLongitude()
Get the current longitude of this
ReadoutProbe instance. |
ReadoutProbe.PointSelector |
getPointSelector() |
java.lang.String |
getValue()
Get the current "readout value" of this
ReadoutProbe instance. |
ucar.visad.display.TextDisplayable |
getValueDisplay() |
visad.RealTuple |
getXYPosition() |
void |
handleProbeRemoval()
Called when this probe has been removed.
|
void |
handleProbeUpdate() |
boolean |
hasListener(ProbeListener listener)
Determine whether or not a given
ProbeListener is listening to
the current probe. |
private static visad.RealTuple |
makeEarth2dTuple(double lat,
double lon)
Returns a
SpatialEarth2DTuple
for the given latitude and longitude. |
private static visad.TupleType |
makeTupleType() |
void |
projectionChanged(visad.georef.MapProjection newProjection)
Respond to the projection having been changed.
|
void |
propertyChange(java.beans.PropertyChangeEvent e)
Called whenever the probe fires off a
PropertyChangeEvent . |
void |
quietlySetColor(java.awt.Color newColor) |
void |
quietlySetFormatPattern(java.lang.String pattern)
Update the location format pattern for the current probe, but
do not fire off any events.
|
void |
quietlySetVisible(boolean visibility) |
void |
removeProbeListener(ProbeListener listener)
Removes a
ProbeListener from the notification list. |
void |
setColor(java.awt.Color color)
Change the color of this
ReadoutProbe instance. |
private void |
setColor(java.awt.Color color,
boolean quietly)
Change the color of this
ReadoutProbe instance and control
whether or not listeners should be notified. |
void |
setField(visad.FlatField flatField)
Sets the
FlatField associated with this probe to the given
field . |
void |
setFormatPattern(java.lang.String pattern)
Update the location format pattern for the current probe.
|
private void |
setFormatPattern(java.lang.String pattern,
boolean quietly)
Update the location format pattern for the current probe and optionally
fire off an update event.
|
void |
setLatLon(double latitude,
double longitude) |
void |
setXYPosition(visad.RealTuple position) |
java.lang.String |
toString()
Returns a brief summary of a ReadoutProbe.
|
private visad.Tuple |
valueAtPosition(visad.RealTuple position,
visad.FlatField imageData) |
applySharableProperties, doShare, doShare, doShareExternal, doShareInternal, getReceiveShareTime, getSharablePropertiesComponent, getShareGroup, getSharing, getUniqueId, initSharable, receiveShareData, removeSharable, setReceiveShareTime, setShareGroup, setSharing, setUniqueId, showSharableDialog
public static final java.lang.String SHARE_PROFILE
public static final java.lang.String SHARE_POSITION
private static final java.awt.Color DEFAULT_COLOR
private static final visad.TupleType TUPTYPE
private static final org.slf4j.Logger logger
private final java.util.List<ProbeListener> listeners
private final ucar.visad.display.TextDisplayable valueDisplay
private final ReadoutProbe.PointSelector pointSelector
private final ucar.visad.display.DisplayMaster master
private java.awt.Color currentColor
private java.lang.String currentValue
private double currentLatitude
private double currentLongitude
private float pointSize
private visad.FlatField field
private static final java.text.DecimalFormat numFmt
private float lastScale
public ReadoutProbe(ucar.unidata.idv.control.DisplayControlImpl control, visad.FlatField flatField, java.awt.Color color, java.lang.String pattern, boolean visible) throws visad.VisADException, java.rmi.RemoteException
Note: none of the parameters permit null
values.
control
- "Layer" that will be probed.flatField
- Data to probe.color
- Color
of the probe.pattern
- Format string to use with probe's location values.visible
- Whether or not the probe is visible.java.lang.NullPointerException
- if any of the given parameters are
null
.visad.VisADException
- if VisAD had problems.java.rmi.RemoteException
- if VisAD had problems.private void addListeners()
public void propertyChange(java.beans.PropertyChangeEvent e)
PropertyChangeEvent
.
Only handles position changes right now, all other events are discarded.
propertyChange
in interface java.beans.PropertyChangeListener
e
- Object that describes the property change.java.lang.NullPointerException
- if passed a null
PropertyChangeEvent
.public void displayChanged(visad.DisplayEvent e)
DisplayImpl
associated with DisplayMaster
.
The only event that is actually handled is
DisplayEvent.FRAME_DONE
, which allows us to snap the text
value displayable to the actual "pickable" probe.
displayChanged
in interface visad.DisplayListener
e
- Event to handle.public void setField(visad.FlatField flatField)
FlatField
associated with this probe to the given
field
.flatField
- New FlatField
for this probe.java.lang.NullPointerException
- if passed a null
field
.public void addProbeListener(ProbeListener listener)
ProbeListener
to the listener list so that it can be
notified when the probe is changed.listener
- ProbeListener
to register. null
listeners are not allowed.java.lang.NullPointerException
- if listener
is null.public void removeProbeListener(ProbeListener listener)
ProbeListener
from the notification list.listener
- ProbeListener
to remove. null
values
are permitted, but since they are not allowed to be added...public boolean hasListener(ProbeListener listener)
ProbeListener
is listening to
the current probe.listener
- ProbeListener
to check. null
values are
permitted.true
if listener
has been added to the list of
ProbeListener
objects, false
otherwise.protected void fireProbePositionChanged(visad.RealTuple previous, visad.RealTuple current)
ProbeListeners
that this
probe's position has changed.previous
- Previous position. Cannot be null
.current
- Current position. Cannot be null
.protected void fireProbeColorChanged(java.awt.Color previous, java.awt.Color current)
ProbeListeners
that this
probe's color has changed.previous
- Previous color. Cannot be null
.current
- Current color. Cannot be null
.protected void fireProbeVisibilityChanged(boolean previous)
ProbeListeners
that this
probe's visibility has changed. Only takes a "previous"
value, which is negated to form the "current" value.previous
- Visibility before change.protected void fireProbeFormatPatternChanged(java.lang.String previous, java.lang.String current)
ProbeListeners
that this
probe's location format pattern has changed.previous
- Previous location format pattern.current
- Current location format pattern.public void setColor(java.awt.Color color)
ReadoutProbe
instance.color
- New color. Cannot be null
.public ReadoutProbe.PointSelector getPointSelector()
public ucar.visad.display.TextDisplayable getValueDisplay()
private void setColor(java.awt.Color color, boolean quietly)
ReadoutProbe
instance and control
whether or not listeners should be notified.
Note that if color
is the same as currentColor
,
nothing will happen (the method exits early).
color
- New color for this probe. Cannot be null
.quietly
- Whether or not to notify the list of
ProbeListeners
of a color change.public java.awt.Color getColor()
ReadoutProbe
instance.Color
of this ReadoutProbe
.public java.lang.String getValue()
ReadoutProbe
instance.public double getLatitude()
ReadoutProbe
instance.public double getLongitude()
ReadoutProbe
instance.public void setLatLon(double latitude, double longitude)
public void quietlySetVisible(boolean visibility)
public void quietlySetColor(java.awt.Color newColor)
public void setFormatPattern(java.lang.String pattern)
pattern
- New location format pattern. Cannot be null
.public void quietlySetFormatPattern(java.lang.String pattern)
pattern
- New location format pattern. Cannot be null
.private void setFormatPattern(java.lang.String pattern, boolean quietly)
pattern
- New location format pattern. Cannot be null
.quietly
- Whether or not to fire a format pattern change update.public java.lang.String getFormatPattern()
public void handleProbeUpdate()
public void handleProbeRemoval()
public final float getDisplayScale()
public void setXYPosition(visad.RealTuple position)
public visad.RealTuple getXYPosition()
public visad.georef.EarthLocationTuple getEarthPosition()
Note: this method will attempt to change the currentLatitude
and currentLongitude
fields.
pointSelector
, or null
if the
location could not be determined.public void projectionChanged(visad.georef.MapProjection newProjection)
newProjection
- New projection. Can be null
.private visad.Tuple valueAtPosition(visad.RealTuple position, visad.FlatField imageData)
private static visad.RealTuple makeEarth2dTuple(double lat, double lon) throws visad.VisADException, java.rmi.RemoteException
SpatialEarth2DTuple
for the given latitude and longitude.
Be aware that for whatever reason VisAD wants the longitude first, then the latitude.
lat
- Latitude of the position.lon
- Longitude of the position.SpatialEarth2DTuple
containing lat
and
lon
.visad.VisADException
- Problem creating VisAD object.java.rmi.RemoteException
- Java RMI error.private static visad.RealTuple getInitialProbePosition()
private static ucar.visad.display.TextDisplayable createValueDisplay(java.awt.Color color)
private static visad.TupleType makeTupleType()
public java.lang.String toString()
toString
in class java.lang.Object
[ReadProbe@HASHCODE: color=...,
latitude=..., longitude=..., value=...]