Package ghidra.framework.main.logviewer.ui

# Class FVSlider

java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JSlider
ghidra.framework.main.logviewer.ui.FVSlider

All Implemented Interfaces:
  `MouseListener`, `MouseMotionListener`, `ImageObserver`, `MenuContainer`, `Serializable`, `EventListener`, `Accessible`, `ChangeListener`, `SwingConstants`

public class FVSlider extends JSlider implements ChangeListener, MouseMotionListener, MouseListener

     Custom slider that acts as the scroll bar for the FVTable. This slider listens for
     changes to the viewport and updates its position accordingly.

     Q. Why not just use the standard JScrollBar that comes with the JScrollPane?

     A. It's because we are viewing only a portion of the total file at any given time.
        If we used the standard scroll mechanism, it would size itself and its viewport
        according to that subset of the total file, while we want it to reflect the file
        in its entirety.

     Q. Why extend a JSlider for this custom scroll bar instead of a JScrollBar?

     A. The JSlider is much easier to customize, specifically when trying to adjust
        the size of the slider thumb. Functionally they are both acceptable for our
        purposes, but the ease of using the slider wins out.

See Also:
  - Serialized Form

- ## Nested Class Summary

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

  `JSlider.AccessibleJSlider`

  ## 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.JSlider

  `changeEvent, changeListener, majorTickSpacing, minorTickSpacing, orientation, sliderModel, snapToTicks`

  ### 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`

  ### Fields inherited from interface javax.swing.SwingConstants

  `BOTTOM, CENTER, EAST, HORIZONTAL, LEADING, LEFT, NEXT, NORTH, NORTH_EAST, NORTH_WEST, PREVIOUS, RIGHT, SOUTH, SOUTH_EAST, SOUTH_WEST, TOP, TRAILING, VERTICAL, WEST`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `FVSlider(JScrollPane scrollPane, FVTable table, ViewportUtility viewportUtility, ChunkModel model, ChunkReader reader, FVEventListener eventListener)`
  Constructor.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `long`
  `getFilePosition(int sliderPos)`
  Returns the file position (long) for the given slider position (int).
  `void`
  `mouseClicked(MouseEvent e)`
  `void`
  `mouseDragged(MouseEvent e)`
  MOUSE EVENTS We need to set the mouseDown attribute so we only initiate a viewport update if the slider is moving in response to user action on the slider.
  `void`
  `mouseEntered(MouseEvent e)`
  `void`
  `mouseExited(MouseEvent e)`
  `void`
  `mouseMoved(MouseEvent e)`
  `void`
  `mousePressed(MouseEvent e)`
  `void`
  `mouseReleased(MouseEvent e)`
  `void`
  `setMaximum(long fileSize)`
  Sets the maximum slider position given the size of the file.
  `void`
  `setValue(long filePos)`
  Sets the value of the slider based on the given file position.
  `void`
  `stateChanged(ChangeEvent e)`
  Invoked when the slider value has changed.
  `void`
  `syncWithViewport()`
  Updates the slider so it is in sync with the current position of the viewport.

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

  `addChangeListener, createChangeListener, createStandardLabels, createStandardLabels, fireStateChanged, getAccessibleContext, getChangeListeners, getExtent, getInverted, getLabelTable, getMajorTickSpacing, getMaximum, getMinimum, getMinorTickSpacing, getModel, getOrientation, getPaintLabels, getPaintTicks, getPaintTrack, getSnapToTicks, getUI, getUIClassID, getValue, getValueIsAdjusting, imageUpdate, paramString, removeChangeListener, setExtent, setFont, setInverted, setLabelTable, setMajorTickSpacing, setMaximum, setMinimum, setMinorTickSpacing, setModel, setOrientation, setPaintLabels, setPaintTicks, setPaintTrack, setSnapToTicks, setUI, setValue, setValueIsAdjusting, updateLabelUIs, 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, paint, 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, 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, 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

  - ### FVSlider

    public FVSlider(JScrollPane scrollPane, FVTable table, ViewportUtility viewportUtility, ChunkModel model, ChunkReader reader, FVEventListener eventListener)
    Constructor. Builds the UI elements and establishes event listeners.
    Parameters:
      `scrollPane` -
      `table` -
      `viewportUtility` -
      `model` -
      `reader` -
      `eventListener` -

- ## Method Details

  - ### setValue

    public void setValue(long filePos)
    Sets the value of the slider based on the given file position.
    Parameters:
      `filePos` -

  - ### setMaximum

    public void setMaximum(long fileSize)
    Sets the maximum slider position given the size of the file. If the file position is greater than the maximum size of an integer, we just set it to that maximum size.
    Parameters:
      `fileSize` -

  - ### syncWithViewport

    public void syncWithViewport()
    Updates the slider so it is in sync with the current position of the viewport. Note that this is only done if the mouse is NOT down; if it is, it means the user is moving the thumb and we should do nothing.

  - ### stateChanged

    public void stateChanged(ChangeEvent e)
    Invoked when the slider value has changed. When this happens we need to update the viewport to match, but ONLY if this event is triggered as a result of the user manually moving the slider (and not as a result of the slider being moved programmatically in response to a viewport change).
    Specified by:
      `stateChanged` in interface `ChangeListener`

  - ### mouseDragged

    public void mouseDragged(MouseEvent e)
    MOUSE EVENTS We need to set the mouseDown attribute so we only initiate a viewport update if the slider is moving in response to user action on the slider.
    Specified by:
      `mouseDragged` in interface `MouseMotionListener`

  - ### mouseMoved

    public void mouseMoved(MouseEvent e)
    Specified by:
      `mouseMoved` in interface `MouseMotionListener`

  - ### mouseClicked

    public void mouseClicked(MouseEvent e)
    Specified by:
      `mouseClicked` in interface `MouseListener`

  - ### mousePressed

    public void mousePressed(MouseEvent e)
    Specified by:
      `mousePressed` in interface `MouseListener`

  - ### mouseReleased

    public void mouseReleased(MouseEvent e)
    Specified by:
      `mouseReleased` in interface `MouseListener`

  - ### mouseEntered

    public void mouseEntered(MouseEvent e)
    Specified by:
      `mouseEntered` in interface `MouseListener`

  - ### mouseExited

    public void mouseExited(MouseEvent e)
    Specified by:
      `mouseExited` in interface `MouseListener`

  - ### getFilePosition

    public long getFilePosition(int sliderPos)
    Returns the file position (long) for the given slider position (int). This is calculated by computing the position of the slider as a percentage of its maximum, and applying the same to the file position (relative to the total file size).
    Parameters:
      `sliderPos` -
    Returns: