/* 
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. 
 * 
 * This file is available and licensed under the following license:
 * 
 * Redistribution and use in source and binary forms, with or without 
 * modification, are permitted provided that the following conditions are met:
 *
 *   * Redistributions of source code must retain the above copyright notice, 
 *     this list of conditions and the following disclaimer.
 *
 *   * Redistributions in binary form must reproduce the above copyright notice,
 *     this list of conditions and the following disclaimer in the documentation
 *     and/or other materials provided with the distribution.
 *
 *   * Neither the name of Sun Microsystems nor the names of its contributors 
 *     may be used to endorse or promote products derived from this software 
 *     without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package podcastfeedviewer;

import javafx.scene.CustomNode;
import javafx.scene.Node;
import javafx.scene.shape.Rectangle;
import javafx.scene.effect.Glow;
import javafx.scene.paint.Color;
import javafx.animation.Timeline;
import javafx.animation.Interpolator;
import javafx.scene.input.MouseEvent;
import javafx.scene.Group;
import javafx.scene.text.Text;
import javafx.scene.text.Font;

/**
 * @author Raghu Nair
 */

public class TooltipNode extends CustomNode{


    /* Source node where you want to show the tool tip */
    public-init var sourceNode:Node;

    /* Tool tip text */
    public-init var tooltip:String;

    /* Width */
    public-init var width :Integer = 80;

    var glowColor = Color.TRANSPARENT;
    override var opacity = 0.0;
    def showTip:Timeline = Timeline {
        keyFrames: [
            at (0s) {
                glowColor => Color.TRANSPARENT;
            opacity => 0.0;
            },
            at (1s) {
                glowColor =>Color.color(0.5, 0.5, 0.5, 0.5);
                opacity => 1.0 tween Interpolator.EASEBOTH;
            },
        ]
    }

    var glowEffect = Glow {
        level: 0.2
    }

    //rectanle holds the tooltip text.
    var rectangle:Rectangle = Rectangle{
        translateX: bind ( sourceNode.translateX+(sourceNode.layoutBounds.width - rectangle.layoutBounds.width )/2)
        translateY: bind (( sourceNode.layoutBounds.height/2) + 45 * Main.heightRatio1);
        fill:Color.YELLOW
        width:width
        height:25
    }

    // tooltip text.
    var text:Text = Text {
        translateX: bind (rectangle.translateX )
        translateY: bind rectangle.translateY+(rectangle.layoutBounds.height / 2) + 3
        font: Font {
            size: 11
        }
        fill: Color.BLUEVIOLET
        content: bind tooltip
    }

    override function create():Node {
        sourceNode.onMouseEntered = function(e:MouseEvent){            
            showTip.rate = 1.0;
            sourceNode.effect = glowEffect;
            showTip.playFromStart();
        }
        sourceNode.onMouseExited =  function(e:MouseEvent){
            showTip.rate = -1.0;
            sourceNode.effect = null;
            opacity = 0.0;
        }
        Group{
            content: [rectangle,text]
       }

    }
}