fix: onWeakChange should return ChangeListener instead of WeakChangeListener.

This commit is contained in:
huanghongxun 2021-10-05 17:16:18 +08:00
parent 23750e1222
commit 03df019638
3 changed files with 18 additions and 8 deletions

View File

@ -117,9 +117,9 @@ public final class FXUtils {
value.addListener((a, b, c) -> consumer.accept(c));
}
public static <T> WeakChangeListener<T> onWeakChange(ObservableValue<T> value, Consumer<T> consumer) {
WeakChangeListener<T> listener = new WeakChangeListener<>((a, b, c) -> consumer.accept(c));
value.addListener(listener);
public static <T> ChangeListener<T> onWeakChange(ObservableValue<T> value, Consumer<T> consumer) {
ChangeListener<T> 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 <T> WeakChangeListener<T> onWeakChangeAndOperate(ObservableValue<T> value, Consumer<T> consumer) {
public static <T> ChangeListener<T> onWeakChangeAndOperate(ObservableValue<T> value, Consumer<T> consumer) {
consumer.accept(value.getValue());
return onWeakChange(value, consumer);
}

View File

@ -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<Number> logLinesListener = FXUtils.onWeakChange(config().logLinesProperty(), logLines -> checkLogCount());
private final ChangeListener<Number> logLinesListener = FXUtils.onWeakChange(config().logLinesProperty(), logLines -> checkLogCount());
private Consumer<String> exportGameCrashInfoCallback;

View File

@ -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> 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);
}