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 1/2] 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()) ); From d570b7a2317cc9bd465f4a9f4a01fec058d30dd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=9E=E5=BA=90?= <109708109+Ciilu@users.noreply.github.com> Date: Sun, 5 Apr 2026 22:24:43 +0800 Subject: [PATCH 2/2] update --- .../hmcl/ui/versions/DataPackListPageSkin.java | 14 ++++++++------ .../hmcl/ui/versions/ModListPageSkin.java | 13 +++++++------ 2 files changed, 15 insertions(+), 12 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 f5fe33ba96..f3a262becc 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 @@ -127,12 +127,14 @@ final class DataPackListPageSkin extends SkinBase { // 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()); - } - ); + ListChangeListener listener = change -> { + selectAllButton.setDisable(!listView.getItems().isEmpty() + && listView.getSelectionModel().getSelectedItems().size() == listView.getItems().size()); + }; + + listView.getSelectionModel().getSelectedItems().addListener(listener); + listView.getItems().addListener(listener); + selectingToolbar.getChildren().addAll( removeButton, enableButton, 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 e7e4b6d310..2c499be03f 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 @@ -161,12 +161,13 @@ final class ModListPageSkin extends SkinBase { // 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()); - } - ); + ListChangeListener listener = change -> { + selectAll.setDisable(!listView.getItems().isEmpty() + && listView.getSelectionModel().getSelectedItems().size() == listView.getItems().size()); + }; + + listView.getSelectionModel().getSelectedItems().addListener(listener); + listView.getItems().addListener(listener); toolbarSelecting.getChildren().setAll( createToolbarButton2(i18n("button.remove"), SVG.DELETE_FOREVER, () -> {