Search in sources :

Example 31 with StackPane

use of javafx.scene.layout.StackPane in project bitsquare by bitsquare.

the class BitsquareApp method showErrorPopup.

private void showErrorPopup(Throwable throwable, boolean doShutDown) {
    if (!shutDownRequested) {
        if (scene == null) {
            log.warn("Scene not available yet, we create a new scene. The bug might be caused by an exception in a constructor or by a circular dependency in guice.");
            scene = new Scene(new StackPane(), 1000, 650);
            scene.getStylesheets().setAll("/io/bitsquare/gui/bitsquare.css", "/io/bitsquare/gui/images.css");
            primaryStage.setScene(scene);
            primaryStage.show();
        }
        try {
            try {
                if (!popupOpened) {
                    String message = throwable.getMessage();
                    popupOpened = true;
                    if (message != null)
                        new Popup().error(message).onClose(() -> popupOpened = false).show();
                    else
                        new Popup().error(throwable.toString()).onClose(() -> popupOpened = false).show();
                }
            } catch (Throwable throwable3) {
                log.error("Error at displaying Throwable.");
                throwable3.printStackTrace();
            }
            if (doShutDown)
                stop();
        } catch (Throwable throwable2) {
            // If printStackTrace cause a further exception we don't pass the throwable to the Popup.
            Dialogs.create().owner(primaryStage).title("Error").message(throwable.toString()).masthead("A fatal exception occurred at startup.").showError();
            if (doShutDown)
                stop();
        }
    }
}
Also used : Popup(io.bitsquare.gui.main.overlays.popups.Popup) Scene(javafx.scene.Scene) StackPane(javafx.scene.layout.StackPane)

Example 32 with StackPane

use of javafx.scene.layout.StackPane 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);
            }
        }
    }
}
Also used : Pos(javafx.geometry.Pos) ListCell(javafx.scene.control.ListCell) Control(javafx.scene.control.Control) MouseEvent(javafx.scene.input.MouseEvent) StackPane(javafx.scene.layout.StackPane) VBox(javafx.scene.layout.VBox) Insets(javafx.geometry.Insets) KeyValue(javafx.animation.KeyValue) Tooltip(javafx.scene.control.Tooltip) Color(javafx.scene.paint.Color) KeyFrame(javafx.animation.KeyFrame) Label(javafx.scene.control.Label) Status(javafx.animation.Animation.Status) Node(javafx.scene.Node) Timeline(javafx.animation.Timeline) Rectangle(javafx.scene.shape.Rectangle) SVGGlyph(com.jfoenix.svg.SVGGlyph) Platform(javafx.application.Platform) Priority(javafx.scene.layout.Priority) BooleanProperty(javafx.beans.property.BooleanProperty) Duration(javafx.util.Duration) SimpleBooleanProperty(javafx.beans.property.SimpleBooleanProperty) Region(javafx.scene.layout.Region) Interpolator(javafx.animation.Interpolator) Shape(javafx.scene.shape.Shape) Insets(javafx.geometry.Insets) KeyValue(javafx.animation.KeyValue) Node(javafx.scene.Node) Tooltip(javafx.scene.control.Tooltip) Label(javafx.scene.control.Label) Control(javafx.scene.control.Control) Timeline(javafx.animation.Timeline) SVGGlyph(com.jfoenix.svg.SVGGlyph) Region(javafx.scene.layout.Region) KeyFrame(javafx.animation.KeyFrame) VBox(javafx.scene.layout.VBox) StackPane(javafx.scene.layout.StackPane)

Example 33 with StackPane

use of javafx.scene.layout.StackPane in project JFoenix by jfoenixadmin.

the class IntegerTextFieldEditorBuilder method createNode.

@Override
public Region createNode(Integer value, DoubleBinding minWidthBinding, EventHandler<KeyEvent> keyEventsHandler, ChangeListener<Boolean> focusChangeListener) {
    StackPane pane = new StackPane();
    pane.setStyle("-fx-padding:-10 0 -10 0");
    textField = new JFXTextField(value + "");
    textField.minWidthProperty().bind(minWidthBinding);
    textField.setOnKeyPressed(keyEventsHandler);
    textField.focusedProperty().addListener(focusChangeListener);
    NumberValidator validator = new NumberValidator();
    validator.setMessage("Value must be a number");
    textField.getValidators().add(validator);
    pane.getChildren().add(textField);
    return pane;
}
Also used : NumberValidator(com.jfoenix.validation.NumberValidator) JFXTextField(com.jfoenix.controls.JFXTextField) StackPane(javafx.scene.layout.StackPane)

Example 34 with StackPane

use of javafx.scene.layout.StackPane in project JFoenix by jfoenixadmin.

the class TextFieldEditorBuilder method createNode.

@Override
public Region createNode(String value, DoubleBinding minWidthBinding, EventHandler<KeyEvent> keyEventsHandler, ChangeListener<Boolean> focusChangeListener) {
    StackPane pane = new StackPane();
    pane.setStyle("-fx-padding:-10 0 -10 0");
    textField = new JFXTextField(value);
    textField.setStyle("-fx-background-color:TRANSPARENT;");
    textField.minWidthProperty().bind(minWidthBinding);
    textField.setOnKeyPressed(keyEventsHandler);
    textField.focusedProperty().addListener(focusChangeListener);
    pane.getChildren().add(textField);
    return pane;
}
Also used : JFXTextField(com.jfoenix.controls.JFXTextField) StackPane(javafx.scene.layout.StackPane)

Example 35 with StackPane

use of javafx.scene.layout.StackPane in project JFoenix by jfoenixadmin.

the class JFXComboBox method defaultNodeConverter.

private static <T> NodeConverter<T> defaultNodeConverter() {
    return new NodeConverter<T>() {

        @Override
        public Node toNode(T object) {
            if (object == null)
                return null;
            StackPane selectedValueContainer = new StackPane();
            selectedValueContainer.getStyleClass().add("combo-box-selected-value-container");
            selectedValueContainer.setBackground(new Background(new BackgroundFill(Color.TRANSPARENT, null, null)));
            Label selectedValueLabel;
            if (object instanceof Label)
                selectedValueLabel = new Label(((Label) object).getText());
            else
                selectedValueLabel = new Label(object.toString());
            selectedValueLabel.setTextFill(Color.BLACK);
            selectedValueContainer.getChildren().add(selectedValueLabel);
            StackPane.setAlignment(selectedValueLabel, Pos.CENTER_LEFT);
            StackPane.setMargin(selectedValueLabel, new Insets(0, 0, 0, 5));
            return selectedValueContainer;
        }

        @SuppressWarnings("unchecked")
        @Override
        public T fromNode(Node node) {
            return (T) node;
        }

        @Override
        public String toString(T object) {
            if (object == null)
                return null;
            if (object instanceof Label)
                return ((Label) object).getText();
            return object.toString();
        }
    };
}
Also used : Insets(javafx.geometry.Insets) Background(javafx.scene.layout.Background) NodeConverter(com.jfoenix.converters.base.NodeConverter) BackgroundFill(javafx.scene.layout.BackgroundFill) Node(javafx.scene.Node) StackPane(javafx.scene.layout.StackPane)

Aggregations

StackPane (javafx.scene.layout.StackPane)65 Scene (javafx.scene.Scene)36 Insets (javafx.geometry.Insets)15 BorderPane (javafx.scene.layout.BorderPane)12 Label (javafx.scene.control.Label)10 Parameter (aima.gui.fx.framework.Parameter)8 SimulationPaneBuilder (aima.gui.fx.framework.SimulationPaneBuilder)8 FlowPane (javafx.scene.layout.FlowPane)8 VBox (javafx.scene.layout.VBox)6 JFXButton (com.jfoenix.controls.JFXButton)5 ArrayList (java.util.ArrayList)5 Platform (javafx.application.Platform)5 MapPaneCtrl (aimax.osm.gui.fx.viewer.MapPaneCtrl)4 List (java.util.List)4 Node (javafx.scene.Node)4 Button (javafx.scene.control.Button)4 KeyCode (javafx.scene.input.KeyCode)4 Pane (javafx.scene.layout.Pane)4 Color (javafx.scene.paint.Color)4 WebView (javafx.scene.web.WebView)4