diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/WeakListenerHolder.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/WeakListenerHolder.java index c04516074..ac3d2f83b 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/WeakListenerHolder.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/WeakListenerHolder.java @@ -20,14 +20,19 @@ package org.jackhuang.hmcl.ui; import javafx.beans.InvalidationListener; import javafx.beans.WeakInvalidationListener; import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; import javafx.beans.value.WeakChangeListener; import javafx.collections.ListChangeListener; import javafx.collections.WeakListChangeListener; +import org.jackhuang.hmcl.event.Event; +import org.jackhuang.hmcl.event.EventManager; +import org.jackhuang.hmcl.event.EventPriority; import java.util.ArrayList; import java.util.List; +import java.util.function.Consumer; -public class WeakListenerHolder { +public final class WeakListenerHolder { private final List refs = new ArrayList<>(0); public WeakListenerHolder() { @@ -48,6 +53,22 @@ public class WeakListenerHolder { return new WeakListChangeListener<>(listener); } + public void registerWeak(EventManager manager, Consumer consumer) { + refs.add(manager.registerWeak(consumer)); + } + + public void registerWeak(EventManager manager, Consumer consumer, EventPriority priority) { + refs.add(manager.registerWeak(consumer, priority)); + } + + public void onWeakChange(ObservableValue value, Consumer consumer) { + refs.add(FXUtils.onWeakChange(value, consumer)); + } + + public void onWeakChangeAndOperate(ObservableValue value, Consumer consumer) { + refs.add(FXUtils.onWeakChangeAndOperate(value, consumer)); + } + public void add(Object obj) { refs.add(obj); }