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

org.fxyz3d.shapes.primitives.helper.TooltipHelper Maven / Gradle / Ivy

The newest version!
/**
 * TooltipHelper.java
 *
 * Copyright (c) 2018-2019, F(X)yz
 * All rights reserved.
 *
 * 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 F(X)yz, any associated website, 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 F(X)yz 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 org.fxyz3d.shapes.primitives.helper;

import javafx.geometry.Point3D;
import javafx.scene.Node;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.Pane;
import javafx.scene.transform.Translate;
import javafx.util.Duration;

import java.util.logging.Logger;

public class TooltipHelper extends Pane {

    private static final Logger LOG = Logger.getLogger(TooltipHelper.class.getName());

    private static final double SIZE = 20;

    private final Node node;
    private final Node parent;
    private final Tooltip tooltip;

    public TooltipHelper(Node parent, Node node) {
        this.parent = parent;
        this.node = node;
        setPrefSize(SIZE, SIZE);
        setOpacity(0);

        tooltip = new Tooltip();
        tooltip.setShowDelay(Duration.millis(100));
        Tooltip.install(this, tooltip);
    }

    public void updateTooltip(String id, Point3D point3D) {
        updateTooltip(point3D, String.format("%s :: %.3f %.3f %.3f", id == null ? "--" : id,
                point3D.getX(), point3D.getZ(), point3D.getY()));
    }

    public void updateTooltip(Point3D point3D, String tooltipText) {
        if (node == null) {
            LOG.warning("Node was null");
            return;
        }
        if (parent == null) {
            LOG.warning("Parent was null");
            return;
        }
        if (getScene() == null) {
            LOG.warning("TooltipHelper was not added to the scene graph");
            return;
        }
        Point3D coordinates = node.localToScene(point3D, true);
        Point3D p2 = parent.sceneToLocal(coordinates);
        getTransforms().setAll(new Translate(p2.getX() - SIZE / 2, p2.getY() - SIZE / 2));
        tooltip.setText(tooltipText);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy