All Downloads are FREE. Search and download functionalities are using the official Maven repository.

rwt.widgets.util.ToolTipManager.js Maven / Gradle / Ivy

/*******************************************************************************
 * Copyright (c) 2004, 2014 1&1 Internet AG, Germany, http://www.1und1.de,
 *                          EclipseSource and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    1&1 Internet AG and others - original API and implementation
 *    EclipseSource - adaptation for the Eclipse Remote Application Platform
 ******************************************************************************/

(function() {

var getToolTip = function() {
  return rwt.widgets.base.WidgetToolTip.getInstance();
};

rwt.qx.Class.define( "rwt.widgets.util.ToolTipManager", {

  extend : rwt.qx.Object,

  statics : {

    getInstance : function() {
      return rwt.runtime.Singletons.get( rwt.widgets.util.ToolTipManager );
    }

  },

  properties : {
    currentToolTipTarget : {
      nullable : true,
      apply : "_applyCurrentToolTipTarget"
    }
  },

  members : {

    /**
     * TODOC
     *
     * @type member
     * @param value {var} Current value
     * @param old {var} Previous value
     * @return {void | Boolean} TODOC
     */
    _applyCurrentToolTipTarget : function(value, old) {

      // If old tooltip existing, hide it and clear widget binding
      if (old)
      {
        getToolTip()._stopShowTimer();
        getToolTip()._startHideTimer();
        old.removeEventListener( "updateToolTip", this._updateEventHandler );
      }

      getToolTip().setBoundToWidget( value );

      // If new tooltip is not null, set it up and start the timer
      if (value) {
        getToolTip()._startShowTimer();
        value.addEventListener( "updateToolTip", this._updateEventHandler );
      }
    },

    handleMouseEvent : function( event ) {
      var type = event.getType();
      if( type === "mouseover" ) {
        this._handleMouseOver( event );
      } else if ( type === "mouseout" ) {
        this._handleMouseOut( event );
      } else if ( type === "mousemove" ) {
        this._handleMouseMove( event );
      }
    },

    _handleMouseOver : function( e ) {
      var vTarget = e.getTarget();
      if( vTarget === getToolTip() || getToolTip().contains( vTarget ) ) {
        this.setCurrentToolTipTarget( getToolTip().getLastWidget() );
        return;
      }
      // Allows us to use DOM Nodes as tooltip target :)
      if (!(vTarget instanceof rwt.widgets.base.Widget) && vTarget.nodeType == 1) {
        vTarget = rwt.event.EventHandlerUtil.getTargetObject(vTarget);
      }
      while (vTarget != null && vTarget.getToolTipText() === null ) {
        vTarget = vTarget.getParent();
      }
      this.setCurrentToolTipTarget( vTarget );
    },

    _handleMouseOut : function( e ) {
      var vTarget = e.getTarget();
      var vRelatedTarget = e.getRelatedTarget();
      if( vTarget === getToolTip() ) {
        return;
      }
      var tTarget = this.getCurrentToolTipTarget();
      if (tTarget && (vRelatedTarget == getToolTip() || getToolTip().contains(vRelatedTarget))) {
        return;
      }
      if (vRelatedTarget && vTarget && vTarget.contains(vRelatedTarget)) {
        return;
      }
      if (tTarget && !vRelatedTarget) {
        this.setCurrentToolTipTarget( null );
      }
    },

    _handleMouseMove : function( e ) {
      if( this.getCurrentToolTipTarget() ) {
        getToolTip()._handleMouseMove( e );
      }
    },

    handleFocus : function() {
      // nothing to do
    },

    handleBlur : function(e)
    {
      var vTarget = e.getTarget();

      if (!vTarget) {
        return;
      }

      var tTarget = this.getCurrentToolTipTarget();

      if (tTarget === vTarget) {
        getToolTip()._stopShowTimer();
        getToolTip()._startHideTimer();
      }
    },

    handleKeyEvent : function( event ) {
      switch( event.getKeyIdentifier() ) {
        case "Control":
        case "Alt":
        case "Shift":
        case "Meta":
        case "Win":
        break;
        default:
          getToolTip()._stopShowTimer();
          getToolTip()._quickHide();
        break;
      }
    },

    _updateEventHandler : function( target ) {
      if( getToolTip().getBoundToWidget() === target ) {
        getToolTip().updateText();
      }
    }

  }

} );

}() );




© 2015 - 2025 Weber Informatics LLC | Privacy Policy