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();
}
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();
}
Aggregations