Package ca.nengo.ui.lib.world.handlers

Source Code of ca.nengo.ui.lib.world.handlers.TooltipPickHandler

package ca.nengo.ui.lib.world.handlers;

import ca.nengo.ui.lib.AppFrame;
import ca.nengo.ui.lib.Style.NengoStyle;
import ca.nengo.ui.lib.world.WorldLayer;
import ca.nengo.ui.lib.world.WorldObject;
import ca.nengo.ui.lib.world.piccolo.WorldImpl;
import ca.nengo.ui.lib.world.piccolo.objects.SelectionBorder;
import ca.nengo.ui.lib.world.piccolo.objects.TooltipWrapper;
import ca.nengo.ui.lib.world.piccolo.objects.Window;
import ca.nengo.ui.lib.world.piccolo.primitives.PiccoloNodeInWorld;
import edu.umd.cs.piccolo.PNode;
import edu.umd.cs.piccolo.event.PInputEvent;

/**
* Picks objects in which to show tooltips for. Handles both both and keyboard
* events.
*
* @author Shu Wu
*/
public class TooltipPickHandler extends AbstractPickHandler {
  public static final String TOOLTIP_BORDER_ATTR = "tooltipBdr";

  private WorldObject controls;

  private WorldObject keyboardFocusObject;

  private TooltipWrapper keyboardTooltip;
  private TooltipWrapper mouseOverTooltip;

  private SelectionBorder tooltipFrame;

  private int myPickDelay, myKeepPickDelay;

  public TooltipPickHandler(WorldImpl world, int pickDelay, int keepPickDelay) {
    super(world);
    myPickDelay = pickDelay;
    myKeepPickDelay = keepPickDelay;
    tooltipFrame = new SelectionBorder(world);
    tooltipFrame.setFrameColor(NengoStyle.COLOR_TOOLTIP_BORDER);

  }

  private void processKeyboardEvent(PInputEvent event) {
    if ((event.getModifiers() & AppFrame.MENU_SHORTCUT_KEY_MASK) != 0) {

      WorldObject wo = getTooltipNode(event);
      if (wo != null) {
        setKeyboardTooltipFocus(wo);

      }
    } else {
      setKeyboardTooltipFocus(null);
    }

  }

  @Override
  protected int getKeepPickDelay() {
    return myKeepPickDelay;
  }

  @Override
  protected int getPickDelay() {
    return myPickDelay;
  }

  protected WorldObject getTooltipNode(PInputEvent event) {

    PNode node = event.getPickedNode();
    while (node != null) {

      if (node instanceof PiccoloNodeInWorld) {
        WorldObject wo = ((PiccoloNodeInWorld) node).getWorldObject();

        /*
         * Do nothing if the mouse is over the controls
         */
        if (node == controls) {
          setKeepPickAlive(true);
          return null;
        } else if (wo instanceof WorldLayer || wo instanceof Window) {
          break;
        } else if (wo.getTooltip() != null) {
          return null; // hack to eliminate tool tips
          //return wo;
        }

      }

      node = node.getParent();
    }
    setKeepPickAlive(false);
    return null;

  }

  @Override
  protected void nodePicked() {
    WorldObject node = getPickedNode();
    tooltipFrame.setSelected(node);

    mouseOverTooltip = getWorld().showTooltip(node);
  }

  @Override
  protected void nodeUnPicked() {

    tooltipFrame.setSelected(null);

    mouseOverTooltip.fadeAndDestroy();
    mouseOverTooltip = null;

  }

  @Override
  protected void processMouseEvent(PInputEvent event) {
    WorldObject node = null;

    processKeyboardEvent(event);
    if (WorldImpl.isTooltipsVisible()) {
      node = getTooltipNode(event);
    } else {
      setKeepPickAlive(false);
    }
    setSelectedNode(node);
    if (node == null) {

      setSelectedNode(null);
    }

  }

  protected void setKeyboardTooltipFocus(WorldObject wo) {
    if (wo != keyboardFocusObject) {
      keyboardFocusObject = wo;

      if (keyboardTooltip != null) {
        keyboardTooltip.fadeAndDestroy();
        keyboardTooltip = null;
      }

      if (keyboardFocusObject != null) {
        keyboardTooltip = getWorld().showTooltip(wo);
      }

    }
  }

  @Override
  public void keyPressed(PInputEvent event) {
    super.keyPressed(event);
    processKeyboardEvent(event);
  }

  @Override
  public void keyReleased(PInputEvent event) {
    super.keyReleased(event);
    processKeyboardEvent(event);
  }

}
TOP

Related Classes of ca.nengo.ui.lib.world.handlers.TooltipPickHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.