From c60ae111efb8cffc10699a5545a796aebaa8b124 Mon Sep 17 00:00:00 2001 From: huangyuhui Date: Mon, 5 Mar 2018 20:07:30 +0800 Subject: [PATCH] Progress bar in account page --- .../org/jackhuang/hmcl/ui/AccountPage.java | 24 +++++++++++++++---- .../jackhuang/hmcl/ui/DialogController.java | 6 +---- .../jackhuang/hmcl/ui/LeftPaneController.java | 2 +- .../resources/assets/fxml/account-login.fxml | 2 +- .../main/resources/assets/fxml/account.fxml | 2 ++ 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/AccountPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/AccountPage.java index 05de0e601..18d5a96c0 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/AccountPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/AccountPage.java @@ -18,12 +18,14 @@ package org.jackhuang.hmcl.ui; import com.jfoenix.controls.JFXButton; +import com.jfoenix.controls.JFXProgressBar; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; import javafx.fxml.FXML; import javafx.scene.control.Label; +import javafx.scene.image.Image; import javafx.scene.layout.BorderPane; import javafx.scene.layout.StackPane; import org.jackhuang.hmcl.Launcher; @@ -44,7 +46,7 @@ import java.util.Optional; public class AccountPage extends StackPane implements DecoratorPage { private final StringProperty title; private final ObjectProperty onDelete = new SimpleObjectProperty<>(this, "onDelete"); - + private final VersionListItem item; private final Account account; @FXML @@ -65,9 +67,13 @@ public class AccountPage extends StackPane implements DecoratorPage { private JFXButton btnDelete; @FXML private JFXButton btnRefresh; + @FXML + private JFXProgressBar progressBar; - public AccountPage(Account account) { + public AccountPage(Account account, VersionListItem item) { this.account = account; + this.item = item; + title = new SimpleStringProperty(this, "title", Launcher.i18n("account") + " - " + account.getCharacter()); FXUtils.loadFXML(this, "/assets/fxml/account.fxml"); @@ -105,8 +111,18 @@ public class AccountPage extends StackPane implements DecoratorPage { @FXML private void onRefresh() { - if (account instanceof YggdrasilAccount) - AccountHelper.refreshSkinAsync((YggdrasilAccount) account).start(); + if (account instanceof YggdrasilAccount) { + progressBar.setVisible(true); + AccountHelper.refreshSkinAsync((YggdrasilAccount) account) + .finalized(Schedulers.javafx(), (variables, isDependentsSucceeded) -> { + progressBar.setVisible(false); + + if (isDependentsSucceeded) { + Image image = AccountHelper.getSkin((YggdrasilAccount) account, 4); + item.setImage(image, AccountHelper.getViewport(4)); + } + }).start(); + } } public String getTitle() { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/DialogController.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/DialogController.java index 97325326c..f3d7c48e2 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/DialogController.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/DialogController.java @@ -37,11 +37,7 @@ public final class DialogController { AccountLoginPane pane = new AccountLoginPane(account, it -> { res.set(it); latch.countDown(); - Controllers.closeDialog(); - }, () -> { - latch.countDown(); - Controllers.closeDialog(); - }); + }, latch::countDown); pane.setDialog(Controllers.dialog(pane)); }); latch.await(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LeftPaneController.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LeftPaneController.java index 87dc236fa..6b845f048 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LeftPaneController.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LeftPaneController.java @@ -148,7 +148,7 @@ public final class LeftPaneController { VersionListItem item = new VersionListItem(account.getCharacter(), accountType(account)); RipplerContainer ripplerContainer = new RipplerContainer(item); item.setOnSettingsButtonClicked(e -> { - AccountPage accountPage = new AccountPage(account); + AccountPage accountPage = new AccountPage(account, item); JFXPopup popup = new JFXPopup(accountPage); accountPage.setOnDelete(popup::hide); popup.show((Node) e.getSource(), JFXPopup.PopupVPosition.TOP, JFXPopup.PopupHPosition.LEFT, e.getX(), e.getY()); diff --git a/HMCL/src/main/resources/assets/fxml/account-login.fxml b/HMCL/src/main/resources/assets/fxml/account-login.fxml index 97065068e..9402eae99 100644 --- a/HMCL/src/main/resources/assets/fxml/account-login.fxml +++ b/HMCL/src/main/resources/assets/fxml/account-login.fxml @@ -26,7 +26,7 @@ diff --git a/HMCL/src/main/resources/assets/fxml/account.fxml b/HMCL/src/main/resources/assets/fxml/account.fxml index ea116d355..98666ef13 100644 --- a/HMCL/src/main/resources/assets/fxml/account.fxml +++ b/HMCL/src/main/resources/assets/fxml/account.fxml @@ -4,6 +4,7 @@ + @@ -77,4 +78,5 @@ prefWidth="30" prefHeight="30"/> +