Search in sources :

Example 6 with InlineCssTextArea

use of org.fxmisc.richtext.InlineCssTextArea in project RichTextFX by FXMisc.

the class PopupDemo method start.

@Override
public void start(Stage primaryStage) {
    stage = primaryStage;
    StringBuilder sb = new StringBuilder();
    for (int i = 2; i < 100; i++) {
        sb.append(String.valueOf(i)).append("        END\n");
    }
    InlineCssTextArea area = new InlineCssTextArea("Hello popup!\n" + sb.toString());
    area.setWrapText(true);
    VirtualizedScrollPane<InlineCssTextArea> vsPane = new VirtualizedScrollPane<>(area);
    BoundsPopup caretPopup = new BoundsPopup("I am the caret popup button!");
    BoundsPopup selectionPopup = new BoundsPopup("I am the selection popup button!");
    VBox caretOptions = createPopupOptions(caretPopup, "Show/Hide caret-based popup", "Show/Hide popup even when caret is out of viewport");
    VBox selectionOptions = createPopupOptions(selectionPopup, "Show/Hide selection-based popup", "Show/Hide popup even when selection is out of viewport");
    BorderPane borderPane = new BorderPane();
    borderPane.setTop(caretOptions);
    borderPane.setCenter(vsPane);
    borderPane.setBottom(selectionOptions);
    primaryStage.setScene(new Scene(borderPane, 400, 500));
    primaryStage.setTitle("Popup Demo");
    primaryStage.show();
    // ### Set up EventStreams
    // update labels depending on whether item is within viewport
    EventStream<Optional<Bounds>> caretBounds = nonNullValuesOf(area.caretBoundsProperty());
    Subscription cBoundsSub = feedVisibilityToLabelText(caretBounds, caretPopup, "Caret");
    EventStream<Optional<Bounds>> selectionBounds = nonNullValuesOf(area.selectionBoundsProperty());
    Subscription sBoundsSub = feedVisibilityToLabelText(selectionBounds, selectionPopup, "Selection");
    // set up event streams to update popups every time bounds change
    double caretXOffset = 0;
    double caretYOffset = 0;
    double selectionXOffset = 30;
    double selectionYOffset = 30;
    Subscription caretPopupSub = EventStreams.combine(caretBounds, caretPopup.outsideViewportValues()).subscribe(tuple3 -> {
        Optional<Bounds> opt = tuple3._1;
        boolean showPopupWhenCaretOutside = tuple3._2;
        if (opt.isPresent()) {
            Bounds b = opt.get();
            caretPopup.setX(b.getMaxX() + caretXOffset);
            caretPopup.setY(b.getMaxY() + caretYOffset);
            if (caretPopup.isHiddenTemporarily()) {
                caretPopup.show(stage);
                caretPopup.setHideTemporarily(false);
            }
        } else {
            if (!showPopupWhenCaretOutside) {
                caretPopup.hide();
                caretPopup.setHideTemporarily(true);
            }
        }
    });
    Subscription selectionPopupSub = EventStreams.combine(selectionBounds, selectionPopup.outsideViewportValues()).subscribe(tuple3 -> {
        Optional<Bounds> opt = tuple3._1;
        boolean showPopupWhenSelectionOutside = tuple3._2;
        if (opt.isPresent()) {
            Bounds b = opt.get();
            selectionPopup.setX(b.getMinX() + selectionXOffset + caretPopup.getWidth());
            selectionPopup.setY(b.getMinY() + selectionYOffset);
            if (selectionPopup.isHiddenTemporarily()) {
                selectionPopup.show(stage);
                selectionPopup.setHideTemporarily(false);
            }
        } else {
            if (!showPopupWhenSelectionOutside) {
                selectionPopup.hide();
                selectionPopup.setHideTemporarily(true);
            }
        }
    });
    Subscription caretSubs = caretPopupSub.and(cBoundsSub);
    Subscription selectionSubs = selectionPopupSub.and(sBoundsSub);
    caretPopup.show(primaryStage);
    selectionPopup.show(primaryStage);
    area.moveTo(0);
    area.requestFollowCaret();
}
Also used : BorderPane(javafx.scene.layout.BorderPane) Optional(java.util.Optional) Bounds(javafx.geometry.Bounds) Scene(javafx.scene.Scene) InlineCssTextArea(org.fxmisc.richtext.InlineCssTextArea) Subscription(org.reactfx.Subscription) VBox(javafx.scene.layout.VBox) VirtualizedScrollPane(org.fxmisc.flowless.VirtualizedScrollPane)

Example 7 with InlineCssTextArea

use of org.fxmisc.richtext.InlineCssTextArea in project RichTextFX by FXMisc.

the class ShowLineDemo method start.

@Override
public void start(Stage primaryStage) throws Exception {
    StringBuilder sb = new StringBuilder();
    int max = 100;
    for (int i = 0; i < max; i++) {
        sb.append("Line Index: ").append(i).append("\n");
    }
    sb.append("Line Index: ").append(max);
    InlineCssTextArea area = new InlineCssTextArea(sb.toString());
    VirtualizedScrollPane<InlineCssTextArea> vsPane = new VirtualizedScrollPane<>(area);
    Function<Integer, Integer> clamp = i -> Math.max(0, Math.min(i, area.getLength() - 1));
    Button showInViewportButton = createButton("Show line somewhere in Viewport", ae -> {
        area.showParagraphInViewport(clamp.apply(field.getTextAsInt()));
    });
    Button showAtViewportTopButton = createButton("Show line at top of viewport", ae -> {
        area.showParagraphAtTop(clamp.apply(field.getTextAsInt()));
    });
    Button showAtViewportBottomButton = createButton("Show line at bottom of viewport", ae -> {
        area.showParagraphAtBottom(clamp.apply(field.getTextAsInt()));
    });
    VBox vbox = new VBox(field, showInViewportButton, showAtViewportTopButton, showAtViewportBottomButton);
    vbox.setAlignment(Pos.CENTER);
    BorderPane root = new BorderPane();
    root.setCenter(vsPane);
    root.setBottom(vbox);
    Scene scene = new Scene(root, 700, 500);
    primaryStage.setScene(scene);
    primaryStage.show();
}
Also used : Button(javafx.scene.control.Button) Pos(javafx.geometry.Pos) Scene(javafx.scene.Scene) TextField(javafx.scene.control.TextField) VBox(javafx.scene.layout.VBox) Function(java.util.function.Function) Application(javafx.application.Application) Consumer(java.util.function.Consumer) ActionEvent(javafx.event.ActionEvent) Stage(javafx.stage.Stage) VirtualizedScrollPane(org.fxmisc.flowless.VirtualizedScrollPane) InlineCssTextArea(org.fxmisc.richtext.InlineCssTextArea) BorderPane(javafx.scene.layout.BorderPane) BorderPane(javafx.scene.layout.BorderPane) Button(javafx.scene.control.Button) InlineCssTextArea(org.fxmisc.richtext.InlineCssTextArea) Scene(javafx.scene.Scene) VBox(javafx.scene.layout.VBox) VirtualizedScrollPane(org.fxmisc.flowless.VirtualizedScrollPane)

Aggregations

InlineCssTextArea (org.fxmisc.richtext.InlineCssTextArea)7 Scene (javafx.scene.Scene)5 VBox (javafx.scene.layout.VBox)4 Application (javafx.application.Application)3 BorderPane (javafx.scene.layout.BorderPane)3 Stage (javafx.stage.Stage)3 Button (javafx.scene.control.Button)2 Label (javafx.scene.control.Label)2 VirtualizedScrollPane (org.fxmisc.flowless.VirtualizedScrollPane)2 InlineCssTextAreaAppTest (org.fxmisc.richtext.InlineCssTextAreaAppTest)2 Test (org.junit.Test)2 Optional (java.util.Optional)1 Consumer (java.util.function.Consumer)1 Function (java.util.function.Function)1 ActionEvent (javafx.event.ActionEvent)1 Event (javafx.event.Event)1 EventHandler (javafx.event.EventHandler)1 Bounds (javafx.geometry.Bounds)1 Insets (javafx.geometry.Insets)1 Pos (javafx.geometry.Pos)1