Package com.aquafx_project.controls.skin

Source Code of com.aquafx_project.controls.skin.AquaToggleButtonSkin

package com.aquafx_project.controls.skin;

import java.util.List;

import javafx.scene.control.Toggle;
import javafx.scene.control.ToggleButton;
import javafx.scene.effect.BlurType;
import javafx.scene.effect.DropShadow;
import javafx.scene.effect.InnerShadow;
import javafx.scene.paint.Color;

import com.aquafx_project.controls.skin.effects.FocusBorder;
import com.aquafx_project.controls.skin.effects.Shadow;
import com.aquafx_project.controls.skin.styles.ButtonType;
import com.sun.javafx.scene.control.skin.ToggleButtonSkin;


public class AquaToggleButtonSkin extends ToggleButtonSkin implements AquaSkin{

    public AquaToggleButtonSkin(ToggleButton button) {
        super(button);

        registerChangeListener(button.focusedProperty(), "FOCUSED");
        registerChangeListener(button.selectedProperty(), "SELECTED");

        if (getSkinnable().isFocused()) {
            setFocusBorder();
        } else {
            setDropShadow();
        }

        if (getSkinnable().isSelected()) {
            adjustToggleGroupBorders();
        }

    }

    private void setFocusBorder() {
        getSkinnable().setEffect(new FocusBorder());
    }

    private void setDropShadow() {
        boolean isPill = false;
        if (getSkinnable().getStyleClass().contains(ButtonType.LEFT_PILL.getStyleName()) || getSkinnable().getStyleClass().contains(
                ButtonType.CENTER_PILL.getStyleName()) || getSkinnable().getStyleClass().contains(
                ButtonType.RIGHT_PILL.getStyleName())) {
            isPill = true;
        }
        getSkinnable().setEffect(new Shadow(isPill));
    }

    @Override protected void handleControlPropertyChanged(String p) {
        super.handleControlPropertyChanged(p);
        if (p == "FOCUSED") {
            if (getSkinnable().isFocused()) {
                setFocusBorder();
            } else if (!getSkinnable().isFocused() || getSkinnable().isDisable()) {
                setDropShadow();
            }
        }
        if (p == "SELECTED") {
            adjustToggleGroupBorders();
        }
    }

    private void adjustToggleGroupBorders() {
        if (getSkinnable().isSelected() && getSkinnable().getToggleGroup() != null) {
            List<Toggle> toggles = getSkinnable().getToggleGroup().getToggles();
            int i = toggles.indexOf(getSkinnable().getToggleGroup().getSelectedToggle());
            if (toggles.size() > i + 1) {
                ToggleButton toggle = (ToggleButton) toggles.get(i + 1);
                toggle.getStyleClass().add("neighbor");
                for (int j = 0; toggles.size() > j; j++) {
                    if (j != i + 1) {
                        ((ToggleButton) toggles.get(j)).getStyleClass().remove("neighbor");
                    }
                }
            }
        } else if (!getSkinnable().isSelected() && getSkinnable().getToggleGroup() != null) {
            List<Toggle> toggles = getSkinnable().getToggleGroup().getToggles();
            int i = toggles.indexOf(getSkinnable());
            if (toggles.size() > i + 1) {
                ToggleButton toggle = (ToggleButton) toggles.get(i + 1);
                toggle.getStyleClass().remove("neighbor");
            }
        }
    }
}
TOP

Related Classes of com.aquafx_project.controls.skin.AquaToggleButtonSkin

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.