/*
* Copyright 2015 Tareq Si Salem
* <tareq.sisalem@gmail.com>
*/
package application;
import application.colorThemes.Theme;
import javafx.animation.TranslateTransition;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.util.Duration;
/**
* @author tareq
*/
public class ToggleButton extends Selectable {
private boolean slideAnimationFinished = true;
private TranslateTransition slideTransition;
public ToggleButton() {
setUp(null);
}
public ToggleButton(MaterialText sideText, double horizontalSpacing) {
setUp(sideText);
sideText.setLayoutX(20 + horizontalSpacing);
sideText.setLayoutY(12);
getChildren().add(sideText);
}
@Override
void setUp(MaterialText sideText) {
setPrefSize(30, 30);
Rectangle baseRect = new Rectangle(30, 15);
baseRect.setArcHeight(15);
baseRect.setArcWidth(15);
baseRect.setFill(Color.GRAY);
Circle circle = new Circle(12);
circle.setCenterY(7.5);
circle.setCenterX(7.5);
circle.setFill(Color.gray(0.8));
circle.setEffect(new ElevationEffect(5));
Circle ripple = new Circle(7.5);
ripple.translateXProperty().bind(circle.translateXProperty());
ripple.setCenterY(7.5);
ripple.setCenterX(7.5);
ripple.setVisible(false);
ripple.setOpacity(0.2);
getChildren().addAll(baseRect, circle, ripple);
addEventHandler(MouseEvent.MOUSE_CLICKED, e -> {
if (e.getButton() == MouseButton.PRIMARY) {
if (!isSelected && animationFinished && slideAnimationFinished) {
animateRipple(ripple, isSelected, 30);
animateCircle(circle);
circle.setFill(accentColor);
if (sideText != null)
sideText.setFill(Color.web(Theme.BlueGreen.ACCENT_COLOR));
isSelected = !isSelected;
} else if (animationFinished && slideAnimationFinished) {
animateCircle(circle);
animateRipple(ripple, isSelected, 30);
circle.setFill(Color.gray(0.8));
isSelected = !isSelected;
if (sideText != null)
sideText.setFill(Color.BLACK);
}
}
});
}
private void animateCircle(Circle circle) {
if (slideTransition == null) {
slideTransition = new TranslateTransition(Duration.millis(500), circle);
}
if (isSelected) {
slideTransition.setByX(-18);
} else {
slideTransition.setByX(18);
}
slideTransition.setCycleCount(1);
slideTransition.play();
slideAnimationFinished = false;
slideTransition.setOnFinished(e -> slideAnimationFinished = true);
}
}