Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/**
* Copyright (c) 2013, 2018 ControlsFX
* 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 ControlsFX, 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 CONTROLSFX 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 impl.org.controlsfx.skin;
import javafx.animation.Animation.Status;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.beans.InvalidationListener;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.collections.MapChangeListener;
import javafx.collections.ObservableMap;
import javafx.event.EventHandler;
import javafx.geometry.Side;
import javafx.scene.Node;
import javafx.scene.control.SkinBase;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.scene.shape.Rectangle;
import javafx.util.Duration;
import org.controlsfx.control.HiddenSidesPane;
public class HiddenSidesPaneSkin extends SkinBase {
private static final String SHOW = "showPane";
private final StackPane stackPane;
private final EventHandler exitedHandler;
private boolean mousePressed;
public HiddenSidesPaneSkin(HiddenSidesPane pane) {
super(pane);
exitedHandler = event -> {
if (isMouseEnabled() && getSkinnable().getPinnedSide() == null
&& !mousePressed) {
hide();
}
};
stackPane = new StackPane();
getChildren().add(stackPane);
updateStackPane();
InvalidationListener rebuildListener = observable -> updateStackPane();
pane.contentProperty().addListener(rebuildListener);
pane.topProperty().addListener(rebuildListener);
pane.rightProperty().addListener(rebuildListener);
pane.bottomProperty().addListener(rebuildListener);
pane.leftProperty().addListener(rebuildListener);
pane.addEventFilter(MouseEvent.MOUSE_MOVED, event -> {
if (isMouseEnabled() && getSkinnable().getPinnedSide() == null) {
Side side = getSide(event);
if (side != null) {
show(side);
} else if (isMouseMovedOutsideSides(event)) {
hide();
}
}
});
pane.addEventFilter(MouseEvent.MOUSE_EXITED, exitedHandler);
pane.addEventFilter(MouseEvent.MOUSE_PRESSED,
event -> mousePressed = true);
pane.addEventFilter(MouseEvent.MOUSE_RELEASED, event -> {
mousePressed = false;
if (isMouseEnabled() && getSkinnable().getPinnedSide() == null) {
Side side = getSide(event);
if (side != null) {
show(side);
} else {
hide();
}
}
});
for (Side side : Side.values()) {
visibility[side.ordinal()] = new SimpleDoubleProperty(0);
visibility[side.ordinal()].addListener(observable -> getSkinnable()
.requestLayout());
}
Side pinnedSide = getSkinnable().getPinnedSide();
if (pinnedSide != null) {
show(pinnedSide);
}
pane.pinnedSideProperty().addListener(
observable -> show(getSkinnable().getPinnedSide()));
final ObservableMap