From 8687bb9487ef1c8058df48dfac175d5725facb39 Mon Sep 17 00:00:00 2001 From: Glavo Date: Sat, 5 Nov 2022 19:28:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20MessageDialogPane=20?= =?UTF-8?q?=E6=80=BB=E6=98=AF=E6=8A=98=E5=8F=A0=E5=86=85=E5=AE=B9=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20(#1815)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix #1751: Use ScrollPane in message dialog only when needed close #1777 * Parse segment only if it contains xml tag --- .../java/org/jackhuang/hmcl/ui/FXUtils.java | 3 ++ .../hmcl/ui/construct/MessageDialogPane.java | 23 +++++++++- .../resources/assets/fxml/message-dialog.fxml | 44 +++++++------------ 3 files changed, 40 insertions(+), 30 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java index 2610c91d3..ff159d5a8 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java @@ -710,6 +710,9 @@ public final class FXUtils { } public static List parseSegment(String segment, Consumer hyperlinkAction) { + if (segment.indexOf('<') < 0) + return Collections.singletonList(new Text(segment)); + try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageDialogPane.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageDialogPane.java index 97b7a3857..0dcbe3107 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageDialogPane.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageDialogPane.java @@ -23,8 +23,12 @@ import javafx.fxml.FXML; import javafx.scene.Node; import javafx.scene.control.ButtonBase; import javafx.scene.control.Label; +import javafx.scene.control.ScrollPane; import javafx.scene.layout.HBox; +import javafx.scene.layout.Priority; import javafx.scene.layout.StackPane; +import javafx.scene.layout.VBox; +import javafx.scene.text.TextFlow; import org.jackhuang.hmcl.setting.Theme; import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.ui.FXUtils; @@ -69,7 +73,17 @@ public final class MessageDialogPane extends StackPane { public MessageDialogPane(@NotNull String text, @Nullable String title, @NotNull MessageType type) { FXUtils.loadFXML(this, "/assets/fxml/message-dialog.fxml"); - content.getChildren().setAll(FXUtils.segmentToTextFlow(text, Controllers::onHyperlinkAction)); + EnhancedTextFlow textFlow = new EnhancedTextFlow(); + textFlow.getChildren().setAll(FXUtils.parseSegment(text, Controllers::onHyperlinkAction)); + + if (textFlow.computePrefHeight(400.0) <= 350.0) + content.getChildren().setAll(textFlow); + else { + ScrollPane scrollPane = new ScrollPane(textFlow); + VBox.setVgrow(scrollPane, Priority.ALWAYS); + scrollPane.setFitToWidth(true); + content.getChildren().setAll(scrollPane); + } if (title != null) this.title.setText(title); @@ -114,6 +128,13 @@ public final class MessageDialogPane extends StackPane { return cancelButton; } + private static final class EnhancedTextFlow extends TextFlow { + @Override + public double computePrefHeight(double width) { + return super.computePrefHeight(width); + } + } + public static class Builder { private final MessageDialogPane dialog; diff --git a/HMCL/src/main/resources/assets/fxml/message-dialog.fxml b/HMCL/src/main/resources/assets/fxml/message-dialog.fxml index 6c0be25e8..5fff367e7 100644 --- a/HMCL/src/main/resources/assets/fxml/message-dialog.fxml +++ b/HMCL/src/main/resources/assets/fxml/message-dialog.fxml @@ -1,38 +1,24 @@ - - - - - -
- - - - - - - - - - - - - - - - -
- - - -
+ +