From 294215a07479c861d0fdf45f90206c19422ec68f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=9E=E5=BA=90?= <109708109+Ciilu@users.noreply.github.com> Date: Sat, 28 Mar 2026 16:37:36 +0800 Subject: [PATCH] update --- .../ui/versions/DataPackListPageSkin.java | 13 +++++++++++-- .../hmcl/ui/versions/ModListPageSkin.java | 19 ++++++++++++++++--- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/DataPackListPageSkin.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/DataPackListPageSkin.java index 342170f86d..f5fe33ba96 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/DataPackListPageSkin.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/DataPackListPageSkin.java @@ -28,6 +28,7 @@ import javafx.beans.property.BooleanProperty; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleBooleanProperty; +import javafx.collections.ListChangeListener; import javafx.collections.transformation.FilteredList; import javafx.geometry.Insets; import javafx.geometry.Pos; @@ -123,12 +124,20 @@ final class DataPackListPageSkin extends SkinBase { enableButton.disableProperty().bind(getSkinnable().readOnly); disableButton.disableProperty().bind(getSkinnable().readOnly); + // reason for not using selectAll() is that selectAll() first clears all selected then selects all, causing the toolbar to flicker + var selectAllButton = createToolbarButton2(i18n("button.select_all"), SVG.SELECT_ALL, () -> listView.getSelectionModel().selectRange(0, listView.getItems().size())); + + listView.getSelectionModel().getSelectedItems().addListener( + (ListChangeListener) change -> { + selectAllButton.setDisable(!listView.getItems().isEmpty() + && listView.getSelectionModel().getSelectedItems().size() == listView.getItems().size()); + } + ); selectingToolbar.getChildren().addAll( removeButton, enableButton, disableButton, - createToolbarButton2(i18n("button.select_all"), SVG.SELECT_ALL, () -> - listView.getSelectionModel().selectRange(0, listView.getItems().size())),//reason for not using selectAll() is that selectAll() first clears all selected then selects all, causing the toolbar to flicker + selectAllButton, createToolbarButton2(i18n("button.cancel"), SVG.CANCEL, () -> listView.getSelectionModel().clearSelection()) ); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPageSkin.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPageSkin.java index bad72233f5..e7e4b6d310 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPageSkin.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPageSkin.java @@ -54,7 +54,10 @@ import org.jackhuang.hmcl.ui.animation.ContainerAnimations; import org.jackhuang.hmcl.ui.animation.TransitionPane; import org.jackhuang.hmcl.ui.construct.*; -import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.FXThread; +import org.jackhuang.hmcl.util.Lazy; +import org.jackhuang.hmcl.util.Pair; +import org.jackhuang.hmcl.util.StringUtils; import org.jackhuang.hmcl.util.i18n.I18n; import org.jackhuang.hmcl.util.io.CompressingUtils; import org.jackhuang.hmcl.util.io.FileUtils; @@ -154,6 +157,17 @@ final class ModListPageSkin extends SkinBase { ); // Toolbar Selecting + + // reason for not using selectAll() is that selectAll() first clears all selected then selects all, causing the toolbar to flicker + var selectAll = createToolbarButton2(i18n("button.select_all"), SVG.SELECT_ALL, () -> listView.getSelectionModel().selectRange(0, listView.getItems().size())); + + listView.getSelectionModel().getSelectedItems().addListener( + (ListChangeListener) change -> { + selectAll.setDisable(!listView.getItems().isEmpty() + && listView.getSelectionModel().getSelectedItems().size() == listView.getItems().size()); + } + ); + toolbarSelecting.getChildren().setAll( createToolbarButton2(i18n("button.remove"), SVG.DELETE_FOREVER, () -> { Controllers.confirm(i18n("button.remove.confirm"), i18n("button.remove"), () -> { @@ -171,8 +185,7 @@ final class ModListPageSkin extends SkinBase { .toList() ) ), - createToolbarButton2(i18n("button.select_all"), SVG.SELECT_ALL, () -> - listView.getSelectionModel().selectAll()), + selectAll, createToolbarButton2(i18n("button.cancel"), SVG.CANCEL, () -> listView.getSelectionModel().clearSelection()) );