50 lines
1.1 KiB
Java
50 lines
1.1 KiB
Java
|
package it.cavallium;
|
||
|
|
||
|
import java.util.Optional;
|
||
|
import java.util.function.Supplier;
|
||
|
import javafx.application.Platform;
|
||
|
import javafx.scene.control.Dialog;
|
||
|
import reactor.core.publisher.Mono;
|
||
|
|
||
|
public class MonoFxUtils {
|
||
|
public static <T> Mono<T> showAndWait(Dialog<T> dialog) {
|
||
|
return Mono.create(sink -> {
|
||
|
Platform.runLater(() -> {
|
||
|
dialog.setOnHidden(event -> {
|
||
|
if (dialog.getResult() != null) {
|
||
|
sink.success(dialog.getResult());
|
||
|
} else {
|
||
|
sink.success();
|
||
|
}
|
||
|
});
|
||
|
dialog.show();
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
|
||
|
public static <T> Mono<Optional<T>> showAndWaitOpt(Dialog<T> dialog) {
|
||
|
return Mono.create(sink -> {
|
||
|
Platform.runLater(() -> {
|
||
|
dialog.setOnHidden(event -> {
|
||
|
sink.success(Optional.<T>ofNullable(dialog.getResult()));
|
||
|
});
|
||
|
dialog.show();
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
|
||
|
public static <T> Mono<T> runLater(Supplier<Mono<T>> mono) {
|
||
|
return Mono.create(sink -> {
|
||
|
Platform.runLater(() -> {
|
||
|
mono.get().subscribe(value -> {
|
||
|
sink.success(value);
|
||
|
}, e -> {
|
||
|
sink.error(e);
|
||
|
}, () -> {
|
||
|
sink.success();
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
}
|