Package ghidra.app.decompiler.component.margin

# Class LineNumberDecompilerMarginProvider

java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JPanel
ghidra.app.decompiler.component.margin.LineNumberDecompilerMarginProvider

All Implemented Interfaces:
  `LayoutModelListener`, `DecompilerMarginProvider`, `ImageObserver`, `MenuContainer`, `Serializable`, `Accessible`

public class LineNumberDecompilerMarginProvider extends JPanel implements DecompilerMarginProvider, LayoutModelListener
The built-in provider for the Decompiler's line number margin

See Also:
  - Serialized Form

- ## Nested Class Summary

  ## Nested classes/interfaces inherited from class javax.swing.JPanel

  `JPanel.AccessibleJPanel`

  ## Nested classes/interfaces inherited from class javax.swing.JComponent

  `JComponent.AccessibleJComponent`

  ## Nested classes/interfaces inherited from class java.awt.Container

  `Container.AccessibleAWTContainer`

  ## Nested classes/interfaces inherited from class java.awt.Component

  `Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy`

- ## Field Summary

  ### Fields inherited from class javax.swing.JComponent

  `listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW`

  ### Fields inherited from class java.awt.Component

  `accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT`

  ### Fields inherited from interface java.awt.image.ImageObserver

  `ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `LineNumberDecompilerMarginProvider()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `dataChanged(BigInteger start, BigInteger end)`
  Called when the data at an index or range of indexes changes.
  `Component`
  `getComponent()`
  Get the Swing component implementing the actual margin, often `this`
  `void`
  `modelSizeChanged(IndexMapper indexMapper)`
  Called whenever the number of indexes changed
  `void`
  `paint(Graphics g)`
  `void`
  `setOptions(DecompileOptions options)`
  Set the options for the margin
  `void`
  `setProgram(Program program, LayoutModel model, LayoutPixelIndexMap pixmap)`
  Called whenever the program, function, or layout changes

  ### Methods inherited from class javax.swing.JPanel

  `getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI`

  ### Methods inherited from class javax.swing.JComponent

  `addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update`

  ### Methods inherited from class java.awt.Container

  `add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree`

  ### Methods inherited from class java.awt.Component

  `action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- ## Constructor Details

  - ### LineNumberDecompilerMarginProvider

    public LineNumberDecompilerMarginProvider()

- ## Method Details

  - ### setProgram

    public void setProgram(Program program, LayoutModel model, LayoutPixelIndexMap pixmap)
    Description copied from interface: `DecompilerMarginProvider`
    Called whenever the program, function, or layout changes

    The implementation should keep a reference at least to the `model` and the `pixmap` for later use during painting. The model provides access to the lines of decompiler C code. Each layout corresponds to a single line of C code. For example, the first line of code is rendered by the layout at index 0. The tenth is rendered by the layout at index 9. Rarely, a line may be wrapped by the renderer, leading to a non-uniform layout. The `pixmap` can map from a pixel's vertical position to the layout index at the same position in the main panel. It accounts for scrolling an non-uniformity. It is safe to assume the layouts render contiguous lines of C code. The recommended strategy for painting is thus:

    1. Compute the visible part of the margin needing repainting. See `JComponent.getVisibleRect()`
    2. Compute the layout indices for the vertical bounds of that part. See `LayoutPixelIndexMap.getIndex(int)`
    3. Iterate over the layouts within those bounds, inclusively.
    4. Compute the vertical position of each layout and paint something appropriate for its corresponding line. See `LayoutPixelIndexMap.getPixel(BigInteger)`

    A call to this method should cause the component to be repainted.

    Specified by:
      `setProgram` in interface `DecompilerMarginProvider`
    Parameters:
      `program` - the program for the current function
      `model` - the line/token model
      `pixmap` - a map from pixels' y coordinates to layout index, i.e, line number

  - ### setOptions

    public void setOptions(DecompileOptions options)
    Description copied from interface: `DecompilerMarginProvider`
    Set the options for the margin

    This is called at least once when the provider is added to the margin service. See `DecompilerMarginService.addMarginProvider(DecompilerMarginProvider)`. It subsequently called whenever a decompiler option changes. To receive other options, the provider will need to listen using its own mechanism.

    A call to this method should cause the component to be repainted. Implementors may choose to repaint only when certain options change.

    Specified by:
      `setOptions` in interface `DecompilerMarginProvider`

  - ### getComponent

    public Component getComponent()
    Description copied from interface: `DecompilerMarginProvider`
    Get the Swing component implementing the actual margin, often `this`
    Specified by:
      `getComponent` in interface `DecompilerMarginProvider`
    Returns:
      the component

  - ### modelSizeChanged

    public void modelSizeChanged(IndexMapper indexMapper)
    Description copied from interface: `LayoutModelListener`
    Called whenever the number of indexes changed
    Specified by:
      `modelSizeChanged` in interface `LayoutModelListener`
    Parameters:
      `indexMapper` - Maps indexes from before the model size change to indexes after the model size changed.

  - ### dataChanged

    public void dataChanged(BigInteger start, BigInteger end)
    Description copied from interface: `LayoutModelListener`
    Called when the data at an index or range of indexes changes.
    Specified by:
      `dataChanged` in interface `LayoutModelListener`
    Parameters:
      `start` - the starting index for the region of data changes.
      `end` - the ending index (inclusive) for the region of data changes.

  - ### paint

    public void paint(Graphics g)
    Overrides:
      `paint` in class `JComponent`