From 97e90de71e1356b65c8ccb4f00c123665e695820 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Fri, 21 Dec 2018 01:12:41 +0800 Subject: [PATCH] Add refresh button in mod list page --- .../java/org/jackhuang/hmcl/ui/ListPage.java | 16 ++++++++++++++++ .../java/org/jackhuang/hmcl/ui/ListPageSkin.java | 14 ++++++++++++++ .../jackhuang/hmcl/ui/versions/ModListPage.java | 7 +++++++ 3 files changed, 37 insertions(+) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/ListPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/ListPage.java index 4eca96e2f..f1a02169a 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/ListPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/ListPage.java @@ -30,9 +30,13 @@ import javafx.scene.control.Skin; public abstract class ListPage extends Control { private final ListProperty items = new SimpleListProperty<>(this, "items", FXCollections.observableArrayList()); private final BooleanProperty loading = new SimpleBooleanProperty(this, "loading", false); + private final BooleanProperty refreshable = new SimpleBooleanProperty(this, "refreshable", false); public abstract void add(); + public void refresh() { + } + @Override protected Skin createDefaultSkin() { return new ListPageSkin(this); @@ -61,4 +65,16 @@ public abstract class ListPage extends Control { public BooleanProperty loadingProperty() { return loading; } + + public boolean isRefreshable() { + return refreshable.get(); + } + + public BooleanProperty refreshableProperty() { + return refreshable; + } + + public void setRefreshable(boolean refreshable) { + this.refreshable.set(refreshable); + } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/ListPageSkin.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/ListPageSkin.java index 2464e8042..178dd9bbe 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/ListPageSkin.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/ListPageSkin.java @@ -72,7 +72,21 @@ public class ListPageSkin extends SkinBase { btnAdd.setGraphic(SVG.plus(Theme.whiteFillBinding(), -1, -1)); btnAdd.setOnMouseClicked(e -> skinnable.add()); + JFXButton btnRefresh = new JFXButton(); + FXUtils.setLimitWidth(btnRefresh, 40); + FXUtils.setLimitHeight(btnRefresh, 40); + btnRefresh.getStyleClass().setAll("jfx-button-raised-round"); + btnRefresh.setButtonType(JFXButton.ButtonType.RAISED); + btnRefresh.setGraphic(SVG.refresh(Theme.whiteFillBinding(), -1, -1)); + btnRefresh.setOnMouseClicked(e -> skinnable.refresh()); + vBox.getChildren().setAll(btnAdd); + + FXUtils.onChangeAndOperate(skinnable.refreshableProperty(), + refreshable -> { + if (refreshable) vBox.getChildren().setAll(btnRefresh, btnAdd); + else vBox.getChildren().setAll(btnAdd); + }); } contentPane.getChildren().setAll(scrollPane, vBox); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPage.java index f57773a9c..e71e1a8f4 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPage.java @@ -47,6 +47,8 @@ public final class ModListPage extends ListPage { private String versionId; public ModListPage() { + setRefreshable(true); + FXUtils.applyDragListener(this, it -> Arrays.asList("jar", "zip", "litemod").contains(FileUtils.getExtension(it)), mods -> { mods.forEach(it -> { try { @@ -59,6 +61,11 @@ public final class ModListPage extends ListPage { }); } + @Override + public void refresh() { + loadMods(modManager, versionId); + } + public void loadVersion(Profile profile, String id) { loadMods(profile.getModManager(), id); }