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 9e6627730..8d665725b 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java @@ -117,9 +117,9 @@ public final class FXUtils { value.addListener((a, b, c) -> consumer.accept(c)); } - public static WeakChangeListener onWeakChange(ObservableValue value, Consumer consumer) { - WeakChangeListener listener = new WeakChangeListener<>((a, b, c) -> consumer.accept(c)); - value.addListener(listener); + public static ChangeListener onWeakChange(ObservableValue value, Consumer consumer) { + ChangeListener listener = (a, b, c) -> consumer.accept(c); + value.addListener(new WeakChangeListener<>(listener)); return listener; } @@ -128,7 +128,7 @@ public final class FXUtils { onChange(value, consumer); } - public static WeakChangeListener onWeakChangeAndOperate(ObservableValue value, Consumer consumer) { + public static ChangeListener onWeakChangeAndOperate(ObservableValue value, Consumer consumer) { consumer.accept(value.getValue()); return onWeakChange(value, consumer); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java index acc205a2b..2dd9e460f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java @@ -25,7 +25,7 @@ import javafx.application.Platform; import javafx.beans.InvalidationListener; import javafx.beans.binding.Bindings; import javafx.beans.property.*; -import javafx.beans.value.WeakChangeListener; +import javafx.beans.value.ChangeListener; import javafx.css.PseudoClass; import javafx.geometry.Insets; import javafx.geometry.Pos; @@ -83,7 +83,7 @@ public final class LogWindow extends Stage { } }; private final LogWindowImpl impl = new LogWindowImpl(); - private final WeakChangeListener logLinesListener = FXUtils.onWeakChange(config().logLinesProperty(), logLines -> checkLogCount()); + private final ChangeListener logLinesListener = FXUtils.onWeakChange(config().logLinesProperty(), logLines -> checkLogCount()); private Consumer exportGameCrashInfoCallback; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java index 6aec2d2bf..8d6cf0bc0 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java @@ -67,7 +67,7 @@ import static org.jackhuang.hmcl.ui.FXUtils.newImage; import static org.jackhuang.hmcl.ui.FXUtils.stringConverter; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; -public final class VersionSettingsPage extends StackPane implements DecoratorPage, VersionPage.VersionLoadable { +public final class VersionSettingsPage extends StackPane implements DecoratorPage, VersionPage.VersionLoadable, PageAware { private final ReadOnlyObjectWrapper state = new ReadOnlyObjectWrapper<>(new State("", null, false, false, false)); private final boolean globalSetting; @@ -153,6 +153,8 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag specificSettingsLink.setOnMouseClicked(e -> editSpecificSettings()); specificSettingsHint.setChildren(text, specificSettingsLink); + specificSettingsHint.managedProperty().bind(navigateToSpecificSettings); + specificSettingsHint.visibleProperty().bind(navigateToSpecificSettings); rootPane.getChildren().addAll(specificSettingsHint); } @@ -582,9 +584,17 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag listenerHolder.add(FXUtils.onWeakChangeAndOperate(profile.selectedVersionProperty(), selectedVersion -> { this.selectedVersion.setValue(selectedVersion); - navigateToSpecificSettings.set(!profile.getRepository().getVersionSetting(selectedVersion).isUsesGlobal()); + + VersionSetting specializedVersionSetting = profile.getRepository().getLocalVersionSetting(selectedVersion); + if (specializedVersionSetting != null) { + navigateToSpecificSettings.bind(specializedVersionSetting.usesGlobalProperty().not()); + } else { + navigateToSpecificSettings.unbind(); + navigateToSpecificSettings.set(false); + } })); } else { + navigateToSpecificSettings.unbind(); navigateToSpecificSettings.set(false); }