Class TLcdGXYLabelPainterAdapter
- All Implemented Interfaces:
ILcdPropertyChangeSource,ILcdGXYLabelEditor,ILcdGXYLabelEditorProvider,ILcdGXYLabelPainter,ILcdGXYLabelPainter2,ILcdGXYLabelPainterProvider,ILcdGXYMultiLabelPainter,Serializable,Cloneable
ILcdGXYPainter into an ILcdGXYLabelPainter2.
It uses a set of fixed label positions to position the label. It also offers the possibility
to place a pin.
If an ILcdGXYEditor is passed in the constructor, this class will also implement
the ILcdGXYLabelEditor behaviour.
- Since:
- 10.1
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intInteger code to place label at center of the anchor point.static final intInteger code to place label at east of the anchor point.static intMaximum number of available locations.static final intInteger code to place label at north of the anchor point.static final intInteger code to place label at north east of the anchor point.static final intInteger code to place label at north west of the anchor point.static final intInteger code to place label at south of the anchor point.static final intInteger code to place label at south east of the anchor point.static final intInteger code to place label at south west of the anchor point.static final intInteger code to place label at west of the anchor point.Fields inherited from interface com.luciad.view.gxy.ILcdGXYLabelEditor
CREATING, END_CREATION, RESHAPED, START_CREATION, TRANSLATEDFields inherited from interface com.luciad.view.gxy.ILcdGXYLabelPainter
DEFAULT, SELECTEDFields inherited from interface com.luciad.view.gxy.ILcdGXYLabelPainter2
BODY, CREATING, HANDLES, RESHAPING, SNAPS, TRANSLATING -
Constructor Summary
ConstructorsConstructorDescriptionTLcdGXYLabelPainterAdapter(ILcdGXYPainter aDelegatePainter) Creates a new label painter adapter that makes a label painter out of anILcdGXYPainter.TLcdGXYLabelPainterAdapter(ILcdGXYPainter aDelegatePainter, ILcdGXYEditor aDelegateEditor) Creates a new label painter adapter that makes a label painter out of anILcdGXYPainterand aILcdGXYEditor. -
Method Summary
Modifier and TypeMethodDescriptionbooleanacceptSnapTargetForLabel(Graphics aGraphics, ILcdGXYContext aGXYContext) Returns whether the label specified bysetObject,setLabelIndexandsetSubLabelIndexaccepts the snap target in the givenILcdGXYContext.protected voidanchorPointSFCT(Graphics aGraphics, int aMode, ILcdGXYContext aContext, Point aPointSFCT) This method retrieves an anchor point using the correspondingILcdGXYPainterfor the Object to be painted (aGXYContext.getGXYLayer().getGXYPainter( aObject )).clone()Returns a new instance of thisALcdGXYLabelPainter.booleaneditLabel(Graphics aGraphics, int aMode, ILcdGXYContext aGXYContext) Adapts the setTLcdLabelLocationaccording to the information present in aGXYContext.Returns the delegate painter.getGXYLabelEditor(Object aObject) Returns a validILcdGXYLabelEditorfor editing the labels of aObject.getGXYLabelPainter(Object aObject) Finds anILcdGXYLabelPainterthat can be used to label the object passed.intgetLabelCount(Graphics aGraphics, ILcdGXYContext aGXYContext) Return the number of labels for the currently set object.intReturns the number of points required to initialize the label of the setObject.getLabelCursor(Graphics aGraphics, int aMode, ILcdGXYContext aGXYContext) Returns aCursorto indicate the type of editingaModeandaGXYContext.Returns the painter style that is used when drawing the pin.int[]Returns the list of possible positions to place the labels.intgetPossibleLocationCount(Graphics aGraphics) Returns the number of possible locations where thisILcdGXYLabelPaintercan paint/draw the labels of the set domainObject.intReturns how many pixels the label must be removed from the anchor point of the domain object when labels are not placed freely (i.e.intgetSubLabelCount(int aLabelIndex) Returns the number of sublabels for the set object and the given label index.booleanisLabelTouched(Graphics aGraphics, int aMode, ILcdGXYContext aGXYContext) Tests if the label specified bysetObject,setLabelIndexandsetSubLabelIndexis touched at view location(specified by aGXYContext.getX()andaGXYContext.getY()), considering the mode and theILcdGXYContextinstance.booleanReturns whether this editor makes a label sticky when it edits this label.booleanReturns whether or not this painter draws a line (the "pin") from the label to the anchor point of the domain object.voidlabelAnchorPointSFCT(Graphics aGraphics, int aMode, ILcdGXYContext aGXYContext, Point aPointSFCT) SetsaPointSFCTto the anchor point of the label specified bysetObject,setLabelIndexandsetSubLabelIndex.doublelabelBoundsSFCT(Graphics aGraphics, int aMode, ILcdGXYContext aGXYContext, Rectangle aRectangleSFCT) Calculates the bounds of the label that can be painted.voidpaintLabel(Graphics aGraphics, int aMode, ILcdGXYContext aGXYContext) Paints the label specified bysetObject,setLabelIndexandsetSubLabelIndexonaGraphics.static voidsetClassTraceOn(boolean aClassTraceOn) Deprecated.This method has been deprecated.voidsetMakeLabelsStickyOnEdit(boolean aMakeLabelsStickyOnEdit) Determines whether this editor makes a label sticky when it edits this label.voidsetPinStyle(ILcdGXYPainterStyle aPinStyle) Sets the painter style to be used when painting the pin.voidsetPositionList(int[] aPositionList) Sets a new position list.voidsetShiftLabelPosition(int aShift) Sets how many pixels the label must be removed from the anchor point of the domain object when labels are not placed freely (i.e.voidsetWithPin(boolean aWithPin) Specifies whether or not a line (the "pin") should be drawn from the label to the anchor point of the domain object.Methods inherited from class com.luciad.view.gxy.ALcdGXYLabelPainter
addPropertyChangeListener, firePropertyChangeEvent, getDisplayName, getLabelIndex, getLabelLocation, getLocationIndex, getObject, getSubLabelIndex, labelSnapTarget, removePropertyChangeListener, setDisplayName, setLabelIndex, setLabelLocation, setLocationIndex, setObject, setSubLabelIndex, supportLabelSnapMethods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface com.luciad.view.gxy.ILcdGXYLabelEditor
getDisplayName, getLabelIndex, getLabelLocation, getObject, getSubLabelIndex, setLabelIndex, setLabelLocation, setObject, setSubLabelIndexMethods inherited from interface com.luciad.util.ILcdPropertyChangeSource
addPropertyChangeListener, removePropertyChangeListener
-
Field Details
-
SOUTH_EAST
public static final int SOUTH_EASTInteger code to place label at south east of the anchor point.- See Also:
-
NORTH_WEST
public static final int NORTH_WESTInteger code to place label at north west of the anchor point.- See Also:
-
NORTH_EAST
public static final int NORTH_EASTInteger code to place label at north east of the anchor point.- See Also:
-
SOUTH_WEST
public static final int SOUTH_WESTInteger code to place label at south west of the anchor point.- See Also:
-
EAST
public static final int EASTInteger code to place label at east of the anchor point.- See Also:
-
WEST
public static final int WESTInteger code to place label at west of the anchor point.- See Also:
-
NORTH
public static final int NORTHInteger code to place label at north of the anchor point.- See Also:
-
SOUTH
public static final int SOUTHInteger code to place label at south of the anchor point.- See Also:
-
CENTER
public static final int CENTERInteger code to place label at center of the anchor point.- See Also:
-
MAXIMUM_AVAILABLE_LOCATIONS
public static int MAXIMUM_AVAILABLE_LOCATIONSMaximum number of available locations.
-
-
Constructor Details
-
TLcdGXYLabelPainterAdapter
Creates a new label painter adapter that makes a label painter out of anILcdGXYPainter. NoILcdGXYEditoris set.- Parameters:
aDelegatePainter- the delegate painter.
-
TLcdGXYLabelPainterAdapter
Creates a new label painter adapter that makes a label painter out of anILcdGXYPainterand aILcdGXYEditor.- Parameters:
aDelegatePainter- the delegate painter.aDelegateEditor- the delegate editor.
-
-
Method Details
-
getDelegatePainter
Returns the delegate painter.- Returns:
- the delegate painter.
-
isWithPin
public boolean isWithPin()Returns whether or not this painter draws a line (the "pin") from the label to the anchor point of the domain object.- Returns:
trueif the pin is drawn,falseif not.
-
setWithPin
public void setWithPin(boolean aWithPin) Specifies whether or not a line (the "pin") should be drawn from the label to the anchor point of the domain object.- Parameters:
aWithPin-trueif the pin should be drawn,falseif not.
-
setPinStyle
Sets the painter style to be used when painting the pin. ItssetupGraphicsmethod will be called right before the pin is drawn.- Parameters:
aPinStyle- The pin style to use when drawing the pin. This must not benull.
-
getPinStyle
Returns the painter style that is used when drawing the pin.- Returns:
- The painter style that is used when drawing the pin. This is never
null.
-
isMakeLabelsStickyOnEdit
public boolean isMakeLabelsStickyOnEdit()Returns whether this editor makes a label sticky when it edits this label. The default isfalse- Returns:
trueif this label editor makes a label sticky when it edits this label,falseotherwise.- See Also:
-
setMakeLabelsStickyOnEdit
public void setMakeLabelsStickyOnEdit(boolean aMakeLabelsStickyOnEdit) Determines whether this editor makes a label sticky when it edits this label.- Parameters:
aMakeLabelsStickyOnEdit-trueif the label should be made sticky,falseotherwise.- See Also:
-
paintLabel
Description copied from interface:ILcdGXYLabelPainter2Paints the label specified by
setObject,setLabelIndexandsetSubLabelIndexonaGraphics.aGXYContextshould contain theILcdGXYViewfor which the label is painted andILcdGXYLayerto which the object belongsThe implementation of this method shall define how to paint the specified label in the given mode, considering
aGXYContextand the setTLcdLabelLocation.The domain object, label index, sublabel index and the label location should be set before calling this method using the respective methods.
This interface extends the original contract of the paintLabel method to allow for more modes. Where in the super interface the mode could only be one of
ILcdGXYLabelPainter.DEFAULTorILcdGXYLabelPainter.SELECTED, the mode now can be a bitwise combination of several constants- Specified by:
paintLabelin interfaceILcdGXYLabelPainter- Specified by:
paintLabelin interfaceILcdGXYLabelPainter2- Parameters:
aGraphics- The graphics object to paint the label onaMode- A bitwise combination ofaGXYContext- the drawing context for the label- See Also:
-
anchorPointSFCT
protected void anchorPointSFCT(Graphics aGraphics, int aMode, ILcdGXYContext aContext, Point aPointSFCT) throws TLcdNoBoundsException This method retrieves an anchor point using the correspondingILcdGXYPainterfor the Object to be painted (aGXYContext.getGXYLayer().getGXYPainter( aObject )).When the set
TLcdLabelLocationcan retrieve an anchor point, this anchor point should be returned.- Parameters:
aGraphics- the Graphics for which the labels anchor point should be calculated.aMode- the mode for the which the label anchor point should be calculated. Can be ILcdGXYLabelPainter.SELECTED or ILcdGXYLabelPainter.DEFAULT.aContext- the context in which this label will be painted.aPointSFCT- the point that will be moved to the anchor point computed.- Throws:
TLcdNoBoundsException- if the Object doesn't have any valid anchor point, e.g. if it is always invisible in the current projection.
-
getPossibleLocationCount
Description copied from interface:ILcdGXYLabelPainterReturns the number of possible locations where thisILcdGXYLabelPaintercan paint/draw the labels of the set domainObject.The domain
Objectfor which the location count is retrieved should be set before calling this method using theILcdGXYLabelPainter.setObject(java.lang.Object)method.- Specified by:
getPossibleLocationCountin interfaceILcdGXYLabelPainter- Parameters:
aGraphics- the Graphics the label will be painted on.- Returns:
- the number of possible locations where this
ILcdGXYLabelPaintercan paint/draw the labels of the set Object. - See Also:
-
labelBoundsSFCT
public double labelBoundsSFCT(Graphics aGraphics, int aMode, ILcdGXYContext aGXYContext, Rectangle aRectangleSFCT) throws TLcdNoBoundsException Calculates the bounds of the label that can be painted. The bounds are set as a side effect in
aRectangleSFCT, the orientation ofaRectangleSFCTis returned as an angle.The bounds represent the upper left point of the label, and a width and a height. The rotation value represents the rotation of the label bounds around the upper left point.
The domain object, the label index, the sublabel index and the location of the label for which the bounds are retrieved should be set before calling this method using the respective methods.
Note that if this label painter is used in conjunction with a labeling algorithm, the bounds should preferably be independent of the location, as this will yield the best results.
Please refer to
paintLabelfor documentation on which information is passed to the delegate painters.- Specified by:
labelBoundsSFCTin interfaceILcdGXYLabelPainter- Specified by:
labelBoundsSFCTin interfaceILcdGXYLabelPainter2- Parameters:
aGraphics- theaGraphicsto consider.aMode- the representation mode of the label.aGXYContext- theILcdGXYContextthe drawing depends on.aRectangleSFCT- theRectanglecontaining the bounds of the label in view / graphics coordinates as side effect.- Returns:
- the angle orientation of the rectangle around the labels in RADIANs, clockwise, 0 at 3 o'clock.
- Throws:
TLcdNoBoundsException- if the Object doesn't have any valid bounds, e.g. if it is always invisible in the current projection.- See Also:
-
isLabelTouched
Tests if the label specified bysetObject,setLabelIndexandsetSubLabelIndexis touched at view location(specified by aGXYContext.getX()andaGXYContext.getY()), considering the mode and theILcdGXYContextinstance.Before calling this method, the domain object, the label index, the sublabel index and the location of the label should be set using the respective methods.
Please refer to
paintLabelfor documentation on which information is passed to the delegate painters.- Specified by:
isLabelTouchedin interfaceILcdGXYLabelPainter2- Parameters:
aGraphics- TheGraphicsinstance on which the label is painted.aMode- the mode to consider. This is a bitwise combinations of several constants. SeeILcdGXYLabelPainter2.paintLabel(java.awt.Graphics, int, com.luciad.view.gxy.ILcdGXYContext)for more information.aGXYContext- theILcdGXYContextto consider.- Returns:
- true if the representation of the Object returned by getObject() is touched, false otherwise
- See Also:
-
labelAnchorPointSFCT
public void labelAnchorPointSFCT(Graphics aGraphics, int aMode, ILcdGXYContext aGXYContext, Point aPointSFCT) throws TLcdNoBoundsException Sets
aPointSFCTto the anchor point of the label specified bysetObject,setLabelIndexandsetSubLabelIndex.If the location index is less than 0, the label anchor point is unambiguously determined by the
label location. The actual label is to be painted somewhere around this anchor point. This method is typically called to compare the result with the label bounds, thus determining the exact relation between thelabeland itslocation.Before calling this method, the domain object, the label index, the sublabel index and the location of the label should be set using the respective methods.
Please refer to
paintLabelfor documentation on which information is passed to the delegate painters.- Specified by:
labelAnchorPointSFCTin interfaceILcdGXYLabelPainter2- Parameters:
aGraphics- TheGraphicsinstance on which the label is painted.aMode- The mode to consider. This can be a bitwise combination of several constants. SeeILcdGXYLabelPainter2.paintLabel(java.awt.Graphics, int, com.luciad.view.gxy.ILcdGXYContext)for more information.aGXYContext- TheILcdGXYContextthat can be used to retrieve extra information.aPointSFCT- The point which will be updated to reflect the location of the anchor point.- Throws:
TLcdNoBoundsException- if the Object doesn't have any valid anchor point, e.g. if it is always invisible in the current projection.- See Also:
-
getLabelCursor
Description copied from class:ALcdGXYLabelPainterReturns aCursorto indicate the type of editingaModeandaGXYContext.This default implementation always returns
null. Override this method if you want to display custom cursors.- Specified by:
getLabelCursorin interfaceILcdGXYLabelPainter2- Overrides:
getLabelCursorin classALcdGXYLabelPainter- Parameters:
aGraphics- TheGraphicsinstance on which the label is painted.aMode- The mode to consider. SeeILcdGXYLabelPainter2.paintLabel(java.awt.Graphics, int, ILcdGXYContext)for more information.aGXYContext- TheILcdGXYContextcontaining extra information, such as the layer, the view and the mouse position.- Returns:
- a
Cursorto indicate the type of editingaModeandaGXYContext. Returnsnullif no particularCursoris required.
-
getLabelCount
Return the number of labels for the currently set object. The default implementation returns
1. Override this method if you need to support multiple labels.This implementation always returns 1.
- Specified by:
getLabelCountin interfaceILcdGXYLabelEditor- Specified by:
getLabelCountin interfaceILcdGXYMultiLabelPainter- Overrides:
getLabelCountin classALcdGXYLabelPainter- Parameters:
aGraphics- TheGraphicsinstance on which the labels would be painted.aGXYContext- The context containing information about the layer and the view for which the label would be drawn.- Returns:
- The number of labels for the set object. This should be greater than
0.
-
getSubLabelCount
public int getSubLabelCount(int aLabelIndex) Returns the number of sublabels for the set object and the given label index. The default implementation returns
1. Override this method if you need to support multiple sublabels.This implementation always returns 1.
- Specified by:
getSubLabelCountin interfaceILcdGXYLabelEditor- Specified by:
getSubLabelCountin interfaceILcdGXYMultiLabelPainter- Overrides:
getSubLabelCountin classALcdGXYLabelPainter- Parameters:
aLabelIndex- The label index for which you need to know the number of sublabels.- Returns:
- The number of sublabels. This should be greater than
0. - See Also:
-
getGXYLabelEditor
Description copied from interface:ILcdGXYLabelEditorProviderReturns a valid
ILcdGXYLabelEditorfor editing the labels of aObject. The returnedILcdGXYLabelEditormust haveaObjectset on it. The TLcdLabelLocation must not yet be set on it.- Specified by:
getGXYLabelEditorin interfaceILcdGXYLabelEditorProvider- Parameters:
aObject- the Object for which to obtain aILcdGXYLabelEditor.- Returns:
- a valid
ILcdGXYLabelEditorfor editing the labels ofaObjectwithaObjectset on it. - See Also:
-
getGXYLabelPainter
Description copied from interface:ILcdGXYLabelPainterProviderFinds anILcdGXYLabelPainterthat can be used to label the object passed.The label painter provider is responsible for setting the object to the label painter before returning the label painter. An implementation should therefore have the following structure:
public ILcdGXYLabelPainter getGXYLabelPainter(Object aObject) { ILcdGXYLabelPainter labelPainter = ... // find the label painter for the object if (labelPainter != null) { labelPainter.setObject(aObject); } return labelPainter; }- Specified by:
getGXYLabelPainterin interfaceILcdGXYLabelPainterProvider- Parameters:
aObject- the object to find a label painter for- Returns:
- a label painter that can be used to label the object; or null if no label painter could be found for the given object, or the object could not be set on the retrieved label painter.
-
editLabel
Description copied from interface:ILcdGXYLabelEditorAdapts the set
TLcdLabelLocationaccording to the information present in aGXYContext. If the method returnstrue, theTLcdLabelLocationwas modified, iffalseis returned, it wasn't changed.The implementation of this method shall define how to edit the label specified by the set domain
Object, label index and sublabel index, considering the given mode andaGXYContext. These should all be set before calling this method. Note that ifaModeis one of the creating modes, the (sub) label indices are irrelevant.- Specified by:
editLabelin interfaceILcdGXYLabelEditor- Parameters:
aGraphics- TheGraphicson which the label is painted.aMode- the mode to consider when editing aObject: aMode shall be a combination ofILcdGXYLabelEditor.TRANSLATED,ILcdGXYLabelEditor.RESHAPED,ILcdGXYLabelEditor.START_CREATION,ILcdGXYLabelEditor.CREATING,ILcdGXYLabelEditor.END_CREATION.
aGXYContext- contains the information to consider when editing the set Object.- Returns:
- true if the label of the set Object has changed, false otherwise.
- See Also:
-
getLabelCreationClickCount
public int getLabelCreationClickCount()Returns the number of points required to initialize the label of the setObject.This implementation always returns
0.- Specified by:
getLabelCreationClickCountin interfaceILcdGXYLabelEditor- Returns:
- the number of points required to initialize the label of the set
Objector -1 if this is undefined like for a polyline or a polygon. 0 means graphical creation of labels is not supported.
-
acceptSnapTargetForLabel
Description copied from interface:ILcdGXYLabelEditorReturns whether the label specified by
setObject,setLabelIndexandsetSubLabelIndexaccepts the snap target in the givenILcdGXYContext.The snap target is the
Objectreturned byaGXYContext.getSnapTarget(), and is on theILcdGXYLayerreturned byaGXYContext.getSnapTargetLayer().- Specified by:
acceptSnapTargetForLabelin interfaceILcdGXYLabelEditor- Parameters:
aGraphics- TheGraphicson which the label is painted.aGXYContext- TheILcdGXYContextcontaining the snapping information.- Returns:
trueif the label accepts the snap target,falseotherwise.- See Also:
-
clone
Description copied from class:ALcdGXYLabelPainterReturns a new instance of thisALcdGXYLabelPainter. The label location of the clone is a clone of the label location of the original. No other objects are cloned.- Specified by:
clonein interfaceILcdGXYLabelEditor- Specified by:
clonein interfaceILcdGXYLabelEditorProvider- Specified by:
clonein interfaceILcdGXYLabelPainter- Specified by:
clonein interfaceILcdGXYLabelPainter2- Specified by:
clonein interfaceILcdGXYLabelPainterProvider- Overrides:
clonein classALcdGXYLabelPainter- Returns:
- A new instance of this
ALcdGXYLabelPainterof which the label location is a deep clone.
-
setPositionList
public void setPositionList(int[] aPositionList) Sets a new position list. This list is only used when the labels are not placed freely.
- Parameters:
aPositionList- the list of possible positions to place the labels.- See Also:
-
getPositionList
public int[] getPositionList()Returns the list of possible positions to place the labels.- Returns:
- the list of possible positions to place the labels.
- See Also:
-
setShiftLabelPosition
public void setShiftLabelPosition(int aShift) Sets how many pixels the label must be removed from the anchor point of the domain object when labels are not placed freely (i.e.
getLabelLocation().getLocationIndex() != -1). If the position of the label iseastorwest, this shift is applied in horizontal direction; if the position isnorthorsouth, this shift is applied in vertical direction. In case ofnorth east,south east,south westornorth west, this shift is applied in both directions. If the location of the label iscenter, the shift is ignored.The default for this value is
20pixels.- Parameters:
aShift- the distance, expressed in pixels, that the label must be removed from the domain object.- See Also:
-
getShiftLabelPosition
public int getShiftLabelPosition()Returns how many pixels the label must be removed from the anchor point of the domain object when labels are not placed freely (i.e.getLabelLocation().getLocationIndex() != -1).- Returns:
- the distance, expressed in pixels, that the label must be removed from the domain object.
- See Also:
-
setClassTraceOn
public static void setClassTraceOn(boolean aClassTraceOn) Deprecated.This method has been deprecated. It is recommended to use the standard Java logging framework directly.Enables tracing for all instances of this class. If the argument istruethen all log messages are recorded, otherwise only the informative, warning and error messages are recorded.- Parameters:
aClassTraceOn- if true then all log messages are recorded, otherwise only the informative, warning and error messages are recorded.
-