From abae32fd700004ef7fffb3b77233db4294f0d961 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Wed, 6 Oct 2021 17:28:21 +0800 Subject: [PATCH] feat(mod): only show buttons for selection when some mods selected. --- .../main/java/org/jackhuang/hmcl/ui/SVG.java | 12 +++++++ .../hmcl/ui/download/DownloadPage.java | 4 +++ .../hmcl/ui/versions/ModListPage.java | 5 +++ .../hmcl/ui/versions/ModListPageSkin.java | 32 +++++++++++++++---- .../resources/assets/lang/I18N.properties | 1 + .../resources/assets/lang/I18N_zh.properties | 1 + .../assets/lang/I18N_zh_CN.properties | 1 + 7 files changed, 49 insertions(+), 7 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SVG.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SVG.java index 47dfab74f..f22b62c46 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SVG.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SVG.java @@ -73,6 +73,12 @@ public final class SVG { height); } + public static Node cancel(ObjectBinding fill, double width, double height) { + return createSVGPath( + "M12 2C17.5 2 22 6.5 22 12S17.5 22 12 22 2 17.5 2 12 6.5 2 12 2M12 4C10.1 4 8.4 4.6 7.1 5.7L18.3 16.9C19.3 15.5 20 13.8 20 12C20 7.6 16.4 4 12 4M16.9 18.3L5.7 7.1C4.6 8.4 4 10.1 4 12C4 16.4 7.6 20 12 20C13.9 20 15.6 19.4 16.9 18.3Z", + fill, width, height); + } + public static Node close(ObjectBinding fill, double width, double height) { return createSVGPath( "M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z", @@ -526,4 +532,10 @@ public final class SVG { "M19,15V3H23V15H19M15,3A2,2 0 0,1 17,5V15C17,15.55 16.78,16.05 16.41,16.41L9.83,23L8.77,21.94C8.5,21.67 8.33,21.3 8.33,20.88L8.36,20.57L9.31,16H3C1.89,16 1,15.1 1,14V12C1,11.74 1.05,11.5 1.14,11.27L4.16,4.22C4.46,3.5 5.17,3 6,3H15M15,5H5.97L3,12V14H11.78L10.65,19.32L15,14.97V5Z", fill, width, height); } + + public static Node selectAll(ObjectBinding fill, double width, double height) { + return createSVGPath( + "M9,9H15V15H9M7,17H17V7H7M15,5H17V3H15M15,21H17V19H15M19,17H21V15H19M19,9H21V7H19M19,21A2,2 0 0,0 21,19H19M19,13H21V11H19M11,21H13V19H11M9,3H7V5H9M3,17H5V15H3M5,21V19H3A2,2 0 0,0 5,21M19,3V5H21A2,2 0 0,0 19,3M13,3H11V5H13M3,9H5V7H3M7,21H9V19H7M3,13H5V11H3M3,5H5V3A2,2 0 0,0 3,5Z", + fill, width, height); + } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadPage.java index c501ee80c..8d0c7a9ad 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadPage.java @@ -222,6 +222,10 @@ public class DownloadPage extends DecoratorAnimatedPage implements DecoratorPage tab.select(newGameTab); } + public void showModDownloads() { + tab.select(modTab); + } + private class DownloadNavigator implements Navigation { private final Map settings = new HashMap<>(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPage.java index c41fc7492..f99f2bc8c 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPage.java @@ -196,6 +196,11 @@ public final class ModListPage extends ListPageBase { JFXListView listView = new JFXListView<>(); { - HBox toolbar = new HBox(); - toolbar.getChildren().setAll( + TransitionPane toolBarPane = new TransitionPane(); + HBox toolbarNormal = new HBox(); + toolbarNormal.getChildren().setAll( createToolbarButton2(i18n("button.refresh"), SVG::refresh, skinnable::refresh), createToolbarButton2(i18n("mods.add"), SVG::plus, skinnable::add), + createToolbarButton2(i18n("folder.mod"), SVG::folderOpen, () -> + skinnable.openModFolder()), + createToolbarButton2(i18n("mods.check_updates"), SVG::update, () -> + skinnable.checkUpdates()), + createToolbarButton2(i18n("download"), SVG::downloadOutline, () -> + skinnable.download())); + HBox toolbarSelecting = new HBox(); + toolbarSelecting.getChildren().setAll( createToolbarButton2(i18n("button.remove"), SVG::delete, () -> { Controllers.confirm(i18n("button.remove.confirm"), i18n("button.remove"), () -> { skinnable.removeSelected(listView.getSelectionModel().getSelectedItems()); @@ -90,11 +101,18 @@ class ModListPageSkin extends SkinBase { skinnable.enableSelected(listView.getSelectionModel().getSelectedItems())), createToolbarButton2(i18n("mods.disable"), SVG::close, () -> skinnable.disableSelected(listView.getSelectionModel().getSelectedItems())), - createToolbarButton2(i18n("folder.mod"), SVG::folderOpen, () -> - skinnable.openModFolder()), - createToolbarButton2(i18n("mods.check_updates"), SVG::update, () -> - skinnable.checkUpdates())); - root.getContent().add(toolbar); + createToolbarButton2(i18n("button.select_all"), SVG::selectAll, () -> + listView.getSelectionModel().selectAll()), + createToolbarButton2(i18n("button.cancel"), SVG::cancel, () -> + listView.getSelectionModel().clearSelection())); + FXUtils.onChangeAndOperate(listView.getSelectionModel().selectedItemProperty(), selectedItem -> { + if (selectedItem == null) { + toolBarPane.setContent(toolbarNormal, ContainerAnimations.FADE.getAnimationProducer()); + } else { + toolBarPane.setContent(toolbarSelecting, ContainerAnimations.FADE.getAnimationProducer()); + } + }); + root.getContent().add(toolBarPane); } { diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index 02268310c..8bb295b69 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -146,6 +146,7 @@ button.remove=Remove button.remove.confirm=Are you sure you want to delete? You cannot roll back this operation! button.save=Save button.save_as=Save As +button.select_all=Select All button.yes=Yes color.recent=Recommended diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index c730a25e0..19818a148 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -146,6 +146,7 @@ button.remove=刪除 button.remove.confirm=您確認要刪除嗎?該操作無法撤銷! button.save=儲存 button.save_as=另存為 +button.select_all=全選 button.yes=是 color.recent=建議 diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties index cb8667971..7282732e6 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -146,6 +146,7 @@ button.remove=删除 button.remove.confirm=您确定要删除吗?此操作无法撤销! button.save=保存 button.save_as=另存为 +button.select_all=全选 button.yes=是 color.recent=推荐