优化游戏下载页 (#4264)

This commit is contained in:
Glavo
2025-08-14 20:14:40 +08:00
committed by GitHub
parent 4547448718
commit 42bb602ff5
4 changed files with 55 additions and 24 deletions

View File

@@ -139,7 +139,8 @@ public final class VersionsPage extends Control implements WizardPage, Refreshab
SUCCESS, SUCCESS,
} }
private enum VersionType { private enum VersionTypeFilter {
ALL,
RELEASE, RELEASE,
SNAPSHOTS, SNAPSHOTS,
APRIL_FOOLS, APRIL_FOOLS,
@@ -315,7 +316,7 @@ public final class VersionsPage extends Control implements WizardPage, Refreshab
private final JFXSpinner spinner; private final JFXSpinner spinner;
private final JFXTextField nameField; private final JFXTextField nameField;
private final JFXComboBox<VersionType> categoryField = new JFXComboBox<>(); private final JFXComboBox<VersionTypeFilter> categoryField = new JFXComboBox<>();
VersionsPageSkin(VersionsPage control) { VersionsPageSkin(VersionsPage control) {
super(control); super(control);
@@ -323,7 +324,6 @@ public final class VersionsPage extends Control implements WizardPage, Refreshab
BorderPane root = new BorderPane(); BorderPane root = new BorderPane();
GridPane searchPane = new GridPane(); GridPane searchPane = new GridPane();
if (control.versionList.hasType())
root.setTop(searchPane); root.setTop(searchPane);
searchPane.getStyleClass().addAll("card"); searchPane.getStyleClass().addAll("card");
BorderPane.setMargin(searchPane, new Insets(10, 10, 0, 10)); BorderPane.setMargin(searchPane, new Insets(10, 10, 0, 10));
@@ -335,7 +335,11 @@ public final class VersionsPage extends Control implements WizardPage, Refreshab
ColumnConstraints column2 = new ColumnConstraints(); ColumnConstraints column2 = new ColumnConstraints();
column2.setMaxWidth(150); column2.setMaxWidth(150);
ColumnConstraints column3 = new ColumnConstraints(); ColumnConstraints column3 = new ColumnConstraints();
if (control.versionList.hasType())
searchPane.getColumnConstraints().setAll(nameColumn, column1, nameColumn, column2, column3); searchPane.getColumnConstraints().setAll(nameColumn, column1, nameColumn, column2, column3);
else
searchPane.getColumnConstraints().setAll(nameColumn, column1, column3);
searchPane.setHgap(16); searchPane.setHgap(16);
searchPane.setVgap(10); searchPane.setVgap(10);
@@ -348,21 +352,42 @@ public final class VersionsPage extends Control implements WizardPage, Refreshab
nameField.setPromptText(i18n("version.search.prompt")); nameField.setPromptText(i18n("version.search.prompt"));
nameField.textProperty().addListener(o -> updateList()); nameField.textProperty().addListener(o -> updateList());
categoryField.getItems().addAll(VersionType.values()); if ("game".equals(control.libraryId)) {
categoryField.getItems().setAll(
VersionTypeFilter.ALL,
VersionTypeFilter.RELEASE,
VersionTypeFilter.SNAPSHOTS,
VersionTypeFilter.APRIL_FOOLS,
VersionTypeFilter.OLD
);
categoryField.getSelectionModel().select(VersionTypeFilter.RELEASE);
} else {
categoryField.getItems().setAll(
VersionTypeFilter.ALL,
VersionTypeFilter.RELEASE,
VersionTypeFilter.SNAPSHOTS
);
categoryField.getSelectionModel().select(VersionTypeFilter.ALL);
}
categoryField.setConverter(stringConverter(type -> i18n("version.game." + type.name().toLowerCase(Locale.ROOT)))); categoryField.setConverter(stringConverter(type -> i18n("version.game." + type.name().toLowerCase(Locale.ROOT))));
categoryField.getSelectionModel().select(0);
categoryField.getSelectionModel().selectedItemProperty().addListener(o -> updateList()); categoryField.getSelectionModel().selectedItemProperty().addListener(o -> updateList());
JFXButton refreshButton = FXUtils.newRaisedButton(i18n("button.refresh")); JFXButton refreshButton = FXUtils.newRaisedButton(i18n("button.refresh"));
refreshButton.setOnAction(event -> control.onRefresh()); refreshButton.setOnAction(event -> control.onRefresh());
if (control.versionList.hasType()) {
searchPane.addRow(rowIndex++, searchPane.addRow(rowIndex++,
new Label(i18n("version.search")), nameField, new Label(i18n("version.search")), nameField,
new Label(i18n("version.game.type")), categoryField, new Label(i18n("version.game.type")), categoryField,
refreshButton refreshButton
); );
} else {
searchPane.addRow(rowIndex++,
new Label(i18n("version.search")), nameField,
refreshButton
);
}
} }
// { // {
// HBox actionsBox = new HBox(8); // HBox actionsBox = new HBox(8);
// GridPane.setColumnSpan(actionsBox, 4); // GridPane.setColumnSpan(actionsBox, 4);
@@ -453,20 +478,22 @@ public final class VersionsPage extends Control implements WizardPage, Refreshab
private void updateList() { private void updateList() {
Stream<RemoteVersion> versions = getSkinnable().versions.stream(); Stream<RemoteVersion> versions = getSkinnable().versions.stream();
VersionType versionType = categoryField.getSelectionModel().getSelectedItem(); VersionTypeFilter filter = categoryField.getSelectionModel().getSelectedItem();
if (versionType != null) if (filter != null)
versions = versions.filter(it -> { versions = versions.filter(it -> {
switch (it.getVersionType()) { RemoteVersion.Type versionType = it.getVersionType();
switch (filter) {
case RELEASE: case RELEASE:
return versionType == VersionType.RELEASE; return versionType == RemoteVersion.Type.RELEASE;
case PENDING: case SNAPSHOTS:
return versionType == VersionType.SNAPSHOTS; return versionType == RemoteVersion.Type.SNAPSHOT
case SNAPSHOT: || versionType == RemoteVersion.Type.PENDING;
return versionType == (GameVersionNumber.asGameVersion(it.getGameVersion()).isSpecial() case APRIL_FOOLS:
? VersionType.APRIL_FOOLS return versionType == RemoteVersion.Type.SNAPSHOT
: VersionType.SNAPSHOTS); && GameVersionNumber.asGameVersion(it.getGameVersion()).isSpecial();
case OLD: case OLD:
return versionType == VersionType.OLD; return versionType == RemoteVersion.Type.OLD;
case ALL:
default: default:
return true; return true;
} }
@@ -489,6 +516,7 @@ public final class VersionsPage extends Control implements WizardPage, Refreshab
//noinspection DataFlowIssue //noinspection DataFlowIssue
list.getItems().setAll(versions.collect(Collectors.toList())); list.getItems().setAll(versions.collect(Collectors.toList()));
list.scrollTo(0);
} }
} }
} }

View File

@@ -1428,6 +1428,7 @@ version.empty=No Instances
version.empty.add=Add new instance version.empty.add=Add new instance
version.empty.launch=No available instances. Clicking "OK" will take you to the "Download" page.\n\nYou can also download the game or switch game directories via the "Download" or "All Instances" buttons on the HMCL homepage. version.empty.launch=No available instances. Clicking "OK" will take you to the "Download" page.\n\nYou can also download the game or switch game directories via the "Download" or "All Instances" buttons on the HMCL homepage.
version.empty.hint=There are no Minecraft instances here.\nYou can try switching to another game directory or clicking here to download one. version.empty.hint=There are no Minecraft instances here.\nYou can try switching to another game directory or clicking here to download one.
version.game.all=All
version.game.april_fools=April Fools version.game.april_fools=April Fools
version.game.old=Historical version.game.old=Historical
version.game.release=Release version.game.release=Release

View File

@@ -1221,6 +1221,7 @@ version.empty=沒有遊戲實例
version.empty.add=進入下載頁安裝遊戲 version.empty.add=進入下載頁安裝遊戲
version.empty.launch=沒有可啟動的遊戲。點擊「確定」將進入「下載」頁面。\n你也可以點擊 HMCL 主介面左側的「下載」按鈕安裝遊戲,或在「實例清單」切換遊戲目錄。 version.empty.launch=沒有可啟動的遊戲。點擊「確定」將進入「下載」頁面。\n你也可以點擊 HMCL 主介面左側的「下載」按鈕安裝遊戲,或在「實例清單」切換遊戲目錄。
version.empty.hint=沒有已安裝的遊戲。\n你可以切換其他遊戲目錄或者點擊此處進入遊戲下載頁面。 version.empty.hint=沒有已安裝的遊戲。\n你可以切換其他遊戲目錄或者點擊此處進入遊戲下載頁面。
version.game.all=全部
version.game.april_fools=愚人節 version.game.april_fools=愚人節
version.game.old=遠古版 version.game.old=遠古版
version.game.release=正式版 version.game.release=正式版

View File

@@ -1231,6 +1231,7 @@ version.empty=没有游戏版本
version.empty.add=进入下载页安装游戏 version.empty.add=进入下载页安装游戏
version.empty.launch=没有可启动的游戏。点击“确定”将进入“下载”页面。\n你也可以点击 HMCL 主界面左侧的“下载”按钮安装游戏,或在“版本列表”切换游戏文件夹。 version.empty.launch=没有可启动的游戏。点击“确定”将进入“下载”页面。\n你也可以点击 HMCL 主界面左侧的“下载”按钮安装游戏,或在“版本列表”切换游戏文件夹。
version.empty.hint=没有已安装的游戏。\n你可以切换其他游戏文件夹或者点击此处进入游戏下载页面。 version.empty.hint=没有已安装的游戏。\n你可以切换其他游戏文件夹或者点击此处进入游戏下载页面。
version.game.all=全部
version.game.april_fools=愚人节 version.game.april_fools=愚人节
version.game.old=远古版 version.game.old=远古版
version.game.release=正式版 version.game.release=正式版