From a666b0c9247ae06391d1f2a27a3351e2d427ac0b Mon Sep 17 00:00:00 2001 From: Bixilon Date: Tue, 3 Nov 2020 18:05:27 +0100 Subject: [PATCH] TextComponents: reuse same ObservableList (JavaFX) --- .../java/de/bixilon/minosoft/data/text/BaseComponent.java | 8 +++----- .../java/de/bixilon/minosoft/data/text/ChatComponent.java | 2 +- .../java/de/bixilon/minosoft/data/text/TextComponent.java | 6 +++--- .../bixilon/minosoft/data/text/TranslatableComponent.java | 4 ++-- .../java/de/bixilon/minosoft/gui/main/ServerListCell.java | 5 +++-- 5 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.java b/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.java index e6cdf5758..387f174dc 100644 --- a/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.java +++ b/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.java @@ -16,7 +16,6 @@ package de.bixilon.minosoft.data.text; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import de.bixilon.minosoft.modding.event.events.annotations.Unsafe; -import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.Node; @@ -197,10 +196,9 @@ public class BaseComponent implements ChatComponent { } @Override - public ObservableList getJavaFXText() { - ObservableList list = FXCollections.observableArrayList(); - parts.forEach((chatPart) -> list.addAll(chatPart.getJavaFXText())); - return list; + public ObservableList getJavaFXText(ObservableList nodes) { + parts.forEach((chatPart) -> chatPart.getJavaFXText(nodes)); + return nodes; } @Unsafe diff --git a/src/main/java/de/bixilon/minosoft/data/text/ChatComponent.java b/src/main/java/de/bixilon/minosoft/data/text/ChatComponent.java index 3aabb0416..41286051e 100644 --- a/src/main/java/de/bixilon/minosoft/data/text/ChatComponent.java +++ b/src/main/java/de/bixilon/minosoft/data/text/ChatComponent.java @@ -48,5 +48,5 @@ public interface ChatComponent { /** * @return Returns the a list of Nodes, drawable in JavaFX (TextFlow) */ - ObservableList getJavaFXText(); + ObservableList getJavaFXText(ObservableList nodes); } diff --git a/src/main/java/de/bixilon/minosoft/data/text/TextComponent.java b/src/main/java/de/bixilon/minosoft/data/text/TextComponent.java index 3cfd95884..880bdc556 100644 --- a/src/main/java/de/bixilon/minosoft/data/text/TextComponent.java +++ b/src/main/java/de/bixilon/minosoft/data/text/TextComponent.java @@ -16,7 +16,6 @@ package de.bixilon.minosoft.data.text; import javafx.animation.Animation; import javafx.animation.KeyFrame; import javafx.animation.Timeline; -import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.Node; import javafx.scene.paint.Color; @@ -179,7 +178,7 @@ public class TextComponent implements ChatComponent { } @Override - public ObservableList getJavaFXText() { + public ObservableList getJavaFXText(ObservableList nodes) { Text text = new Text(this.text); if (color != null) { text.setFill(Color.web(color.toString())); @@ -197,7 +196,8 @@ public class TextComponent implements ChatComponent { case ITALIC -> text.setStyle("-fx-font-weight: italic;"); } })); - return FXCollections.observableArrayList(text); + nodes.add(text); + return nodes; } @Override diff --git a/src/main/java/de/bixilon/minosoft/data/text/TranslatableComponent.java b/src/main/java/de/bixilon/minosoft/data/text/TranslatableComponent.java index 1f3a65c58..e4b47c4f1 100644 --- a/src/main/java/de/bixilon/minosoft/data/text/TranslatableComponent.java +++ b/src/main/java/de/bixilon/minosoft/data/text/TranslatableComponent.java @@ -66,10 +66,10 @@ public class TranslatableComponent implements ChatComponent { } @Override - public ObservableList getJavaFXText() { + public ObservableList getJavaFXText(ObservableList nodes) { // ToDo fix nested base component (formatting), not just a string // This is just a dirty workaround to enable formatting and coloring. Still need to do hover, click, ... stuff - return new BaseComponent(getLegacyText()).getJavaFXText(); + return new BaseComponent(getLegacyText()).getJavaFXText(nodes); } } diff --git a/src/main/java/de/bixilon/minosoft/gui/main/ServerListCell.java b/src/main/java/de/bixilon/minosoft/gui/main/ServerListCell.java index 7cf6a22d3..2237a5579 100644 --- a/src/main/java/de/bixilon/minosoft/gui/main/ServerListCell.java +++ b/src/main/java/de/bixilon/minosoft/gui/main/ServerListCell.java @@ -25,6 +25,7 @@ import de.bixilon.minosoft.protocol.ping.ForgeModInfo; import de.bixilon.minosoft.protocol.ping.ServerListPing; import de.bixilon.minosoft.util.DNSUtil; import javafx.application.Platform; +import javafx.collections.FXCollections; import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; import javafx.geometry.Insets; @@ -173,7 +174,7 @@ public class ServerListCell extends ListCell implements Initializable { } serverBrand.setText(ping.getServerModInfo().getBrand()); serverBrand.setTooltip(new Tooltip(ping.getServerModInfo().getInfo())); - motd.getChildren().addAll(ping.getMotd().getJavaFXText()); + motd.getChildren().addAll(ping.getMotd().getJavaFXText(FXCollections.observableArrayList())); if (ping.getFavicon() != null) { icon.setImage(GUITools.getImage(ping.getFavicon())); if (!Arrays.equals(ping.getFavicon(), server.getFavicon())) { @@ -405,7 +406,7 @@ public class ServerListCell extends ListCell implements Initializable { Label serverBrandLabel = new Label(lastPing.getServerBrand()); Label playersOnlineMaxLabel = new Label(LocaleManager.translate(Strings.SERVER_INFO_SLOTS_PLAYERS_ONLINE, lastPing.getPlayerOnline(), lastPing.getMaxPlayers())); TextFlow motdLabel = new TextFlow(); - motdLabel.getChildren().addAll(lastPing.getMotd().getJavaFXText()); + motdLabel.getChildren().addAll(lastPing.getMotd().getJavaFXText(FXCollections.observableArrayList())); Label moddedBrandLabel = new Label(lastPing.getServerModInfo().getBrand()); grid.add(new Label(LocaleManager.translate(Strings.SERVER_INFO_REAL_SERVER_ADDRESS) + ":"), 0, ++column);