diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/terracotta/TerracottaPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/terracotta/TerracottaPage.java index a8c58e3fc..254f59c3d 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/terracotta/TerracottaPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/terracotta/TerracottaPage.java @@ -19,6 +19,7 @@ package org.jackhuang.hmcl.ui.terracotta; import javafx.beans.property.ReadOnlyObjectProperty; import javafx.beans.property.ReadOnlyObjectWrapper; +import javafx.beans.value.ChangeListener; import javafx.geometry.Insets; import javafx.scene.layout.BorderPane; import javafx.scene.layout.Priority; @@ -28,6 +29,7 @@ import org.jackhuang.hmcl.game.LauncherHelper; import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.setting.Profiles; import org.jackhuang.hmcl.terracotta.TerracottaMetadata; +import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.ui.FXUtils; import org.jackhuang.hmcl.ui.SVG; import org.jackhuang.hmcl.ui.animation.ContainerAnimations; @@ -37,7 +39,10 @@ import org.jackhuang.hmcl.ui.construct.PageAware; import org.jackhuang.hmcl.ui.construct.TabHeader; import org.jackhuang.hmcl.ui.decorator.DecoratorAnimatedPage; import org.jackhuang.hmcl.ui.decorator.DecoratorPage; +import org.jackhuang.hmcl.ui.main.MainPage; import org.jackhuang.hmcl.ui.versions.Versions; +import org.jackhuang.hmcl.util.Lang; +import org.jackhuang.hmcl.util.StringUtils; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; @@ -47,6 +52,9 @@ public class TerracottaPage extends DecoratorAnimatedPage implements DecoratorPa private final TabHeader.Tab statusPage = new TabHeader.Tab<>("statusPage"); private final TransitionPane transitionPane = new TransitionPane(); + @SuppressWarnings("unused") + private ChangeListener instanceChangeListenerHolder; + public TerracottaPage() { statusPage.setNodeSupplier(TerracottaControllerPage::new); tab = new TabHeader(statusPage); @@ -70,6 +78,16 @@ public class TerracottaPage extends DecoratorAnimatedPage implements DecoratorPa .addNavigationDrawerItem(i18n("version.launch"), SVG.ROCKET_LAUNCH, () -> { Profile profile = Profiles.getSelectedProfile(); Versions.launch(profile, profile.getSelectedVersion(), LauncherHelper::setKeep); + }, item -> { + instanceChangeListenerHolder = FXUtils.onWeakChangeAndOperate(Profiles.selectedVersionProperty(), + instanceName -> item.setSubtitle(StringUtils.isNotBlank(instanceName) ? instanceName : i18n("version.empty")) + ); + + MainPage mainPage = Controllers.getRootPage().getMainPage(); + FXUtils.onScroll(item, mainPage.getVersions(), list -> { + String currentId = mainPage.getCurrentGame(); + return Lang.indexWhere(list, instance -> instance.getId().equals(currentId)); + }, it -> mainPage.getProfile().setSelectedVersion(it.getId())); }) .addNavigationDrawerItem(i18n("terracotta.feedback.title"), SVG.FEEDBACK, () -> FXUtils.openLink(TerracottaMetadata.FEEDBACK_LINK)) .addNavigationDrawerItem(i18n("terracotta.easytier"), SVG.HOST, () -> FXUtils.openLink("https://easytier.cn/"))