From 68a2514cefbaab547032ac8d020aeb384a9e41e6 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Mon, 18 Mar 2019 20:14:31 +0800 Subject: [PATCH] Disable mod pane when Forge/Liteloader is not installed. --- .../hmcl/ui/versions/ModListPage.java | 19 ++++++++++++++++++- .../hmcl/ui/versions/ModListPageSkin.java | 15 ++++++++++++++- HMCL/src/main/resources/assets/css/root.css | 11 +++++++---- .../assets/fxml/download/versions.fxml | 8 ++++---- .../resources/assets/lang/I18N.properties | 1 + .../resources/assets/lang/I18N_zh.properties | 1 + .../assets/lang/I18N_zh_CN.properties | 1 + 7 files changed, 46 insertions(+), 10 deletions(-) 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 6d6d2791e..85e15b849 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 @@ -28,6 +28,7 @@ import javafx.scene.control.Control; import javafx.scene.control.Skin; import javafx.scene.control.TreeItem; import javafx.stage.FileChooser; +import org.jackhuang.hmcl.download.LibraryAnalyzer; import org.jackhuang.hmcl.mod.ModInfo; import org.jackhuang.hmcl.mod.ModManager; import org.jackhuang.hmcl.setting.Profile; @@ -52,9 +53,11 @@ import static org.jackhuang.hmcl.util.i18n.I18n.i18n; public final class ModListPage extends Control { private final ListProperty items = new SimpleListProperty<>(this, "items", FXCollections.observableArrayList()); private final BooleanProperty loading = new SimpleBooleanProperty(this, "loading", false); + private final BooleanProperty modded = new SimpleBooleanProperty(this, "modded", false); private JFXTabPane parentTab; private ModManager modManager; + private LibraryAnalyzer libraryAnalyzer; public ModListPage() { @@ -80,10 +83,12 @@ public final class ModListPage extends Control { } public void loadVersion(Profile profile, String id) { + libraryAnalyzer = LibraryAnalyzer.analyze(profile.getRepository().getResolvedVersion(id)); + modded.set(libraryAnalyzer.hasForge() || libraryAnalyzer.hasLiteLoader()); loadMods(profile.getRepository().getModManager(id)); } - public void loadMods(ModManager modManager) { + private void loadMods(ModManager modManager) { this.modManager = modManager; Task.ofResult(() -> { synchronized (ModListPage.this) { @@ -187,4 +192,16 @@ public final class ModListPage extends Control { public BooleanProperty loadingProperty() { return loading; } + + public boolean isModded() { + return modded.get(); + } + + public BooleanProperty moddedProperty() { + return modded; + } + + public void setModded(boolean modded) { + this.modded.set(modded); + } } 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 f247f6149..d69c67c23 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 @@ -30,9 +30,11 @@ import javafx.scene.control.*; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.layout.StackPane; +import javafx.scene.text.TextAlignment; import javafx.util.Callback; import org.jackhuang.hmcl.mod.ModInfo; import org.jackhuang.hmcl.setting.Theme; +import org.jackhuang.hmcl.ui.FXUtils; import org.jackhuang.hmcl.ui.SVG; import org.jackhuang.hmcl.ui.construct.JFXCheckBoxTreeTableCell; import org.jackhuang.hmcl.ui.construct.SpinnerPane; @@ -53,6 +55,9 @@ public class ModListPageSkin extends SkinBase { public ModListPageSkin(ModListPage skinnable) { super(skinnable); + StackPane pane = new StackPane(); + pane.getStyleClass().addAll("notice-pane", "white-background"); + BorderPane root = new BorderPane(); JFXTreeTableView tableView = new JFXTreeTableView<>(); @@ -140,7 +145,15 @@ public class ModListPageSkin extends SkinBase { root.setCenter(center); } - getChildren().setAll(root); + Label label = new Label(i18n("mods.not_modded")); + label.prefWidthProperty().bind(pane.widthProperty().add(-100)); + + FXUtils.onChangeAndOperate(skinnable.moddedProperty(), modded -> { + if (modded) pane.getChildren().setAll(root); + else pane.getChildren().setAll(label); + }); + + getChildren().setAll(pane); } private void setupCellValueFactory(JFXTreeTableColumn column, Function> mapper) { diff --git a/HMCL/src/main/resources/assets/css/root.css b/HMCL/src/main/resources/assets/css/root.css index a6ef08dba..6f36ecd0e 100644 --- a/HMCL/src/main/resources/assets/css/root.css +++ b/HMCL/src/main/resources/assets/css/root.css @@ -57,8 +57,11 @@ -fx-text-fill: -fx-base-text-fill; } -.rippler-container= .label { - -fx-text-fill: white; +.notice-pane > .label { + -fx-text-fill: #0079FF; + -fx-font-size: 20; + -fx-wrap-text: true; + -fx-text-alignment: CENTER; } .class-title { @@ -1010,7 +1013,7 @@ } .white-background { - -fx-background-color: rgba(255, 255, 255); + -fx-background-color: rgb(255, 255, 255); } /******************************************************************************* @@ -1115,7 +1118,7 @@ } .tree-table-row-group { - -fx-background-color: rgba(230, 230, 230); + -fx-background-color: rgb(230, 230, 230); } .tree-table-view .menu-item:focused { diff --git a/HMCL/src/main/resources/assets/fxml/download/versions.fxml b/HMCL/src/main/resources/assets/fxml/download/versions.fxml index c49f0444b..201c2230a 100644 --- a/HMCL/src/main/resources/assets/fxml/download/versions.fxml +++ b/HMCL/src/main/resources/assets/fxml/download/versions.fxml @@ -24,11 +24,11 @@ - -