Class TLcdGXYLabelPainterAdapter

java.lang.Object
com.luciad.view.gxy.ALcdGXYLabelPainter
com.luciad.view.gxy.painter.TLcdGXYLabelPainterAdapter
All Implemented Interfaces:
ILcdPropertyChangeSource, ILcdGXYLabelEditor, ILcdGXYLabelEditorProvider, ILcdGXYLabelPainter, ILcdGXYLabelPainter2, ILcdGXYLabelPainterProvider, ILcdGXYMultiLabelPainter, Serializable, Cloneable

public class TLcdGXYLabelPainterAdapter extends ALcdGXYLabelPainter implements ILcdGXYLabelPainterProvider, ILcdGXYLabelEditor, ILcdGXYLabelEditorProvider
This label painter adapts an 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 Details

    • SOUTH_EAST

      public static final int SOUTH_EAST
      Integer code to place label at south east of the anchor point.
      See Also:
    • NORTH_WEST

      public static final int NORTH_WEST
      Integer code to place label at north west of the anchor point.
      See Also:
    • NORTH_EAST

      public static final int NORTH_EAST
      Integer code to place label at north east of the anchor point.
      See Also:
    • SOUTH_WEST

      public static final int SOUTH_WEST
      Integer code to place label at south west of the anchor point.
      See Also:
    • EAST

      public static final int EAST
      Integer code to place label at east of the anchor point.
      See Also:
    • WEST

      public static final int WEST
      Integer code to place label at west of the anchor point.
      See Also:
    • NORTH

      public static final int NORTH
      Integer code to place label at north of the anchor point.
      See Also:
    • SOUTH

      public static final int SOUTH
      Integer code to place label at south of the anchor point.
      See Also:
    • CENTER

      public static final int CENTER
      Integer code to place label at center of the anchor point.
      See Also:
    • MAXIMUM_AVAILABLE_LOCATIONS

      public static int MAXIMUM_AVAILABLE_LOCATIONS
      Maximum number of available locations.
  • Constructor Details

    • TLcdGXYLabelPainterAdapter

      public TLcdGXYLabelPainterAdapter(ILcdGXYPainter aDelegatePainter)
      Creates a new label painter adapter that makes a label painter out of an ILcdGXYPainter. No ILcdGXYEditor is set.
      Parameters:
      aDelegatePainter - the delegate painter.
    • TLcdGXYLabelPainterAdapter

      public TLcdGXYLabelPainterAdapter(ILcdGXYPainter aDelegatePainter, ILcdGXYEditor aDelegateEditor)
      Creates a new label painter adapter that makes a label painter out of an ILcdGXYPainter and a ILcdGXYEditor.
      Parameters:
      aDelegatePainter - the delegate painter.
      aDelegateEditor - the delegate editor.
  • Method Details

    • getDelegatePainter

      public ILcdGXYPainter 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:
      true if the pin is drawn, false if 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 - true if the pin should be drawn, false if not.
    • setPinStyle

      public void setPinStyle(ILcdGXYPainterStyle aPinStyle)
      Sets the painter style to be used when painting the pin. Its setupGraphics method will be called right before the pin is drawn.
      Parameters:
      aPinStyle - The pin style to use when drawing the pin. This must not be null.
    • getPinStyle

      public ILcdGXYPainterStyle 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 is false
      Returns:
      true if this label editor makes a label sticky when it edits this label, false otherwise.
      See Also:
    • setMakeLabelsStickyOnEdit

      public void setMakeLabelsStickyOnEdit(boolean aMakeLabelsStickyOnEdit)
      Determines whether this editor makes a label sticky when it edits this label.
      Parameters:
      aMakeLabelsStickyOnEdit - true if the label should be made sticky, false otherwise.
      See Also:
    • paintLabel

      public void paintLabel(Graphics aGraphics, int aMode, ILcdGXYContext aGXYContext)
      Description copied from interface: ILcdGXYLabelPainter2

      Paints the label specified by setObject, setLabelIndex and setSubLabelIndex on aGraphics. aGXYContext should contain the ILcdGXYView for which the label is painted and ILcdGXYLayer to which the object belongs

      The implementation of this method shall define how to paint the specified label in the given mode, considering aGXYContext and the set TLcdLabelLocation.

      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.DEFAULT or ILcdGXYLabelPainter.SELECTED, the mode now can be a bitwise combination of several constants

      Specified by:
      paintLabel in interface ILcdGXYLabelPainter
      Specified by:
      paintLabel in interface ILcdGXYLabelPainter2
      Parameters:
      aGraphics - The graphics object to paint the label on
      aMode - A bitwise combination of
      aGXYContext - 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 corresponding ILcdGXYPainter for the Object to be painted (aGXYContext.getGXYLayer().getGXYPainter( aObject )).

      When the set TLcdLabelLocation can 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

      public int getPossibleLocationCount(Graphics aGraphics)
      Description copied from interface: ILcdGXYLabelPainter
      Returns the number of possible locations where this ILcdGXYLabelPainter can paint/draw the labels of the set domain Object.

      The domain Object for which the location count is retrieved should be set before calling this method using the ILcdGXYLabelPainter.setObject(java.lang.Object) method.

      Specified by:
      getPossibleLocationCount in interface ILcdGXYLabelPainter
      Parameters:
      aGraphics - the Graphics the label will be painted on.
      Returns:
      the number of possible locations where this ILcdGXYLabelPainter can 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 of aRectangleSFCT is 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 paintLabel for documentation on which information is passed to the delegate painters.

      Specified by:
      labelBoundsSFCT in interface ILcdGXYLabelPainter
      Specified by:
      labelBoundsSFCT in interface ILcdGXYLabelPainter2
      Parameters:
      aGraphics - the aGraphics to consider.
      aMode - the representation mode of the label.
      aGXYContext - the ILcdGXYContext the drawing depends on.
      aRectangleSFCT - the Rectangle containing 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

      public boolean isLabelTouched(Graphics aGraphics, int aMode, ILcdGXYContext aGXYContext)
      Tests if the label specified by setObject, setLabelIndex and setSubLabelIndex is touched at view location (specified by aGXYContext.getX() and aGXYContext.getY()), considering the mode and the ILcdGXYContext instance.

      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 paintLabel for documentation on which information is passed to the delegate painters.

      Specified by:
      isLabelTouched in interface ILcdGXYLabelPainter2
      Parameters:
      aGraphics - The Graphics instance on which the label is painted.
      aMode - the mode to consider. This is a bitwise combinations of several constants. See ILcdGXYLabelPainter2.paintLabel(java.awt.Graphics, int, com.luciad.view.gxy.ILcdGXYContext) for more information.
      aGXYContext - the ILcdGXYContext to 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 aPointSFCT to the anchor point of the label specified by setObject, setLabelIndex and setSubLabelIndex.

      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 the label and its location.

      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 paintLabel for documentation on which information is passed to the delegate painters.

      Specified by:
      labelAnchorPointSFCT in interface ILcdGXYLabelPainter2
      Parameters:
      aGraphics - The Graphics instance on which the label is painted.
      aMode - The mode to consider. This can be a bitwise combination of several constants. See ILcdGXYLabelPainter2.paintLabel(java.awt.Graphics, int, com.luciad.view.gxy.ILcdGXYContext) for more information.
      aGXYContext - The ILcdGXYContext that 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

      public Cursor getLabelCursor(Graphics aGraphics, int aMode, ILcdGXYContext aGXYContext)
      Description copied from class: ALcdGXYLabelPainter
      Returns a Cursor to indicate the type of editing aMode and aGXYContext.

      This default implementation always returns null. Override this method if you want to display custom cursors.

      Specified by:
      getLabelCursor in interface ILcdGXYLabelPainter2
      Overrides:
      getLabelCursor in class ALcdGXYLabelPainter
      Parameters:
      aGraphics - The Graphics instance on which the label is painted.
      aMode - The mode to consider. See ILcdGXYLabelPainter2.paintLabel(java.awt.Graphics, int, ILcdGXYContext) for more information.
      aGXYContext - The ILcdGXYContext containing extra information, such as the layer, the view and the mouse position.
      Returns:
      a Cursor to indicate the type of editing aMode and aGXYContext. Returns null if no particular Cursor is required.
    • getLabelCount

      public int getLabelCount(Graphics aGraphics, ILcdGXYContext aGXYContext)

      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:
      getLabelCount in interface ILcdGXYLabelEditor
      Specified by:
      getLabelCount in interface ILcdGXYMultiLabelPainter
      Overrides:
      getLabelCount in class ALcdGXYLabelPainter
      Parameters:
      aGraphics - The Graphics instance 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:
      getSubLabelCount in interface ILcdGXYLabelEditor
      Specified by:
      getSubLabelCount in interface ILcdGXYMultiLabelPainter
      Overrides:
      getSubLabelCount in class ALcdGXYLabelPainter
      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

      public ILcdGXYLabelEditor getGXYLabelEditor(Object aObject)
      Description copied from interface: ILcdGXYLabelEditorProvider

      Returns a valid ILcdGXYLabelEditor for editing the labels of aObject. The returned ILcdGXYLabelEditor must have aObject set on it. The TLcdLabelLocation must not yet be set on it.

      Specified by:
      getGXYLabelEditor in interface ILcdGXYLabelEditorProvider
      Parameters:
      aObject - the Object for which to obtain a ILcdGXYLabelEditor.
      Returns:
      a valid ILcdGXYLabelEditor for editing the labels of aObject with aObject set on it.
      See Also:
    • getGXYLabelPainter

      public ILcdGXYLabelPainter getGXYLabelPainter(Object aObject)
      Description copied from interface: ILcdGXYLabelPainterProvider
      Finds an ILcdGXYLabelPainter that 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:
      getGXYLabelPainter in interface ILcdGXYLabelPainterProvider
      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

      public boolean editLabel(Graphics aGraphics, int aMode, ILcdGXYContext aGXYContext)
      Description copied from interface: ILcdGXYLabelEditor

      Adapts the set TLcdLabelLocation according to the information present in aGXYContext. If the method returns true, the TLcdLabelLocation was modified, if false is 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 and aGXYContext. These should all be set before calling this method. Note that if aMode is one of the creating modes, the (sub) label indices are irrelevant.

      Specified by:
      editLabel in interface ILcdGXYLabelEditor
      Parameters:
      aGraphics - The Graphics on which the label is painted.
      aMode - the mode to consider when editing aObject: aMode shall be a combination of
      • ILcdGXYLabelEditor.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 set Object.

      This implementation always returns 0.

      Specified by:
      getLabelCreationClickCount in interface ILcdGXYLabelEditor
      Returns:
      the number of points required to initialize the label of the set Object or -1 if this is undefined like for a polyline or a polygon. 0 means graphical creation of labels is not supported.
    • acceptSnapTargetForLabel

      public boolean acceptSnapTargetForLabel(Graphics aGraphics, ILcdGXYContext aGXYContext)
      Description copied from interface: ILcdGXYLabelEditor

      Returns whether the label specified by setObject, setLabelIndex and setSubLabelIndex accepts the snap target in the given ILcdGXYContext.

      The snap target is the Object returned by aGXYContext.getSnapTarget(), and is on the ILcdGXYLayer returned by aGXYContext.getSnapTargetLayer().

      Specified by:
      acceptSnapTargetForLabel in interface ILcdGXYLabelEditor
      Parameters:
      aGraphics - The Graphics on which the label is painted.
      aGXYContext - The ILcdGXYContext containing the snapping information.
      Returns:
      true if the label accepts the snap target, false otherwise.
      See Also:
    • clone

      public Object clone()
      Description copied from class: ALcdGXYLabelPainter
      Returns a new instance of this ALcdGXYLabelPainter. The label location of the clone is a clone of the label location of the original. No other objects are cloned.
      Specified by:
      clone in interface ILcdGXYLabelEditor
      Specified by:
      clone in interface ILcdGXYLabelEditorProvider
      Specified by:
      clone in interface ILcdGXYLabelPainter
      Specified by:
      clone in interface ILcdGXYLabelPainter2
      Specified by:
      clone in interface ILcdGXYLabelPainterProvider
      Overrides:
      clone in class ALcdGXYLabelPainter
      Returns:
      A new instance of this ALcdGXYLabelPainter of 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 is east or west, this shift is applied in horizontal direction; if the position is north or south, this shift is applied in vertical direction. In case of north east, south east, south west or north west, this shift is applied in both directions. If the location of the label is center, the shift is ignored.

      The default for this value is 20 pixels.

      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 is true then 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.