Use MappedObservableList in AuthlibInjectorServersPage

This commit is contained in:
yushijinhun
2018-07-20 20:21:39 +08:00
parent 170189c344
commit b820aad358

View File

@@ -17,17 +17,18 @@
*/ */
package org.jackhuang.hmcl.ui; package org.jackhuang.hmcl.ui;
import static java.util.stream.Collectors.toList;
import static org.jackhuang.hmcl.ui.FXUtils.loadFXML; import static org.jackhuang.hmcl.ui.FXUtils.loadFXML;
import static org.jackhuang.hmcl.ui.FXUtils.smoothScrolling; import static org.jackhuang.hmcl.ui.FXUtils.smoothScrolling;
import static org.jackhuang.hmcl.util.i18n.I18n.i18n; import static org.jackhuang.hmcl.util.i18n.I18n.i18n;
import org.jackhuang.hmcl.auth.authlibinjector.AuthlibInjectorServer;
import org.jackhuang.hmcl.ui.wizard.DecoratorPage; import org.jackhuang.hmcl.ui.wizard.DecoratorPage;
import org.jackhuang.hmcl.util.MappedObservableList;
import javafx.beans.InvalidationListener; import javafx.beans.binding.Bindings;
import javafx.beans.WeakInvalidationListener;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty; import javafx.beans.property.StringProperty;
import javafx.collections.ObservableList;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.scene.control.ScrollPane; import javafx.scene.control.ScrollPane;
import javafx.scene.layout.StackPane; import javafx.scene.layout.StackPane;
@@ -42,26 +43,21 @@ public class AuthlibInjectorServersPage extends StackPane implements DecoratorPa
@FXML private VBox listPane; @FXML private VBox listPane;
@FXML private StackPane contentPane; @FXML private StackPane contentPane;
private InvalidationListener serversListener; private ObservableList<AuthlibInjectorServerItem> serverItems;
public AuthlibInjectorServersPage() { public AuthlibInjectorServersPage() {
loadFXML(this, "/assets/fxml/authlib-injector-servers.fxml"); loadFXML(this, "/assets/fxml/authlib-injector-servers.fxml");
smoothScrolling(scrollPane); smoothScrolling(scrollPane);
serversListener = observable -> updateServersList(); serverItems = MappedObservableList.create(CONFIG.getAuthlibInjectorServers(), this::createServerItem);
CONFIG.getAuthlibInjectorServers().addListener(new WeakInvalidationListener(serversListener)); Bindings.bindContent(listPane.getChildren(), serverItems);
updateServersList();
} }
private void updateServersList() { private AuthlibInjectorServerItem createServerItem(AuthlibInjectorServer server) {
listPane.getChildren().setAll( return new AuthlibInjectorServerItem(server,
CONFIG.getAuthlibInjectorServers().stream() item -> CONFIG.getAuthlibInjectorServers().remove(item.getServer()));
.map(server -> new AuthlibInjectorServerItem(server,
item -> CONFIG.getAuthlibInjectorServers().remove(item.getServer())))
.collect(toList()));
} }
@FXML @FXML
private void onAdd() { private void onAdd() {
Controllers.dialog(new AddAuthlibInjectorServerPane()); Controllers.dialog(new AddAuthlibInjectorServerPane());