java.lang.Object
com.inductiveautomation.ignition.client.util.gui.popup.JPopupMenuHelper
All Implemented Interfaces:
MouseListener, EventListener, PopupMenuListener

public class JPopupMenuHelper extends Object implements MouseListener, PopupMenuListener
This class contains the correct logic for a component that wants to pop up a popup menu. You'd think this was unnecessary, but it's tricky to do correctly because if you pop up the popup on mouse press, it'll be wrong in the case when the press should "toggle" the popup's visibility. This is because The press will first hide the popup automatically, and then the press would show the popup again.
  • Field Details

    • component

      protected Component component
    • popupMaker

      protected Supplier<JPopupMenu> popupMaker
    • trigger

      protected PopupTrigger trigger
    • location

      protected PopupLocation location
    • memoizePopup

      protected boolean memoizePopup
    • lastHidden

      protected long lastHidden
    • threshold

      protected long threshold
  • Constructor Details

    • JPopupMenuHelper

      public JPopupMenuHelper(Component component, JPopupMenu popup)
    • JPopupMenuHelper

      public JPopupMenuHelper(Component component, Supplier<JPopupMenu> popupMaker)
      Alternate constructor allows for lazy popup instantiation
  • Method Details

    • bind

      public void bind()
    • unbind

      public void unbind()
    • bind

      public static void bind(Component component, JPopupMenu popup)
      Creates a PopupHelper with trigger=OnPress, location=UnderneathComponent, and threshold=20ms and binds it.
    • setTrigger

      public void setTrigger(PopupTrigger trigger)
    • getTrigger

      public PopupTrigger getTrigger()
    • setLocation

      public void setLocation(PopupLocation location)
    • getLocation

      public PopupLocation getLocation()
    • getThreshold

      public long getThreshold()
    • setThreshold

      public void setThreshold(long threshold)
    • setComponent

      public void setComponent(Component component)
    • getComponent

      public Component getComponent()
    • setPopup

      public void setPopup(JPopupMenu popup)
    • getPopup

      public JPopupMenu getPopup()
    • setMemoizePopup

      public void setMemoizePopup(boolean memoizePopup)
      Controls whether the menu supplier is only called once (the default) or every time the popup is shown. This setting is only used if the popup menu helper was created with a menu supplier.
    • isMemoizePopup

      public boolean isMemoizePopup()
    • popupMenuWillBecomeVisible

      public void popupMenuWillBecomeVisible(PopupMenuEvent e)
      Specified by:
      popupMenuWillBecomeVisible in interface PopupMenuListener
    • popupMenuWillBecomeInvisible

      public void popupMenuWillBecomeInvisible(PopupMenuEvent e)
      Specified by:
      popupMenuWillBecomeInvisible in interface PopupMenuListener
    • popupMenuCanceled

      public void popupMenuCanceled(PopupMenuEvent e)
      Specified by:
      popupMenuCanceled in interface PopupMenuListener
    • mouseClicked

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

      public void doShowPopup(MouseEvent e)
    • 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
    • adjustPopupLocationToFitScreen

      protected Point adjustPopupLocationToFitScreen(int xPosition, int yPosition)
      Moves the popup location so that the menu does not overlap the task bar. This is taken from JPopupMenu.java. The JPopupMenu version has a condition that can allow the screen insets to not be considered in the adjustment. This was taken in full in order to perform the same function while forcing the insets to be part of the adjustment.
    • adjustPopupLocationToFitWindow

      protected Point adjustPopupLocationToFitWindow(int xPosition, int yPosition)