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

rwt.widgets.ToolTip.js Maven / Gradle / Ivy

/*******************************************************************************
 * Copyright (c) 2011, 2018 Rüdiger Herrmann 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:
 *    Rüdiger Herrmann - initial API and implementation
 *    EclipseSource - ongoing development
 ******************************************************************************/

rwt.qx.Class.define( "rwt.widgets.ToolTip", {

  extend : rwt.widgets.base.Popup,
  include : rwt.animation.VisibilityAnimationMixin,

  construct : function( style ) {
    this.base( arguments );
    this._style = style;
    this.setAutoHide( false );
    this.setDisplay( true );
    this.setVisibility( false );
    this.setAppearance( "tool-tip" );
    var doc = rwt.widgets.base.ClientDocument.getInstance();
    this.setMaxWidth( Math.floor( doc.getClientWidth() * 0.9 ) );
    this.setMaxHeight( Math.floor( doc.getClientHeight() * 0.9 ) );
    this.addToDocument();
    this.addEventListener( "click", this._onClick, this );
    this.addEventListener( "appear", this._update, this );
    this._hideAfterTimeout = false;
    this._messageFont = this._getMessageFont();
    this._contentArea = null;
    this._textArea = null;
    this._image = null;
    this._text = null;
    this._message = null;
    this._markupEnabled = false;
    this._createControls();
  },

  destruct : function() {
    this.removeEventListener( "click", this._onClick, this );
    this._contentArea.dispose();
    this._textArea.dispose();
    this._image.dispose();
    this._text.dispose();
    this._message.dispose();
    this._messageFont = null;
  },

  members : {

    setText : function( value ) {
      var text = value;
      if( !this._markupEnabled ) {
        text = rwt.util.Encoding.escapeText( text, false );
      }
      this._text.setText( text );
      if( this.getVisibility() ) {
        this._update();
      }
    },

    setMessage : function( value ) {
      var message = value;
      if( !this._markupEnabled ) {
        var EncodingUtil = rwt.util.Encoding;
        message = EncodingUtil.escapeText( message, false );
        message = EncodingUtil.replaceNewLines( message, "
" ); } this._message.setText( message ); if( this.getVisibility() ) { this._update(); } }, setMarkupEnabled : function( value ) { this._markupEnabled = value; }, setLocation : function( x, y ) { this.setLeft( x ); this.setTop( y ); }, setHideAfterTimeout : function( value ) { this._hideAfterTimeout = value; }, setVisible : function( visible ) { this.setVisibility( visible ); if( visible ) { this.bringToFront(); if( this._hideAfterTimeout ) { rwt.client.Timer.once( this._hide, this, 5 * 1000 ); } } }, addState : function( state ) { this.base( arguments, state ); this._image.addState( state ); }, removeState : function( state ) { this.base( arguments, state ); this._image.removeState( state ); }, _createControls : function() { this._contentArea = new rwt.widgets.base.BoxLayout( "horizontal" ); this._contentArea.setWidth( "100%" ); this._contentArea.setHeight( "100%" ); this._contentArea.setSpacing( 5 ); this._contentArea.setOverflow( "hidden" ); this._contentArea.setParent( this ); this._image = new rwt.widgets.base.Image(); this._image.setAppearance( "tool-tip-image" ); this._image.setParent( this._contentArea ); this._image.addEventListener( "changeLoaded", this._update, this ); this._textArea = new rwt.widgets.base.BoxLayout( "vertical" ); this._textArea.setParent( this._contentArea ); this._textArea.setHeight( "100%" ); this._textArea.setSpacing( 5 ); this._text = new rwt.widgets.base.Label(); this._text.setAppearance( "tool-tip-text" ); this._text.setParent( this._textArea ); this._message = new rwt.widgets.base.Label(); this._message.setAppearance( "tool-tip-message" ); this._message.setHeight( "auto" ); this._message.setWrap( true ); this._message.setParent( this._textArea ); }, _update : function() { var popupWidth = this.getWidth(); if( popupWidth === "auto" ) { var message = this._message.getText(); var textSize = this._getTextSize( this._text.getText(), -1 ); var messageSize = this._getTextSize( message, -1 ); if( !this._markupEnabled ) { var width = messageSize.x; while( width > 0 && !this._matchesWidthToHeightRatio( messageSize ) ) { width -= 10; messageSize = this._getTextSize( message, width ); } } messageSize.x = this._max( messageSize.x, textSize.x ); if( messageSize.x >= this.getMaxWidth() ) { messageSize = this._adjustMessageSizeToMaxWidth( message ); } this._message.setWidth( messageSize.x ); this._message.setHeight( messageSize.y ); } else { var messageWidth = popupWidth - this.getPaddingLeft() - this.getPaddingRight(); messageWidth -= this._image._computePreferredInnerWidth(); messageWidth -= this._contentArea.getSpacing(); this._message.setWidth( messageWidth ); this._message.setHeight( "auto" ); } }, _adjustMessageSizeToMaxWidth : function( message ) { var preferredMaxWidth = Math.floor( this.getMaxWidth() * 0.9 ); var messageWidth = preferredMaxWidth - this.getPaddingLeft() - this.getPaddingRight(); messageWidth -= this._image._computePreferredInnerWidth(); messageWidth -= this._contentArea.getSpacing(); return this._getTextSize( message, messageWidth ); }, _matchesWidthToHeightRatio : function( size ) { return size.x / size.y <= 6; }, _max : function( a, b ) { return a > b ? a : b; }, _getTextSize : function( text, width ) { var data = []; data[ 0 ] = ""; data[ 1 ] = text; data[ 2 ] = this._messageFont.getFamily(); data[ 3 ] = this._messageFont.getSize(); data[ 4 ] = this._messageFont.getBold(); data[ 5 ] = this._messageFont.getItalic(); data[ 6 ] = width; var textSize = rwt.widgets.util.FontSizeCalculation._measureItem( data ); return { x : textSize[ 0 ], y : textSize[ 1 ] }; }, _onClick : function() { this._hide(); rwt.remote.EventUtil.notifySelected( this ); }, _hide : function() { if( this.getVisibility() ) { this.setVisible( false ); rwt.widgets.base.Widget.flushGlobalQueues(); rwt.remote.Connection.getInstance().getRemoteObject( this ).set( "visible", false ); } }, _getMessageFont : function() { var tv = new rwt.theme.ThemeValues( {} ); return tv.getCssFont( "ToolTip-Message", "font" ); } } } );




© 2015 - 2025 Weber Informatics LLC | Privacy Policy