Class AbstractSwingUpdateManager

java.lang.Object
ghidra.util.task.AbstractSwingUpdateManager
Direct Known Subclasses:
BufferedSwingRunner, SwingUpdateManager

public abstract class AbstractSwingUpdateManager extends Object
A base class to allow clients to buffer events. UI components may receive numbers events to make changes to their underlying data model. Further, for many of these clients, it is sufficient to perform one update to capture all of the changes. In this scenario, the client can use this class to keep pushing off internal updates until: 1) the flurry of events has settled down, or 2) some specified amount of time has expired.

The various methods dictate when the client will get a callback:

  • update() - if this is the first call to update, then do the work immediately; otherwise, buffer the update request until the timeout has expired.
  • updateNow() - perform the callback now.
  • updateLater() - buffer the update request until the timeout has expired.
  • Non-blocking update now - this is a conceptual use-case, where the client wishes to perform an immediate update, but not during the current Swing event. To achieve this, you could call something like:
                              	SwingUtilities.invokeLater(() -> updateManager.updateNow());
                              

This class is safe to use in a multi-threaded environment. State variables are guarded via synchronization on this object. The Swing thread is used to perform updates, which guarantees that only one update will happen at a time.

  • Field Details

    • NONE

      protected static final long NONE
      See Also:
    • DEFAULT_MAX_DELAY

      public static final int DEFAULT_MAX_DELAY
      See Also:
    • MIN_DELAY_FLOOR

      protected static final int MIN_DELAY_FLOOR
      See Also:
    • DEFAULT_MIN_DELAY

      public static final int DEFAULT_MIN_DELAY
      See Also:
    • DEFAULT_NAME

      protected static final String DEFAULT_NAME
    • timer

      protected final Timer timer
    • isWorking

      protected boolean isWorking
  • Constructor Details

    • AbstractSwingUpdateManager

      protected AbstractSwingUpdateManager()
      Constructs a new SwingUpdateManager with default values for min and max delay. See DEFAULT_MIN_DELAY and 30000.
    • AbstractSwingUpdateManager

      protected AbstractSwingUpdateManager(int minDelay)
      Constructs a new AbstractSwingUpdateManager

      Note: The minDelay will always be at least MIN_DELAY_FLOOR, regardless of the given value.

      Parameters:
      minDelay - the minimum number of milliseconds to wait once the event stream stops coming in before actually updating the screen
    • AbstractSwingUpdateManager

      protected AbstractSwingUpdateManager(int minDelay, int maxDelay)
      Constructs a new AbstractSwingUpdateManager

      Note: The minDelay will always be at least MIN_DELAY_FLOOR, regardless of the given value.

      Parameters:
      minDelay - the minimum number of milliseconds to wait once the event stream stops coming in before actually updating the screen.
      maxDelay - the maximum amount of time to wait between gui updates.
    • AbstractSwingUpdateManager

      protected AbstractSwingUpdateManager(int minDelay, int maxDelay, String name)
      Constructs a new AbstractSwingUpdateManager

      Note: The minDelay will always be at least MIN_DELAY_FLOOR, regardless of the given value.

      Parameters:
      minDelay - the minimum number of milliseconds to wait once the event stream stops coming in before actually updating the screen.
      maxDelay - the maximum amount of time to wait between gui updates.
      name - The name of this update manager; this allows for selective trace logging
  • Method Details

    • swingDoWork

      protected abstract void swingDoWork()
      The subclass callback to perform work.
    • update

      protected void update()
      Signals to perform an update. See the class header for the usage of the various update methods.
    • updateLater

      protected void updateLater()
      Signals to perform an update. See the class header for the usage of the various update methods.
    • updateNow

      protected void updateNow()
      Signals to perform an update. See the class header for the usage of the various update methods.
    • flush

      public void flush()
      Causes this run manager to run if it has a pending update
    • stop

      public void stop()
      Signals to stop any buffered work. This will not stop any in-progress work.
    • hasPendingUpdates

      public boolean hasPendingUpdates()
      Returns true if there is a pending request that hasn't started yet. Any currently executing requests will not affect this call.
      Returns:
      true if there is a pending request that hasn't started yet.
    • isBusy

      public boolean isBusy()
      Returns true if any work is being performed or if there is buffered work
      Returns:
      true if any work is being performed or if there is buffered work
    • dispose

      public void dispose()
    • isDisposed

      public boolean isDisposed()
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • toStringDebug

      public String toStringDebug()
    • checkForWork

      protected void checkForWork()
    • scheduleCheckForWork

      protected void scheduleCheckForWork()