use of javafx.scene.control.Tooltip in project JFoenix by jfoenixadmin.
the class JFXListCell method updateItem.
/**
* {@inheritDoc}
*/
@Override
public void updateItem(T item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
// remove empty (Trailing cells)
setMouseTransparent(true);
setStyle("-fx-background-color:TRANSPARENT;");
} else {
if (item != null) {
// if cell is not a trailing cell then show it
setStyle(null);
setMouseTransparent(false);
Node currentNode = getGraphic();
Node newNode;
if ((item instanceof Region || item instanceof Control))
newNode = (Node) item;
else
newNode = new Label(item.toString());
boolean isJFXListView = getListView() instanceof JFXListView;
// show cell tooltip if its toggled in JFXListView
if (isJFXListView && ((JFXListView<?>) getListView()).isShowTooltip() && newNode instanceof Label) {
setTooltip(new Tooltip(((Label) newNode).getText()));
}
if (currentNode == null || !currentNode.equals(newNode)) {
// clear nodes
cellContent = newNode;
cellRippler.rippler.cacheRippleClip(false);
// RIPPLER ITEM : in case if the list item has its own rippler bind the list rippler and item rippler properties
if (newNode instanceof JFXRippler) {
// build cell container from exisiting rippler
cellRippler.ripplerFillProperty().bind(((JFXRippler) newNode).ripplerFillProperty());
cellRippler.maskTypeProperty().bind(((JFXRippler) newNode).maskTypeProperty());
cellRippler.positionProperty().bind(((JFXRippler) newNode).positionProperty());
cellContent = ((JFXRippler) newNode).getControl();
} else // SUBLIST ITEM : build the Cell node as sublist the sublist
if (newNode instanceof JFXListView<?>) {
// add the sublist to the parent and style the cell as sublist item
((JFXListView<?>) getListView()).addSublist((JFXListView<?>) newNode, this.getIndex());
this.getStyleClass().add("sublist-item");
if (this.getPadding() != null)
this.setPadding(new Insets(this.getPadding().getTop(), 0, this.getPadding().getBottom(), 0));
// First build the group item used to expand / hide the sublist
StackPane groupNode = new StackPane();
groupNode.getStyleClass().add("sublist-header");
SVGGlyph dropIcon = new SVGGlyph(0, "ANGLE_RIGHT", "M340 548.571q0 7.429-5.714 13.143l-266.286 266.286q-5.714 5.714-13.143 5.714t-13.143-5.714l-28.571-28.571q-5.714-5.714-5.714-13.143t5.714-13.143l224.571-224.571-224.571-224.571q-5.714-5.714-5.714-13.143t5.714-13.143l28.571-28.571q5.714-5.714 13.143-5.714t13.143 5.714l266.286 266.286q5.714 5.714 5.714 13.143z", Color.BLACK);
dropIcon.setStyle("-fx-min-width:0.4em;-fx-max-width:0.4em;-fx-min-height:0.6em;-fx-max-height:0.6em;");
dropIcon.getStyleClass().add("drop-icon");
/*
* alignment of the group node can be changed using the following css selector
* .jfx-list-view .sublist-header{ }
*/
groupNode.getChildren().setAll(((JFXListView<?>) newNode).getGroupnode(), dropIcon);
// the margin is needed when rotating the angle
StackPane.setMargin(dropIcon, new Insets(0, 19, 0, 0));
StackPane.setAlignment(dropIcon, Pos.CENTER_RIGHT);
// Second build the sublist container
StackPane sublistContainer = new StackPane();
sublistContainer.setMinHeight(0);
sublistContainer.setMaxHeight(0);
sublistContainer.getChildren().setAll(newNode);
sublistContainer.setTranslateY(this.snappedBottomInset());
sublistContainer.setOpacity(0);
StackPane.setMargin(newNode, new Insets(-1, -1, 0, -1));
// sublistContainer.heightProperty().addListener((o,oldVal,newVal)->{
// // store the hieght of the sublist and resize it to 0 to make it hidden
// if(subListHeight == -1){
// subListHeight = newVal.doubleValue() + this.snappedBottomInset()/2;
// // totalSubListsHeight += subListHeight;
// // set the parent list
// Platform.runLater(()->{
// sublistContainer.setMinHeight(0);
// sublistContainer.setPrefHeight(0);
// sublistContainer.setMaxHeight(0);
// // double currentHeight = ((JFXListView<T>)getListView()).getHeight();
// // FIXME : THIS SHOULD ONLY CALLED ONCE ( NOW ITS BEING CALLED FOR EVERY SUBLIST)
// // updateListViewHeight(currentHeight - totalSubListsHeight);
// });
// }
// });
// Third, create container of group title and the sublist
VBox contentHolder = new VBox();
contentHolder.getChildren().setAll(groupNode, sublistContainer);
contentHolder.getStyleClass().add("sublist-container");
VBox.setVgrow(groupNode, Priority.ALWAYS);
cellContent = contentHolder;
cellRippler.ripplerPane.addEventHandler(MouseEvent.ANY, (e) -> e.consume());
contentHolder.addEventHandler(MouseEvent.ANY, (e) -> {
if (!e.isConsumed()) {
cellRippler.ripplerPane.fireEvent(e);
e.consume();
}
});
cellRippler.ripplerPane.addEventHandler(MouseEvent.MOUSE_CLICKED, (e) -> {
if (!e.isConsumed()) {
e.consume();
contentHolder.fireEvent(e);
}
});
// cache rippler clip in subnodes
cellRippler.rippler.cacheRippleClip(true);
this.setOnMouseClicked((e) -> e.consume());
// Finally, add sublist animation
contentHolder.setOnMouseClicked((click) -> {
click.consume();
// stop the animation or change the list height
if (expandAnimation != null && expandAnimation.getStatus().equals(Status.RUNNING))
expandAnimation.stop();
// invert the expand property
expandedProperty.set(!expandedProperty.get());
double newAnimatedHeight = ((Region) newNode).prefHeight(-1) * (expandedProperty.get() ? 1 : -1);
double newHeight = expandedProperty.get() ? this.getHeight() + newAnimatedHeight : this.prefHeight(-1);
// animate showing/hiding the sublist
double contentHeight = expandedProperty.get() ? newAnimatedHeight : 0;
if (expandedProperty.get()) {
updateClipHeight(newHeight);
getListView().setPrefHeight(getListView().getHeight() + newAnimatedHeight + animatedHeight);
}
// update the animated height
animatedHeight = newAnimatedHeight;
int opacity = expandedProperty.get() ? 1 : 0;
expandAnimation = new Timeline(new KeyFrame(Duration.millis(320), new KeyValue(sublistContainer.minHeightProperty(), contentHeight, Interpolator.EASE_BOTH), new KeyValue(sublistContainer.maxHeightProperty(), contentHeight, Interpolator.EASE_BOTH), new KeyValue(sublistContainer.opacityProperty(), opacity, Interpolator.EASE_BOTH)));
if (!expandedProperty.get()) {
expandAnimation.setOnFinished((finish) -> {
updateClipHeight(newHeight);
getListView().setPrefHeight(getListView().getHeight() + newAnimatedHeight);
animatedHeight = 0;
});
}
expandAnimation.play();
});
// animate arrow
expandedProperty.addListener((o, oldVal, newVal) -> {
if (newVal)
new Timeline(new KeyFrame(Duration.millis(160), new KeyValue(dropIcon.rotateProperty(), 90, Interpolator.EASE_BOTH))).play();
else
new Timeline(new KeyFrame(Duration.millis(160), new KeyValue(dropIcon.rotateProperty(), 0, Interpolator.EASE_BOTH))).play();
});
}
((Region) cellContent).setMaxHeight(((Region) cellContent).prefHeight(-1));
setGraphic(cellContent);
setText(null);
}
}
}
}
use of javafx.scene.control.Tooltip in project JFoenix by jfoenixadmin.
the class NodesListDemo method start.
@Override
public void start(Stage primaryStage) throws Exception {
try {
JFXButton ssbutton1 = new JFXButton();
Label sslabel = new Label("R1");
sslabel.setStyle("-fx-text-fill:WHITE");
ssbutton1.setGraphic(sslabel);
ssbutton1.setButtonType(ButtonType.RAISED);
ssbutton1.getStyleClass().addAll("animated-option-button", "animated-option-sub-button2");
JFXButton ssbutton2 = new JFXButton("R2");
ssbutton2.setTooltip(new Tooltip("Button 2"));
ssbutton2.setButtonType(ButtonType.RAISED);
ssbutton2.getStyleClass().addAll("animated-option-button", "animated-option-sub-button2");
JFXButton ssbutton3 = new JFXButton("R3");
ssbutton3.setButtonType(ButtonType.RAISED);
ssbutton3.getStyleClass().addAll("animated-option-button", "animated-option-sub-button2");
JFXNodesList nodesList3 = new JFXNodesList();
nodesList3.setSpacing(10);
// init nodes
nodesList3.addAnimatedNode(ssbutton1, (expanded) -> {
return new ArrayList<KeyValue>() {
{
add(new KeyValue(sslabel.rotateProperty(), expanded ? 360 : 0, Interpolator.EASE_BOTH));
}
};
});
nodesList3.addAnimatedNode(ssbutton2);
nodesList3.addAnimatedNode(ssbutton3);
JFXButton sbutton1 = new JFXButton();
Label slabel = new Label("B1");
slabel.setStyle("-fx-text-fill:WHITE");
sbutton1.setGraphic(slabel);
sbutton1.setButtonType(ButtonType.RAISED);
sbutton1.getStyleClass().addAll("animated-option-button", "animated-option-sub-button");
JFXButton sbutton2 = new JFXButton("B2");
sbutton2.setTooltip(new Tooltip("Button 2"));
sbutton2.setButtonType(ButtonType.RAISED);
sbutton2.getStyleClass().addAll("animated-option-button", "animated-option-sub-button");
JFXButton sbutton3 = new JFXButton("B3");
sbutton3.setButtonType(ButtonType.RAISED);
sbutton3.getStyleClass().addAll("animated-option-button", "animated-option-sub-button");
JFXNodesList nodesList2 = new JFXNodesList();
nodesList2.setSpacing(10);
// init nodes
nodesList2.addAnimatedNode(sbutton1, (expanded) -> {
return new ArrayList<KeyValue>() {
{
add(new KeyValue(slabel.rotateProperty(), expanded ? 360 : 0, Interpolator.EASE_BOTH));
}
};
});
nodesList2.addAnimatedNode(nodesList3);
nodesList2.addAnimatedNode(sbutton2);
nodesList2.addAnimatedNode(sbutton3);
nodesList2.setRotate(90);
JFXButton button1 = new JFXButton();
Label label = new Label("G1");
button1.setGraphic(label);
label.setStyle("-fx-text-fill:WHITE");
button1.setButtonType(ButtonType.RAISED);
button1.getStyleClass().add("animated-option-button");
JFXButton button2 = new JFXButton("G2");
button2.setTooltip(new Tooltip("Button 2"));
button2.setButtonType(ButtonType.RAISED);
button2.getStyleClass().add("animated-option-button");
JFXButton button3 = new JFXButton("G3");
button3.setButtonType(ButtonType.RAISED);
button3.getStyleClass().add("animated-option-button");
JFXNodesList nodesList = new JFXNodesList();
nodesList.setSpacing(10);
nodesList.addAnimatedNode(button1, (expanded) -> {
return new ArrayList<KeyValue>() {
{
add(new KeyValue(label.rotateProperty(), expanded ? 360 : 0, Interpolator.EASE_BOTH));
}
};
});
nodesList.addAnimatedNode(button2);
nodesList.addAnimatedNode(nodesList2);
nodesList.addAnimatedNode(button3);
nodesList.setRotate(180);
StackPane main = new StackPane();
main.setPadding(new Insets(10));
JFXButton e = new JFXButton("Click Me");
e.setTranslateY(-50);
e.setTranslateX(-100);
main.getChildren().add(e);
main.getChildren().add(nodesList);
Scene scene = new Scene(main, 600, 600);
scene.getStylesheets().add(NodesListDemo.class.getResource("/resources/css/jfoenix-components.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
} catch (Exception e) {
e.printStackTrace();
}
}
use of javafx.scene.control.Tooltip in project JFoenix by jfoenixadmin.
the class ValidatorBase method onEval.
/**
* this method will update the source control after evaluating the validation condition
*/
protected void onEval() {
Node control = getSrcControl();
if (hasErrors.get()) {
/*
* TODO
* NOTE: NEED TO FIX adding error style class to text area
* is causing the caret to disappear
*/
if (!control.getStyleClass().contains(errorStyleClass.get()))
control.getStyleClass().add(errorStyleClass.get());
control.pseudoClassStateChanged(PSEUDO_CLASS_ERROR, true);
if (control instanceof Control) {
Tooltip controlTooltip = ((Control) control).getTooltip();
if (controlTooltip != null && !controlTooltip.getStyleClass().contains("error-tooltip")) {
tooltip = ((Control) control).getTooltip();
}
Tooltip errorTooltip = new Tooltip();
errorTooltip.getStyleClass().add("error-tooltip");
errorTooltip.setText(getMessage());
((Control) control).setTooltip(errorTooltip);
}
} else {
if (control instanceof Control) {
Tooltip controlTooltip = ((Control) control).getTooltip();
if ((controlTooltip != null && controlTooltip.getStyleClass().contains("error-tooltip")) || (controlTooltip == null && tooltip != null)) {
((Control) control).setTooltip(tooltip);
}
tooltip = null;
}
control.pseudoClassStateChanged(PSEUDO_CLASS_ERROR, false);
control.getStyleClass().remove(errorStyleClass.get());
}
}
use of javafx.scene.control.Tooltip in project jabref by JabRef.
the class ViewModelListCellFactory method call.
@Override
public ListCell<T> call(ListView<T> param) {
return new ListCell<T>() {
@Override
protected void updateItem(T item, boolean empty) {
super.updateItem(item, empty);
T viewModel = getItem();
if (empty || viewModel == null) {
setText(null);
setGraphic(null);
setOnMouseClicked(null);
setTooltip(null);
} else {
if (toText != null) {
setText(toText.call(viewModel));
}
if (toGraphic != null) {
setGraphic(toGraphic.call(viewModel));
}
if (toOnMouseClickedEvent != null) {
setOnMouseClicked(toOnMouseClickedEvent.call(viewModel));
}
if (toStyleClass != null) {
getStyleClass().setAll(toStyleClass.call(viewModel));
}
if (toTooltip != null) {
String tooltipText = toTooltip.call(viewModel);
if (StringUtil.isNotBlank(tooltipText)) {
setTooltip(new Tooltip(tooltipText));
}
}
}
getListView().refresh();
}
};
}
use of javafx.scene.control.Tooltip in project intellij-plugins by StepicOrg.
the class AuthDialog method makeExitButton.
@NotNull
private Button makeExitButton() {
Button button = createButtonWithImage(AllIcons.Actions.Exit);
button.setTooltip(new Tooltip("Login to another account"));
button.setOnAction(event -> Platform.runLater(() -> {
initCookieManager(true);
engine.load(url);
}));
return button;
}
Aggregations