From e5f5fe878e597511aaf2eab9b9c76d2fb09d50c6 Mon Sep 17 00:00:00 2001 From: yushijinhun Date: Wed, 18 Jul 2018 21:59:12 +0800 Subject: [PATCH] Use bindBidirectional for background type --- .../org/jackhuang/hmcl/ui/SettingsPage.java | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java index 83df018f3..3b88e0a99 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java @@ -188,20 +188,30 @@ public final class SettingsPage extends StackPane implements DecoratorPage { backgroundItem.loadChildren(Collections.singletonList( backgroundItem.createChildren(i18n("launcher.background.default"), EnumBackgroundImage.DEFAULT) )); - - FXUtils.bindString(backgroundItem.getTxtCustom(), CONFIG.backgroundImageProperty()); - backgroundItem.setCustomUserData(EnumBackgroundImage.CUSTOM); - backgroundItem.getGroup().getToggles().stream().filter(it -> it.getUserData() == CONFIG.getBackgroundImageType()).findFirst().ifPresent(it -> it.setSelected(true)); + backgroundItem.getTxtCustom().textProperty().bindBidirectional(CONFIG.backgroundImageProperty()); + + ObjectProperty backgroundType = new SimpleObjectProperty(EnumBackgroundImage.DEFAULT) { + { + invalidated(); + } + + @Override + protected void invalidated() { + backgroundItem.getGroup().getToggles().stream() + .filter(it -> it.getUserData() == get()) + .findFirst() + .ifPresent(it -> it.setSelected(true)); + } + }; + backgroundItem.getGroup().selectedToggleProperty().addListener((observable, oldValue, newValue) -> backgroundType.set((EnumBackgroundImage) newValue.getUserData())); + backgroundType.bindBidirectional(CONFIG.backgroundImageTypeProperty()); backgroundItem.subtitleProperty().bind( - new When(CONFIG.backgroundImageTypeProperty().isEqualTo(EnumBackgroundImage.DEFAULT)) + new When(backgroundType.isEqualTo(EnumBackgroundImage.DEFAULT)) .then(i18n("launcher.background.default")) .otherwise(CONFIG.backgroundImageProperty())); - backgroundItem.setToggleSelectedListener(newValue -> - CONFIG.setBackgroundImageType((EnumBackgroundImage) newValue.getUserData())); - // theme JFXColorPicker picker = new JFXColorPicker(Color.web(CONFIG.getTheme().getColor()), null); picker.setCustomColorText(i18n("color.custom"));