优化游戏下载页 (#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,
}
private enum VersionType {
private enum VersionTypeFilter {
ALL,
RELEASE,
SNAPSHOTS,
APRIL_FOOLS,
@@ -315,7 +316,7 @@ public final class VersionsPage extends Control implements WizardPage, Refreshab
private final JFXSpinner spinner;
private final JFXTextField nameField;
private final JFXComboBox<VersionType> categoryField = new JFXComboBox<>();
private final JFXComboBox<VersionTypeFilter> categoryField = new JFXComboBox<>();
VersionsPageSkin(VersionsPage control) {
super(control);
@@ -323,8 +324,7 @@ public final class VersionsPage extends Control implements WizardPage, Refreshab
BorderPane root = new BorderPane();
GridPane searchPane = new GridPane();
if (control.versionList.hasType())
root.setTop(searchPane);
root.setTop(searchPane);
searchPane.getStyleClass().addAll("card");
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();
column2.setMaxWidth(150);
ColumnConstraints column3 = new ColumnConstraints();
searchPane.getColumnConstraints().setAll(nameColumn, column1, nameColumn, column2, column3);
if (control.versionList.hasType())
searchPane.getColumnConstraints().setAll(nameColumn, column1, nameColumn, column2, column3);
else
searchPane.getColumnConstraints().setAll(nameColumn, column1, column3);
searchPane.setHgap(16);
searchPane.setVgap(10);
@@ -348,21 +352,42 @@ public final class VersionsPage extends Control implements WizardPage, Refreshab
nameField.setPromptText(i18n("version.search.prompt"));
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.getSelectionModel().select(0);
categoryField.getSelectionModel().selectedItemProperty().addListener(o -> updateList());
JFXButton refreshButton = FXUtils.newRaisedButton(i18n("button.refresh"));
refreshButton.setOnAction(event -> control.onRefresh());
searchPane.addRow(rowIndex++,
new Label(i18n("version.search")), nameField,
new Label(i18n("version.game.type")), categoryField,
refreshButton
);
if (control.versionList.hasType()) {
searchPane.addRow(rowIndex++,
new Label(i18n("version.search")), nameField,
new Label(i18n("version.game.type")), categoryField,
refreshButton
);
} else {
searchPane.addRow(rowIndex++,
new Label(i18n("version.search")), nameField,
refreshButton
);
}
}
// {
// HBox actionsBox = new HBox(8);
// GridPane.setColumnSpan(actionsBox, 4);
@@ -453,20 +478,22 @@ public final class VersionsPage extends Control implements WizardPage, Refreshab
private void updateList() {
Stream<RemoteVersion> versions = getSkinnable().versions.stream();
VersionType versionType = categoryField.getSelectionModel().getSelectedItem();
if (versionType != null)
VersionTypeFilter filter = categoryField.getSelectionModel().getSelectedItem();
if (filter != null)
versions = versions.filter(it -> {
switch (it.getVersionType()) {
RemoteVersion.Type versionType = it.getVersionType();
switch (filter) {
case RELEASE:
return versionType == VersionType.RELEASE;
case PENDING:
return versionType == VersionType.SNAPSHOTS;
case SNAPSHOT:
return versionType == (GameVersionNumber.asGameVersion(it.getGameVersion()).isSpecial()
? VersionType.APRIL_FOOLS
: VersionType.SNAPSHOTS);
return versionType == RemoteVersion.Type.RELEASE;
case SNAPSHOTS:
return versionType == RemoteVersion.Type.SNAPSHOT
|| versionType == RemoteVersion.Type.PENDING;
case APRIL_FOOLS:
return versionType == RemoteVersion.Type.SNAPSHOT
&& GameVersionNumber.asGameVersion(it.getGameVersion()).isSpecial();
case OLD:
return versionType == VersionType.OLD;
return versionType == RemoteVersion.Type.OLD;
case ALL:
default:
return true;
}
@@ -489,6 +516,7 @@ public final class VersionsPage extends Control implements WizardPage, Refreshab
//noinspection DataFlowIssue
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.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.game.all=All
version.game.april_fools=April Fools
version.game.old=Historical
version.game.release=Release

View File

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

View File

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