Class TLcdGXYMultiFontLabelPainter

All Implemented Interfaces:
ILcdPropertyChangeSource, ILcdGXYLabelEditor, ILcdGXYLabelEditorProvider, ILcdGXYLabelPainter, ILcdGXYLabelPainter2, ILcdGXYLabelPainterProvider, ILcdGXYMultiLabelPainter, Serializable, Cloneable

public class TLcdGXYMultiFontLabelPainter extends TLcdGXYStampLabelPainter

TLcdGXYMultiFontLabelPainter is an implementation of ILcdGXYLabelPainter2 that paints textual labels using multiple fonts or colors. The appearance of this text, such as the font, the color, framing etc., can be configured with the appropriate methods.

Like its parent class, TLcdGXYStampLabelPainter, this label painter supports discrete placement of the labels as well as free placement. See TLcdGXYStampLabelPainter for more information on how to configure these placements.

The text of the labels to be drawn are given by the method retrieveLabels. This method can be redefined for specific needs (by default it returns an array of 1 String containing Object.toString().

Each line of the label can be drawn with a different Font and Color. The fonts and colors to be used are given by the methods retrieveFonts and retrieveForegroundColors. These methods can be redefined for specific needs.

For more flexible formatting, use TLcdGXYLabelPainter in combination with HTML styling.

The label editing facilities provided by this class are the same as its parent class. Please refer to the documentation of the parent class for more information.

See Also:
  • Field Details

    • SOUTH_EAST

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

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

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

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

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

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

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

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

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

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

    • TLcdGXYMultiFontLabelPainter

      public TLcdGXYMultiFontLabelPainter()
      Creates a label painter with the default settings.
    • TLcdGXYMultiFontLabelPainter

      public TLcdGXYMultiFontLabelPainter(TLcdGXYMultiFontLabelPainter aPainter)
      Clone constructor. All property values of the given label painter are copied.
      Parameters:
      aPainter - the label painter to copy all properties from.
  • Method Details

    • setGXYLabelStamp

      public void setGXYLabelStamp(ALcdGXYLabelStamp aGXYLabelStamp)
      Overridden to throw an UnsupportedOperationException. This label painter installs its own label stamp and relies on its presence for proper operation.
      Parameters:
      aGXYLabelStamp - Any label stamp.
    • 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
      Returns:
      A new instance of this ALcdGXYLabelPainter of which the label location is a deep clone.
    • setObject

      public void setObject(Object aObject)
      Description copied from interface: ILcdGXYLabelPainter2
      Sets the Object to be labeled by this ILcdGXYLabelPainter.

      Setting the object should set the TLcdLabelLocation to null, to ensure that older code which has not been adapted to this new interface keeps working.

      Specified by:
      setObject in interface ILcdGXYLabelEditor
      Specified by:
      setObject in interface ILcdGXYLabelPainter
      Specified by:
      setObject in interface ILcdGXYLabelPainter2
      Overrides:
      setObject in class ALcdGXYLabelPainter
      Parameters:
      aObject - The object to be labeled.
      See Also:
    • setLabelIndex

      public void setLabelIndex(int aLabelIndex)
      Description copied from interface: ILcdGXYMultiLabelPainter

      Sets the label. The results of any subsequent method calls to ILcdGXYLabelPainter.paintLabel(java.awt.Graphics, int, com.luciad.view.gxy.ILcdGXYContext) and ILcdGXYLabelPainter.labelBoundsSFCT(java.awt.Graphics, int, com.luciad.view.gxy.ILcdGXYContext, java.awt.Rectangle) etc. will apply to the label and sublabel indicated by this label index.

      Specified by:
      setLabelIndex in interface ILcdGXYLabelEditor
      Specified by:
      setLabelIndex in interface ILcdGXYMultiLabelPainter
      Overrides:
      setLabelIndex in class ALcdGXYLabelPainter
      Parameters:
      aLabelIndex - The label index. This should be larger than or equal to 0 and less than the result ILcdGXYMultiLabelPainter.getLabelCount(java.awt.Graphics, com.luciad.view.gxy.ILcdGXYContext).
      See Also:
    • setSubLabelIndex

      public void setSubLabelIndex(int aSubLabelIndex)
      Description copied from interface: ILcdGXYMultiLabelPainter
      Sets the sublabel index. The results of any subsequent method calls to ILcdGXYLabelPainter.paintLabel(java.awt.Graphics, int, com.luciad.view.gxy.ILcdGXYContext) and ILcdGXYLabelPainter.labelBoundsSFCT(java.awt.Graphics, int, com.luciad.view.gxy.ILcdGXYContext, java.awt.Rectangle) etc. will apply to the label and sublabel indicated by this sublabel index.
      Specified by:
      setSubLabelIndex in interface ILcdGXYLabelEditor
      Specified by:
      setSubLabelIndex in interface ILcdGXYMultiLabelPainter
      Overrides:
      setSubLabelIndex in class ALcdGXYLabelPainter
      Parameters:
      aSubLabelIndex - The sub label index. This should be larger than or equal to 0 and less than the result ILcdGXYMultiLabelPainter.getSubLabelCount(int).
      See Also:
    • retrieveLabels

      protected String[] retrieveLabels(int aMode, ILcdGXYContext aGXYContext)
      Retrieves the labels to be painted for the set Object. This method is called within the paintLabel method. By default, it returns an array of one String containing aObject.toString(). Re-define this method in sub-classes for returning other labels. Never modify the content of the returned array.
      Parameters:
      aMode - The label painting mode. This can be ILcdGXYLabelPainter.DEFAULT or ILcdGXYLabelPainter.SELECTED.
      aGXYContext - The ILcdGXYContext for painting.
      Returns:
      An array of Strings representing the different lines of the label.
    • retrieveFonts

      protected Font[] retrieveFonts(int aLabelSize, int aMode, ILcdGXYContext aGXYContext)
      Retrieves the Fonts to be used for painting the successive lines of the label. The size of the returned array should always be larger or equal to aLabelSize. This implementation returns
      • The fonts returned by getFonts() if this array is large enough.
      • An array of length aLabelSize otherwise. The first getFonts().length entries will be equal to those returned by getFonts(), the rest will be filled with the defaultFont.
      Re-define this method if needed.
      Parameters:
      aLabelSize - The minimum size of the array to return.
      aMode - The painting mode. This can be ILcdGXYLabelPainter.DEFAULT or ILcdGXYLabelPainter.SELECTED.
      aGXYContext - The ILcdGXYContext for painting.
      Returns:
      The Fonts to be used for painting the successive lines of the label.
      See Also:
    • retrieveForegroundColors

      protected Color[] retrieveForegroundColors(int aLabelSize, int aMode, ILcdGXYContext aGXYContext)
      Retrieves the foreground Colors to be used for painting the successive lines of the label. The size of the returned array should always be larger or equal to aLabelSize. This implementation returns the selection color returned by getSelectionColor() if the painting mode contains ILcdGXYLabelPainter.SELECTED, and the following otherwise:
      • The Colors returned by getForegroundColors() if this array is large enough.
      • An array of length aLabelSize otherwise. The first getForegroundColors().length entries will be equal to those returned by getForegroundColors(), the rest will be filled with the defaultForegroundColor.
      Re-define this method if needed.
      Parameters:
      aLabelSize - The minimum size of the array to return.
      aMode - The painting mode. This can be ILcdGXYLabelPainter.DEFAULT or ILcdGXYLabelPainter.SELECTED.
      aGXYContext - The ILcdGXYContext for painting.
      Returns:
      The foreground Colors to be used for painting the successive lines of the label.
      See Also:
    • paintLabel

      public void paintLabel(Graphics aGraphics, int aMode, ILcdGXYContext aGXYContext)
      Performs the label painting. This method retrieves the anchor point, and gets an array of labels to paint (retrieveLabels(aObject,aGXYContext)).
      Specified by:
      paintLabel in interface ILcdGXYLabelPainter
      Specified by:
      paintLabel in interface ILcdGXYLabelPainter2
      Parameters:
      aGraphics - the Graphics on which the label will be painted.
      aMode - the mode for which the label should be painted. This can be either ILcdGXYLabelPainter.DEFAULT or ILcdGXYLabelPainter.SELECTED.
      aGXYContext - the context in which the label will be painted.
      See Also:
    • calculateMaxLabelWidth

      protected int calculateMaxLabelWidth(String[] aLabelArray, Font[] aFontArray, Graphics aGraphics)
      Calculates the maximum width for a label when painting the given String objects with the given fonts on the given Graphics object.
      Parameters:
      aLabelArray - the String objects to be painted for this label.
      aFontArray - the fonts to use to draw the label lines.
      aGraphics - the Graphics the label is painted on.
      Returns:
      the labels width when when painting the String objects with the given fonts on the given Graphics object.
    • calculatLabelHeight

      protected int calculatLabelHeight(String[] aLabelArray, Font[] aFontArray, Graphics aGraphics)
      Calculates the label height when painting the given String objects with the given fonts on the given Graphics object.
      Parameters:
      aLabelArray - the String objects to be painted for this label.
      aFontArray - the fonts to use to draw the label lines.
      aGraphics - the Graphics the label is painted on.
      Returns:
      the labels height when when painting the String objects with the given fonts on the given Graphics object.
    • labelPositionForLocationIndexSFCT

      protected final double labelPositionForLocationIndexSFCT(int aLocationIndex, int aWidth, int aHeight, Point aAnchorPoint, int aMode, ILcdGXYContext aGXYContext, Graphics aGraphics, Point aPointSFCT)

      Calculates the upper left corner of the label, using getUpperLeftPointSFCT(java.awt.Point, java.lang.String[], int, java.awt.Font[], java.awt.Graphics, java.awt.Point). The label is not rotated.

      This method is only called when the labels are placed discretely, that is, the location index is not -1.

      Parameters:
      aLocationIndex - the location index. This index is non-negative, thus representing a fixed label location.
      aWidth - the width of the label.
      aHeight - the height of the label.
      aAnchorPoint - The anchor point, retrieved using #anchorPointSFCT.
      aMode - the mode to consider.
      aGXYContext - the context.
      aGraphics - the Graphics.
      aPointSFCT - This point should be moved to the upper left label corner.
      Returns:
      the rotation of the label in radians. This rotation is applied in counter-clockwise direction and a rotation of 0 indicates regular horizontally painted text. The origin of the rotation is the upper left corner of the label, which is returned by this method through the aPointSFCT parameter as a side effect.
    • getUpperLeftPointSFCT

      protected void getUpperLeftPointSFCT(Point aAnchorPoint, String[] aLabelArray, int aMaxLabelWidth, Font[] aFonts, Graphics aGraphics, Point aLocationPointSFCT)
      Calculates the upper left corner of label and moves a point to that position, when the label has an anchor point aAnchorPoint, taking into account the horizontal and vertical shifts set, the position index and the fonts.
      Parameters:
      aAnchorPoint - the anchor point of the label.
      aLabelArray - the String objects to be used as label.
      aMaxLabelWidth - the maximum label width.
      aFonts - the fonts used to paint this label.
      aGraphics - the Graphics this label will be painted on.
      aLocationPointSFCT - the point to be moved.
      See Also:
    • pinPointSFCT

      protected boolean pinPointSFCT(Graphics aGraphics, int aMode, ILcdGXYContext aGXYContext, Point aAnchorPoint, Rectangle aLabelBounds, double aRotation, Point aPinPointSFCT)
      Determines where the pin attaches to the label. This implementation attaches the pin on the label bounds, with the pin going towards the center of the label bounds.
      Parameters:
      aGraphics - The Graphics instance on which the pin will be painted.
      aMode - The mode in which the pin will be painted. See ILcdGXYLabelPainter2.paintLabel(java.awt.Graphics, int, ILcdGXYContext) for more information.
      aGXYContext - The instance containing the context in which the pin will be painted.
      aAnchorPoint - The point in AWT coordinates where the pin attaches to the object representation (see #anchorPointSFCT)
      aLabelBounds - The bounds of the label in AWT coordinates.
      aRotation - The rotation of the label in radians, positive going from the x to the y axis
      aPinPointSFCT - The point in AWT coordinates where the pin attaches to the label
      Returns:
      Whether or not the pin needs to be drawn.
      See Also:
    • getPinPointSFCT

      protected void getPinPointSFCT(Point aAnchorPoint, String[] aLabelArray, int aMaxLabelWidth, Font[] aFonts, Graphics aGraphics, Point aPinLocationSFCT)
      Calculates the position where the pin should start at the label side and and moves a point to that position, when the label has an anchor point aAnchorPoint, taking into account the horizontal and vertical shifts, position index, the label width and height.
      Parameters:
      aAnchorPoint - the anchor point of the label
      aLabelArray - the String objects to be used as label
      aMaxLabelWidth - the maximum label width
      aFonts - the fonts to paint the label lines in.
      aGraphics - the Graphics on which the label will be painted.
      aPinLocationSFCT - the point to be moved.
      See Also:
    • labelBoundsSFCT

      public double labelBoundsSFCT(Graphics aGraphics, int aMode, ILcdGXYContext aGXYContext, Rectangle aRectangleSFCT) throws TLcdNoBoundsException

      Implements the ILcdGXYLabelPainter.labelBoundsSFCT. Calculates the bounds of the label rectangle that has to be drawn. The bounds are stored in a rectangle, the angle is returned. This painter does not allow the labels to be drawn at an angle.

      The bounds will include the pin too if both properties isWithPin and isConsiderPinForBounds return true

      .
      Specified by:
      labelBoundsSFCT in interface ILcdGXYLabelPainter
      Specified by:
      labelBoundsSFCT in interface ILcdGXYLabelPainter2
      Parameters:
      aGraphics - the Graphics on which the label bounds should be calculated.
      aMode - the mode for which the label bounds should be calculated. This can be either ILcdGXYLabelPainter.DEFAULT or ILcdGXYLabelPainter.SELECTED.
      aGXYContext - the context in which the label will be painted.
      aRectangleSFCT - the rectangle to transform to the labels bounds as a side effect.
      Returns:
      0.0 .
      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:
    • setBackgroundColor

      public void setBackgroundColor(Color aBackgroundColor)
      Sets the color of the label frames filling to newBackground.
      Parameters:
      aBackgroundColor - the color to be used for the label frames filling.
      See Also:
    • getBackgroundColor

      public Color getBackgroundColor()
      Gets the color of the label frames filling.
      Returns:
      the color of the label frames filling.
      See Also:
    • setSelectionColor

      public void setSelectionColor(Color aSelectionColor)
      Sets the color of the label of a selected object that this TLcdGXYLabelPainter.ABOVE draws labels for, to aSelectionColor.
      Parameters:
      aSelectionColor - the color to use to paint labels for selected objects.
      See Also:
    • getSelectionColor

      public Color getSelectionColor()
      Gets the color of the label of a selected object that this TLcdGXYLabelPainter.ABOVE draws labels for.
      Returns:
      the color labels for selected objects are painted in.
      See Also:
    • setWithFrame

      public void setWithFrame(boolean aWithFrame)
      Labels can be drawn surrounded by a frame, the frame property determines whether to frame the labels. Sets the property frame to aFramed.
      Parameters:
      aWithFrame - true to paint the labels in a frame.
      See Also:
    • isWithFrame

      public boolean isWithFrame()
      Labels can be drawn surrounded by a frame, the frame property determines whether to frame the labels.
      Returns:
      whether labels will be painted in frames.
      See Also:
    • setFilled

      public void setFilled(boolean aFilled)
      Labels can be drawn surrounded by a filled background, the filled property determines whether to draw a filled rectangle behind the labels. Sets the property filled to aFilled.
      Parameters:
      aFilled - true to paint labels with a filled background.
      See Also:
    • isFilled

      public boolean isFilled()
      Labels can be drawn surrounded by a filled background, the filled property determines whether to draw a filled rectangle behind the labels.
      Returns:
      true if filled holds true, else false is returned.
      See Also:
    • setPadding

      public void setPadding(int aPadding)
      Sets the amount of padding around the label text, in pixels. If the frame is painted, it will be painted around this margin.
      Parameters:
      aPadding - the new padding size, in pixels
      See Also:
    • getPadding

      public int getPadding()
      Returns the amount of padding used around the text.
      Returns:
      the padding around the text, in pixels
      See Also:
    • setVerticalSpacing

      public void setVerticalSpacing(int aVerticalSpacing)
      The value of the property VerticalSpacing represents the vertical distance in pixels between successive features.
      Parameters:
      aVerticalSpacing - the vertical distance to be used between lines of a label.
      See Also:
    • getVerticalSpacing

      public int getVerticalSpacing()
      The value of the property VerticalSpacing represents the vertical distance in pixels between successive features.
      Returns:
      the vertical spacing used between lines in a label.
      See Also:
    • setConsiderPinForBounds

      public void setConsiderPinForBounds(boolean aConsiderPinForBounds)
      The property considerPinForBounds determines whether the pin should be taken into account for the bounds. This property is only useful in combination with isWithPin returning true.
      Parameters:
      aConsiderPinForBounds - true to incorporate the pin in the bounds calculations.
      See Also:
    • isConsiderPinForBounds

      public boolean isConsiderPinForBounds()

      The property considerPinForBounds determines whether the pin should be taken into account for the bounds. This property is only useful in combination with isWithPin returning true.

      The default value is false, i.e. not to include the pin within the label bounds.

      Returns:
      true if considerPinForBounds holds true, else false is returned.
      See Also:
    • getDefaultFont

      public Font getDefaultFont()
      Returns the value of the property defaultFont.
      Returns:
      The value of the property defaultFont.
      See Also:
    • setDefaultFont

      public void setDefaultFont(Font aDefaultFont)
      Sets the value of property defaultFont to aDefaultFont. The default font is used in case the method getFonts does not return enough Fonts for the label.
      Parameters:
      aDefaultFont - The new default font to be set.
      See Also:
    • getFonts

      public Font[] getFonts()
      Returns the fonts that will be used to paint the successive lines of the label.
      Returns:
      The fonts that will be used to paint the successive lines of the label.
      See Also:
    • setFonts

      public void setFonts(Font[] aFonts)
      Sets the array of Fonts that will be used to paint the successive lines of the label to aFonts. In case the label has more lines than there are Fonts, remaining lines will be painted with the defaultFont.
      Parameters:
      aFonts - The array of Fonts that will be used to paint the successive lines of the label.
      See Also:
    • getDefaultForegroundColor

      public Color getDefaultForegroundColor()
      Returns the value of the property defaultForegroundColor.
      Returns:
      The value of the property defaultForegroundColor.
      See Also:
    • setDefaultForegroundColor

      public void setDefaultForegroundColor(Color aDefaultForegroundColor)
      Sets the value of property defaultForegroundColor to aDefaultForegroundColor. The default foreground color is used in case the method getForegroundColors does not return enough Colors for the label. The defaultForegroundColor will also be used to paint the pin and the frame.
      Parameters:
      aDefaultForegroundColor - The new default foreground color to be set.
      See Also:
    • getForegroundColors

      public Color[] getForegroundColors()
      Returns the foreground colors that will be used to paint the successive lines of the label.
      Returns:
      The foreground colors that will be used to paint the successive lines of the label.
      See Also:
    • setForegroundColors

      public void setForegroundColors(Color[] aForegroundColors)
      Sets the array of foreground colors that will be used to paint the successive lines of the label to aForegroundColors. In case the label has more lines than there are foreground colors, remaining lines will be painted with the defaultForegroundColor.
      Parameters:
      aForegroundColors - The array of foreground colors that will be used to paint the successive lines of the label.
      See Also:
    • getPossibleLocationCount

      public int getPossibleLocationCount(Graphics aGraphics)
      Returns the number of possible locations to use (starting from the default position).
      Parameters:
      aGraphics - the Graphics the label will be painted on. Not used in this implementation.
      Returns:
      the number of possible locations to use (starting from the default position).
      See Also:
    • setPositionList

      public void setPositionList(int[] aPositionList)

      Sets a new position list. This list is only used when the labels are not placed freely. By default, all supported positions are offered: SOUTH_EAST, NORTH_WEST, NORTH_EAST, SOUTH_WEST, EAST, WEST, NORTH, SOUTH, and CENTER. See setShiftLabelPosition(int) for how these positions affect the label.

      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:
    • setPositionListAsString

      public void setPositionListAsString(String[] aPositionList)
      The labels can occupy various positions relative to the anchor point (see description above). The following entries for the String objects are valid (independent of the font case):
      • "C" or "center".
      • "N" or "north".
      • "S" or "south".
      • "E" or "east".
      • "W" or "west".
      • "SE" or "southeast"
      • "NE" or "northeast"
      • "SW" or "southwest"
      • "NW" or "northwest"
      Any other entry will cause the labels to be positioned east.
      Parameters:
      aPositionList - the list of possible positions to place labels givens as Strings objects.
      See Also:
    • getPositionListAsString

      public String[] getPositionListAsString()
      Gets the String representations of the current position list.
      Returns:
      the String representations of the current position list.
      See Also:
    • getPositionAsString

      public String getPositionAsString(int aPosition)
      Returns the string representation of the given position of the labels relative to the anchor point.
      Parameters:
      aPosition - the integer code for a position. Can be any of SOUTH_EAST, SOUTH, SOUTH_WEST, WEST, NORTH_WEST, NORTH, NORTH_EAST, EAST or CENTER.
      Returns:
      the string representation of the given position of the labels relative to the anchor point.
      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. 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 8 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.
      Returns:
      the distance, expressed in pixels, that the label must be removed from the domain object.
      See Also:
    • setGXYInteractiveLabelProvider

      @Deprecated public void setGXYInteractiveLabelProvider(ALcdGXYInteractiveLabelProvider aGXYInteractiveLabelProvider)
      Deprecated.
      this is controller logic. Use TLcdGXYInteractiveLabelsController instead.

      Sets the interactive label provider. This method can be called at most once. If the interactive label provider was previously set (with this method or in the constructor), calling this method will throw and IllegalStateException.

      Note that to fully enable the functionality, setProvideInteractiveLabelOnMouseOver must be set to true.
      Parameters:
      aGXYInteractiveLabelProvider - The interactive label provider that will be used to configure and show a component that can, for instance, be used to edit the properties of the labeled domain object. This cannot be null.
      Throws:
      IllegalStateException - When the interactive label provider was already set.
      IllegalArgumentException - When the interactive label provider was null.
      See Also:
    • getGXYInteractiveLabelProvider

      public ALcdGXYInteractiveLabelProvider getGXYInteractiveLabelProvider()
      Returns the interactive label provider.
      Returns:
      The interactive label provider.
      See Also:
    • getComponentForGXYView

      protected Component getComponentForGXYView(ILcdGXYView aGXYView)

      Gets the component that represents the given ILcdGXYView. By default this is the view itself casted to java.awt.Component. This information is used for handling mouse events.

      Override this method if your ILcdGXYView implementation does not extend from java.awt.Component.

      Parameters:
      aGXYView - The view for which a Component must be retrieved.
      Returns:
      The java.awt.Component which corresponds to the given ILcdGXYView
      Throws:
      IllegalArgumentException - By default when aGXYView is not a java.awt.Component
      See Also:
    • canAddComponentToGXYView

      protected boolean canAddComponentToGXYView(ILcdGXYView aGXYView)

      Returns whether or not an interactive label can be added to the given view. If this method returns false, addComponentToGXYView must not be called. By default this method checks if the given ILcdGXYView is an instance of java.awt.Container without a layout set on it.

      Override this method if your ILcdGXYView implementation is not a java.awt.Container or if you add components to another container than the specified ILcdGXYView.

      Parameters:
      aGXYView - The ILcdGXYView for which to check if a component can be added.
      Returns:
      true if a component can be added, false otherwise.
      See Also:
    • addComponentToGXYView

      protected void addComponentToGXYView(ILcdGXYView aGXYView, Component aComponent)

      Adds the specified interactive label to the user interface. By default this method casts the given ILcdGXYView to java.awt.Container and adds the component to the view.

      Override this method if your implementation of ILcdGXYView does not extend from java.awt.Container or if you want to add the interactive label to another java.awt.Container because, for instance, you already need to add other components to the specified ILcdGXYView.

      If you override this method, you also need to override canAddComponentToGXYView and removeComponentFromGXYView as these methods are closely related to each other.

      This method will not be called if canAddComponentToGXYView returns false.

      Parameters:
      aGXYView - The view to which the interactive label should be added.
      aComponent - The interactive label that should be added to the user interface.
      Throws:
      IllegalArgumentException - By default if aGXYView is not an instance of java.awt.Container or if the layout of aGXYView is not null.
      See Also:
    • removeComponentFromGXYView

      protected void removeComponentFromGXYView(ILcdGXYView aGXYView, Component aComponent)

      Removes the specified java.awt.Component from the user interface. By default this method casts the specified ILcdGXYView to java.awt.Container and removes the component from that container.

      Override this method if you have overridden addComponentToGXYView.

      Parameters:
      aGXYView - The view from which the interactive label should be removed.
      aComponent - The interactive label that should be removed from the user interface
      Throws:
      IllegalArgumentException - By default if the view does not extend from java.awt.Container
    • startLabelInteraction

      public void startLabelInteraction(Object aDomainObject, int aLabelIndex, int aSubLabelIndex, ILcdGXYContext aGXYContext)
      Configure an interactive label for the specified label and show it in the GUI.
      Parameters:
      aDomainObject - The domain object for which to display an interactive label.
      aLabelIndex - The index of the label for which an interactive label should be displayed.
      aSubLabelIndex - The index of the sublabel for which an interactive label should be displayed.
      aGXYContext - An instance of ILcdGXYContext containing the layer and the view for which the label should be made interactive
    • canStopLabelInteraction

      public boolean canStopLabelInteraction()

      Returns whether or not the label interaction can be stopped. For instance, when the interactive label contains invalid text, this method should return false.

      Returns:
      true if the label interaction can be stopped, false otherwise.
    • stopLabelInteraction

      public boolean stopLabelInteraction()

      Stops the interactive label, if there is one. The interactive label will commit any outstanding changes.

      Returns:
      true if the interactive label could be stopped or if there was no interactive label, false otherwise.
      See Also:
    • cancelLabelInteraction

      public void cancelLabelInteraction()
      Cancels the interactive label, if there is one. This prevents the interactive label from committing any changes.
    • getDomainObjectForInteractiveLabel

      public Object getDomainObjectForInteractiveLabel()
      Returns the domain object for the interactive label, or null if there is no interactive label.
      Returns:
      The domain object for the interactive label, or null if there is no interactive label.
    • setProvideInteractiveLabelOnMouseOver

      @Deprecated public void setProvideInteractiveLabelOnMouseOver(boolean aProvideInteractiveLabelOnMouseOver)
      Deprecated.
      this is controller logic. Use TLcdGXYInteractiveLabelsController instead.

      Enables the ALcdGXYInteractiveLabelProvider functionality, so that the interactive label is present when the mouse hoovers over a label. This flag is typically enabled/disabled whenever the interactive label functionality is desired/not wanted. For example, the interactive labels could only be desired when a certain ILcdGXYController is active.

      Parameters:
      aProvideInteractiveLabelOnMouseOver - true to activate the ALcdGXYInteractiveLabelProvider, false otherwise.
      See Also:
    • isLabelTouched

      public boolean isLabelTouched(Graphics aGraphics, int aMode, ILcdGXYContext aGXYContext)
      Description copied from interface: ILcdGXYLabelPainter2
      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.

      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
      Description copied from interface: ILcdGXYLabelPainter2

      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.

      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:
    • 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:
    • labelSnapTarget

      public Object labelSnapTarget(Graphics aGraphics, ILcdGXYContext aGXYContext)
      Description copied from class: ALcdGXYLabelPainter
      Returns an Object that can be used as snapping target when graphically editing another Object or label than the one this ILcdGXYLabelPainter2 represents. The returned Object can be the Object this ILcdGXYLabelPainter2 represents or any other (e.g. an ILcdPoint if getObject() is an ILcdPointList).

      This default implementation always returns null. Override this method if you want to support snapping.

      Specified by:
      labelSnapTarget in interface ILcdGXYLabelPainter2
      Overrides:
      labelSnapTarget in class ALcdGXYLabelPainter
      Parameters:
      aGraphics - the Graphics on which is worked.
      aGXYContext - the ILcdGXYContext of the snapping.
      Returns:
      an Object that can be used as snapping target when graphically editing another Object or label than the one this ILcdGXYLabelPainter2 represents (returned by getObject()). This object can be null.
    • 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.
    • 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:
    • getGXYLabelStamp

      public ALcdGXYLabelStamp getGXYLabelStamp()
      Returns the ALcdGXYLabelStamp that is used by this painter to paint the labels.
      Returns:
      The ALcdGXYLabelStamp that is used by this painter to paint the labels.
      See Also:
    • firePropertyChangeEvent

      protected void firePropertyChangeEvent(PropertyChangeEvent aPropertyChangeEvent)
      Description copied from class: ALcdGXYLabelPainter
      Notifies the registered PropertyChangeListeners of the specified event.
      Overrides:
      firePropertyChangeEvent in class ALcdGXYLabelPainter
      Parameters:
      aPropertyChangeEvent - The event describing the property change of which the registered listeners should be notified.
      See Also:
    • getDisplayName

      public String getDisplayName()
      Description copied from class: ALcdGXYLabelPainter
      This default implementation returns the display name set with setDisplayName, or toString() if this was set to null.
      Specified by:
      getDisplayName in interface ILcdGXYLabelEditor
      Specified by:
      getDisplayName in interface ILcdGXYLabelPainter2
      Overrides:
      getDisplayName in class ALcdGXYLabelPainter
      Returns:
      the display name of this ILcdGXYLabelPainter2
    • 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.
    • 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:
    • anchorPointSFCT

      protected void anchorPointSFCT(Graphics aGraphics, int aMode, ILcdGXYContext aContext, Point aPointSFCT) throws TLcdNoBoundsException
      Retrieves an anchor point that is used to determine where the pin of the label (specified by setObject, setLabelIndex and setSubLabelIndex) attaches to the object representation. Implementations of this class can also use it to determine, for example, discrete positions for a label.

      By default, this anchor point is the result of the anchorPointSFCT method of the corresponding ILcdGXYPainter for the Object to be painted (see aGXYContext.getGXYLayer().getGXYPainter( aObject )). When the set TLcdLabelLocation can retrieve an anchor point, this anchor point should be returned.

      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.

      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 computed 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.
    • setMakeLabelsStickyOnEdit

      public void setMakeLabelsStickyOnEdit(boolean aMakeLabelsStickyOnEdit)
      Sets whether or not this editor should set the label edit mode of the edited labels to include the sticky flag. This means the labels will no longer be automatically moved by the decluttering algorithm.
      Parameters:
      aMakeLabelsStickyOnEdit - true if you want the labels to be sticky after they are edited, false otherwise.
      See Also:
    • isMakeLabelsStickyOnEdit

      public boolean isMakeLabelsStickyOnEdit()
      Returns whether the labels this editor edits are made sticky.
      Returns:
      true if this editor sets the labels it edits to be sticky, false otherwise. The default value is false.
      See Also:
    • getLabelCreationClickCount

      public int getLabelCreationClickCount()
      Description copied from interface: ILcdGXYLabelEditor
      Returns the number of points required to initialize the label of the set Object.
      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.
    • getPinColor

      public Color getPinColor()
      Returns the color in which the pin is drawn.
      Returns:
      The color in which the pin is drawn.
      See Also:
    • setPinColor

      public void setPinColor(Color aPinColor)
      Sets the color in which the pin should be drawn.
      Parameters:
      aPinColor - The color in which the pin should be drawn.
      See Also:
    • getSelectedPinColor

      public Color getSelectedPinColor()
      Returns the color in which the pin should be drawn of the label of a selected object.
      Returns:
      The color in which the pin should be drawn of the label of a selected object.
    • setSelectedPinColor

      public void setSelectedPinColor(Color aSelectedPinColor)
      Sets the color in which the pin of the label of a selected label should be drawn.
      Parameters:
      aSelectedPinColor - The color in which the pin of the label of a selected label should be drawn.
      See Also:
    • isHaloEnabled

      public boolean isHaloEnabled()
      Returns true if the halo effect is on for the labels, false otherwise.
      Returns:
      true if the halo effect is on, false otherwise
      See Also:
    • setHaloEnabled

      public void setHaloEnabled(boolean aHaloEnabled)
      Switches the halo effect for the labels on or off.
      Parameters:
      aHaloEnabled - true if halos should be added, false otherwise
      See Also:
    • isHaloPinEnabled

      public boolean isHaloPinEnabled()
      Returns true if the halo effect also includes the pin.
      Returns:
      true if the halo effect includes the pin, false otherwise
      See Also:
    • setHaloPinEnabled

      public void setHaloPinEnabled(boolean aHaloPinEnabled)
      Sets if the halo effect should be applied to the pin. This only has effect when the pin is enabled.
      Parameters:
      aHaloPinEnabled - true if the halo effect includes the pin, false otherwise
      See Also:
    • getHaloThickness

      public int getHaloThickness()
      Returns the current halo thickness.
      Returns:
      the current halo thickness
      See Also:
    • setHaloThickness

      public void setHaloThickness(int aThickness)
      Sets the thickness (in pixels) of the halo to be added around labels.
      Parameters:
      aThickness - the new halo thickness
      See Also:
    • getHaloColor

      public Color getHaloColor()
      Returns the current halo color.
      Returns:
      the current halo color
      See Also:
    • setHaloColor

      public void setHaloColor(Color aColor)
      Sets the color of the halo to be added around labels.
      Parameters:
      aColor - the new halo color
      See Also:
    • setHaloAlgorithm

      public void setHaloAlgorithm(TLcdHaloAlgorithm aHaloAlgorithm)
      Sets the algorithm to be used for rendering halo's. The choice of the halo algorithm may have a major impact on the overall performance of this painter. See TLcdHaloAlgorithm for more information on the available algorithms.
      Parameters:
      aHaloAlgorithm - the algorithm to be used for rendering halo's.
      See Also:
    • getHaloAlgorithm

      public TLcdHaloAlgorithm getHaloAlgorithm()
      Returns the algorithm that is used for rendering halo's.
      Returns:
      the algorithm that is used for rendering halo's.
      See Also:
    • getHaloPinColor

      public Color getHaloPinColor()
      Returns the current halo pin color.
      Returns:
      the current halo pin color
      See Also:
    • setHaloPinColor

      public void setHaloPinColor(Color aColor)
      Sets the color of the halo to be added around pins.
      Parameters:
      aColor - the new halo color
      See Also:
    • isUseImageCache

      public boolean isUseImageCache()
      Returns true when image caching for labels with a halo is enabled, false otherwise.
      Returns:
      true when label image caching is enabled, false otherwise
      See Also:
    • setUseImageCache

      public void setUseImageCache(boolean aUseCache)
      Sets whether or not labels with halos should be cached as images. Creating a halo for a label is an expensive operation, so enabling image caching can considerably improve performance.
      Parameters:
      aUseCache - specifies whether image caching should be enabled
      See Also:
    • clearImageCache

      public void clearImageCache()
      Clears the entire label image cache. To remove a single label from the cache, use clearImageCache(Object).
      See Also:
    • clearImageCache

      public void clearImageCache(Object aObject)
      Clears the label image cache for the given object. The next time this object is painted, a new image will be created and cached for it. To remove all cached images in one go, use clearImageCache().
      Parameters:
      aObject - the object for which the cache to be cleared.
      See Also:
    • paintPin

      protected void paintPin(Graphics aGraphics, int aMode, int aStartPointX, int aStartPointY, int aEndPointX, int aEndPointY)
      Draws a label pin on the given graphics between the given lines. Overwrite this method if you want to change the look of the pin, for example by manipulating the graphics passed.
      Parameters:
      aGraphics - the graphics to paint the pin on.
      aMode - the mode this objects label is painted in (e.g. ILcdGXYLabelPainter.SELECTED).
      aStartPointX - the x coordinate of the start point of the pin.
      aStartPointY - the y coordinate of the start point of the pin.
      aEndPointX - the x coordinate of the end point of the pin.
      aEndPointY - the y coordinate of the end point of the pin.
      See Also:
    • setWithPin

      public void setWithPin(boolean aWithPin)
      The property withPin determines whether a pin should be drawn from the object to the label. The pin is attached to the object at the anchor point and to the label stamp at the pin point.
      Parameters:
      aWithPin - true to paint a pin connecting the label and the object.
      See Also:
    • isWithPin

      public boolean isWithPin()
      Returns whether a pin is drawn from the object to the label.
      Returns:
      true if a pin is drawn from the object to the label
      See Also:
    • setWithAnchorPoint

      public void setWithAnchorPoint(boolean aWithAnchorPoint)
      Determines whether to draw an anchor point at anchorPointSFCT.
      Parameters:
      aWithAnchorPoint - true to paint an anchor point
      See Also:
    • isWithAnchorPoint

      public boolean isWithAnchorPoint()
      Returns whether to draw an anchor point at anchorPointSFCT.
      Returns:
      true if an anchor point is painted, false otherwise
      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.