From 2516fb5d69c7578a0e84de60e60ab62aa64189ea Mon Sep 17 00:00:00 2001 From: Glavo Date: Mon, 20 Oct 2025 20:08:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=A8=E9=99=B6=E7=93=A6=E8=81=94=E6=9C=BA?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E7=9A=84=E5=90=AF=E5=8A=A8=E6=B8=B8=E6=88=8F?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E4=B8=AD=E6=98=BE=E7=A4=BA=E5=AE=9E=E4=BE=8B?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=20(#4705)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmcl/ui/terracotta/TerracottaPage.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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/"))