From 7c89fac1e90ad20c4f2511d1bf0fd9d64b6ccbe9 Mon Sep 17 00:00:00 2001 From: yushijinhun Date: Sat, 23 Feb 2019 22:14:29 +0800 Subject: [PATCH] Rename MultiStepBinding->BindingMapping --- .../jackhuang/hmcl/game/TexturesLoader.java | 6 ++-- .../org/jackhuang/hmcl/setting/Theme.java | 4 ++- .../org/jackhuang/hmcl/ui/Controllers.java | 4 +-- .../hmcl/ui/account/AccountListItemSkin.java | 3 +- .../hmcl/ui/account/AddAccountPane.java | 4 +-- .../hmcl/ui/construct/FontComboBox.java | 4 +-- ...tiStepBinding.java => BindingMapping.java} | 36 ++++++++++++------- .../hmcl/util/javafx/ExtendedProperties.java | 4 +-- 8 files changed, 39 insertions(+), 26 deletions(-) rename HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/{MultiStepBinding.java => BindingMapping.java} (80%) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/TexturesLoader.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/TexturesLoader.java index ca42dc069..19fb1273d 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/TexturesLoader.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/TexturesLoader.java @@ -52,7 +52,7 @@ import org.jackhuang.hmcl.auth.yggdrasil.YggdrasilAccount; import org.jackhuang.hmcl.auth.yggdrasil.YggdrasilService; import org.jackhuang.hmcl.task.FileDownloadTask; import org.jackhuang.hmcl.util.StringUtils; -import org.jackhuang.hmcl.util.javafx.MultiStepBinding; +import org.jackhuang.hmcl.util.javafx.BindingMapping; import javafx.beans.binding.Bindings; import javafx.beans.binding.ObjectBinding; @@ -154,7 +154,7 @@ public final class TexturesLoader { public static ObjectBinding skinBinding(YggdrasilService service, UUID uuid) { LoadedTexture uuidFallback = getDefaultSkin(TextureModel.detectUUID(uuid)); - return MultiStepBinding.of(service.getProfileRepository().binding(uuid)) + return BindingMapping.of(service.getProfileRepository().binding(uuid)) .map(profile -> profile .flatMap(it -> { try { @@ -204,7 +204,7 @@ public final class TexturesLoader { } public static ObjectBinding fxAvatarBinding(YggdrasilService service, UUID uuid, int size) { - return MultiStepBinding.of(skinBinding(service, uuid)) + return BindingMapping.of(skinBinding(service, uuid)) .map(it -> toAvatar(it.image, size)) .map(img -> SwingFXUtils.toFXImage(img, null)); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java index 85db75178..9d592ca80 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java @@ -27,6 +27,7 @@ import javafx.scene.paint.Color; import org.jackhuang.hmcl.util.Logging; import org.jackhuang.hmcl.util.io.FileUtils; import org.jackhuang.hmcl.util.io.IOUtils; +import org.jackhuang.hmcl.util.javafx.BindingMapping; import java.io.File; import java.io.IOException; @@ -132,7 +133,8 @@ public class Theme { } public static ObjectBinding foregroundFillBinding() { - return Bindings.createObjectBinding(() -> config().getTheme().getForegroundColor(), config().themeProperty()); + return BindingMapping.of(config().themeProperty()) + .map(Theme::getForegroundColor); } public static ObjectBinding blackFillBinding() { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java index 8a2de0b6f..6439af6fa 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java @@ -45,7 +45,7 @@ import org.jackhuang.hmcl.upgrade.UpdateChecker; import org.jackhuang.hmcl.util.FutureCallback; import org.jackhuang.hmcl.util.Logging; import org.jackhuang.hmcl.util.io.FileUtils; -import org.jackhuang.hmcl.util.javafx.MultiStepBinding; +import org.jackhuang.hmcl.util.javafx.BindingMapping; import org.jackhuang.hmcl.util.platform.JavaVersion; import org.jackhuang.hmcl.util.versioning.VersionNumber; @@ -158,7 +158,7 @@ public final class Controllers { }); mainPage.showUpdateProperty().bind(UpdateChecker.outdatedProperty()); mainPage.latestVersionProperty().bind( - MultiStepBinding.of(UpdateChecker.latestVersionProperty()) + BindingMapping.of(UpdateChecker.latestVersionProperty()) .map(version -> version == null ? "" : i18n("update.bubble.title", version.getVersion()))); Profiles.registerVersionsListener(profile -> { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountListItemSkin.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountListItemSkin.java index c986c317b..861469777 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountListItemSkin.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountListItemSkin.java @@ -35,6 +35,7 @@ import javafx.scene.layout.VBox; import org.jackhuang.hmcl.setting.Theme; import org.jackhuang.hmcl.ui.FXUtils; import org.jackhuang.hmcl.ui.SVG; +import org.jackhuang.hmcl.util.javafx.BindingMapping; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; @@ -75,7 +76,7 @@ public class AccountListItemSkin extends SkinBase { if (skinnable.getAccount() instanceof AuthlibInjectorAccount) { Tooltip tooltip = new Tooltip(); AuthlibInjectorServer server = ((AuthlibInjectorAccount) skinnable.getAccount()).getServer(); - tooltip.textProperty().bind(Bindings.createStringBinding(server::toString, server)); + tooltip.textProperty().bind(BindingMapping.of(server, AuthlibInjectorServer::toString)); FXUtils.installSlowTooltip(subtitle, tooltip); } VBox item = new VBox(title, subtitle); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AddAccountPane.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AddAccountPane.java index cbe283d8f..06744aa4c 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AddAccountPane.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AddAccountPane.java @@ -47,7 +47,7 @@ import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.ui.FXUtils; import org.jackhuang.hmcl.ui.construct.*; -import org.jackhuang.hmcl.util.javafx.MultiStepBinding; +import org.jackhuang.hmcl.util.javafx.BindingMapping; import java.util.ArrayList; import java.util.List; @@ -126,7 +126,7 @@ public class AddAccountPane extends StackPane { cboServers.getSelectionModel().selectedItemProperty(), cboServers.visibleProperty())); // authlib-injector links - links.bind(MultiStepBinding.of(cboServers.getSelectionModel().selectedItemProperty()) + links.bind(BindingMapping.of(cboServers.getSelectionModel().selectedItemProperty()) .map(AddAccountPane::createHyperlinks) .map(FXCollections::observableList)); Bindings.bindContent(linksContainer.getChildren(), links); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FontComboBox.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FontComboBox.java index abb1d10f3..3a87d2990 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FontComboBox.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FontComboBox.java @@ -21,7 +21,7 @@ import static javafx.collections.FXCollections.emptyObservableList; import static javafx.collections.FXCollections.observableList; import static javafx.collections.FXCollections.singletonObservableList; -import org.jackhuang.hmcl.util.javafx.MultiStepBinding; +import org.jackhuang.hmcl.util.javafx.BindingMapping; import com.jfoenix.controls.JFXComboBox; import com.jfoenix.controls.JFXListCell; @@ -49,7 +49,7 @@ public class FontComboBox extends JFXComboBox { } }); - itemsProperty().bind(MultiStepBinding.of(valueProperty()) + itemsProperty().bind(BindingMapping.of(valueProperty()) .map(value -> value == null ? emptyObservableList() : singletonObservableList(value))); setOnMouseClicked(e -> { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/MultiStepBinding.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/BindingMapping.java similarity index 80% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/MultiStepBinding.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/BindingMapping.java index 56cc3f6c2..7fe1441a0 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/MultiStepBinding.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/BindingMapping.java @@ -27,42 +27,52 @@ import java.util.function.Supplier; import javafx.application.Platform; +import javafx.beans.Observable; +import javafx.beans.binding.Bindings; import javafx.beans.binding.ObjectBinding; import javafx.beans.value.ObservableValue; /** * @author yushijinhun */ -public abstract class MultiStepBinding extends ObjectBinding { +public abstract class BindingMapping extends ObjectBinding { - public static MultiStepBinding of(ObservableValue property) { + @SuppressWarnings("unchecked") + public static BindingMapping of(ObservableValue property) { + if (property instanceof BindingMapping) { + return (BindingMapping) property; + } return new SimpleBinding<>(property); } + public static BindingMapping of(S watched, Function mapper) { + return of(Bindings.createObjectBinding(() -> mapper.apply(watched), watched)); + } + protected final ObservableValue predecessor; - public MultiStepBinding(ObservableValue predecessor) { + public BindingMapping(ObservableValue predecessor) { this.predecessor = requireNonNull(predecessor); bind(predecessor); } - public MultiStepBinding map(Function mapper) { + public BindingMapping map(Function mapper) { return new MappedBinding<>(this, mapper); } - public MultiStepBinding flatMap(Function> mapper) { + public BindingMapping flatMap(Function> mapper) { return flatMap(mapper, null); } - public MultiStepBinding flatMap(Function> mapper, Supplier nullAlternative) { + public BindingMapping flatMap(Function> mapper, Supplier nullAlternative) { return new FlatMappedBinding<>(map(mapper), nullAlternative); } - public MultiStepBinding asyncMap(Function> mapper, V initial) { + public BindingMapping asyncMap(Function> mapper, V initial) { return new AsyncMappedBinding<>(this, mapper, initial); } - private static class SimpleBinding extends MultiStepBinding { + private static class SimpleBinding extends BindingMapping { public SimpleBinding(ObservableValue predecessor) { super(predecessor); @@ -74,17 +84,17 @@ public abstract class MultiStepBinding extends ObjectBinding { } @Override - public MultiStepBinding map(Function mapper) { + public BindingMapping map(Function mapper) { return new MappedBinding<>(predecessor, mapper); } @Override - public MultiStepBinding asyncMap(Function> mapper, V initial) { + public BindingMapping asyncMap(Function> mapper, V initial) { return new AsyncMappedBinding<>(predecessor, mapper, initial); } } - private static class MappedBinding extends MultiStepBinding { + private static class MappedBinding extends BindingMapping { private final Function mapper; @@ -99,7 +109,7 @@ public abstract class MultiStepBinding extends ObjectBinding { } } - private static class FlatMappedBinding, U> extends MultiStepBinding { + private static class FlatMappedBinding, U> extends BindingMapping { private final Supplier nullAlternative; private T lastObservable = null; @@ -134,7 +144,7 @@ public abstract class MultiStepBinding extends ObjectBinding { } } - private static class AsyncMappedBinding extends MultiStepBinding { + private static class AsyncMappedBinding extends BindingMapping { private boolean initialized = false; private T prev; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/ExtendedProperties.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/ExtendedProperties.java index 1c10b07a5..e908c3b30 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/ExtendedProperties.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/ExtendedProperties.java @@ -53,7 +53,7 @@ public final class ExtendedProperties { private static ObjectProperty createPropertyForSelectionModel(Object bean, Property> modelProperty) { return new ReadWriteComposedProperty<>(bean, "extra.selectedItem", - MultiStepBinding.of(modelProperty) + BindingMapping.of(modelProperty) .flatMap(SelectionModel::selectedItemProperty), obj -> modelProperty.getValue().select(obj)); } @@ -107,7 +107,7 @@ public final class ExtendedProperties { }; ReadWriteComposedProperty property = new ReadWriteComposedProperty<>(toggleGroup, "extra.selectedItem", - MultiStepBinding.of(selectedTogglePropertyFor(toggleGroup)) + BindingMapping.of(selectedTogglePropertyFor(toggleGroup)) .map(mapper), itemSelector);