修复管理页面加载样式不统一的问题 (#5406)

This commit is contained in:
CiiLu
2026-02-06 22:12:23 +08:00
committed by GitHub
parent c2c542af3c
commit ef5849eba1
2 changed files with 34 additions and 53 deletions

View File

@@ -42,13 +42,11 @@ public abstract class ToolbarListPageSkin<E, P extends ListPageBase<E>> extends
public ToolbarListPageSkin(P skinnable) { public ToolbarListPageSkin(P skinnable) {
super(skinnable); super(skinnable);
SpinnerPane spinnerPane = new SpinnerPane();
spinnerPane.loadingProperty().bind(skinnable.loadingProperty());
spinnerPane.failedReasonProperty().bind(skinnable.failedReasonProperty());
spinnerPane.onFailedActionProperty().bind(skinnable.onFailedActionProperty());
ComponentList root = new ComponentList(); ComponentList root = new ComponentList();
root.getStyleClass().add("no-padding"); root.getStyleClass().add("no-padding");
StackPane container = new StackPane();
container.getChildren().add(root);
StackPane.setMargin(root, new Insets(10)); StackPane.setMargin(root, new Insets(10));
List<Node> toolbarButtons = initializeToolbar(skinnable); List<Node> toolbarButtons = initializeToolbar(skinnable);
@@ -60,19 +58,26 @@ public abstract class ToolbarListPageSkin<E, P extends ListPageBase<E>> extends
root.getContent().add(toolbar); root.getContent().add(toolbar);
} }
SpinnerPane spinnerPane = new SpinnerPane();
spinnerPane.loadingProperty().bind(skinnable.loadingProperty());
spinnerPane.failedReasonProperty().bind(skinnable.failedReasonProperty());
spinnerPane.onFailedActionProperty().bind(skinnable.onFailedActionProperty());
ComponentList.setVgrow(spinnerPane, Priority.ALWAYS);
{ {
this.listView = new JFXListView<>(); this.listView = new JFXListView<>();
this.listView.setPadding(Insets.EMPTY); this.listView.setPadding(Insets.EMPTY);
this.listView.setCellFactory(listView -> createListCell((JFXListView<E>) listView)); this.listView.setCellFactory(listView -> createListCell((JFXListView<E>) listView));
ComponentList.setVgrow(listView, Priority.ALWAYS);
Bindings.bindContent(this.listView.getItems(), skinnable.itemsProperty()); Bindings.bindContent(this.listView.getItems(), skinnable.itemsProperty());
FXUtils.ignoreEvent(listView, KeyEvent.KEY_PRESSED, e -> e.getCode() == KeyCode.ESCAPE); FXUtils.ignoreEvent(listView, KeyEvent.KEY_PRESSED, e -> e.getCode() == KeyCode.ESCAPE);
root.getContent().add(listView);
spinnerPane.setContent(listView);
} }
spinnerPane.setContent(root); root.getContent().add(spinnerPane);
getChildren().setAll(spinnerPane); getChildren().setAll(container);
} }
public static Node wrap(Node node) { public static Node wrap(Node node) {

View File

@@ -2,30 +2,27 @@ package org.jackhuang.hmcl.ui.versions;
import com.jfoenix.controls.JFXButton; import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXListView; import com.jfoenix.controls.JFXListView;
import javafx.beans.binding.Bindings;
import javafx.geometry.Insets; import javafx.geometry.Insets;
import javafx.geometry.Pos; import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.control.ListCell;
import javafx.scene.control.Skin; import javafx.scene.control.Skin;
import javafx.scene.control.SkinBase;
import javafx.scene.image.Image; import javafx.scene.image.Image;
import javafx.scene.image.ImageView; import javafx.scene.image.ImageView;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.BorderPane; import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox; import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority; import javafx.scene.layout.Priority;
import javafx.scene.layout.StackPane;
import javafx.stage.FileChooser; import javafx.stage.FileChooser;
import org.jackhuang.hmcl.mod.LocalModFile; import org.jackhuang.hmcl.mod.LocalModFile;
import org.jackhuang.hmcl.resourcepack.ResourcepackFile; import org.jackhuang.hmcl.resourcepack.ResourcepackFile;
import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.setting.Profile;
import org.jackhuang.hmcl.task.Schedulers; import org.jackhuang.hmcl.task.Schedulers;
import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.task.Task;
import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.ui.*;
import org.jackhuang.hmcl.ui.FXUtils; import org.jackhuang.hmcl.ui.construct.MDListCell;
import org.jackhuang.hmcl.ui.ListPageBase; import org.jackhuang.hmcl.ui.construct.MessageDialogPane;
import org.jackhuang.hmcl.ui.SVG; import org.jackhuang.hmcl.ui.construct.RipplerContainer;
import org.jackhuang.hmcl.ui.construct.*; import org.jackhuang.hmcl.ui.construct.TwoLineListItem;
import org.jackhuang.hmcl.util.io.FileUtils; import org.jackhuang.hmcl.util.io.FileUtils;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
@@ -38,7 +35,6 @@ import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Stream; import java.util.stream.Stream;
import static org.jackhuang.hmcl.ui.ToolbarListPageSkin.createToolbarButton2;
import static org.jackhuang.hmcl.util.i18n.I18n.i18n; import static org.jackhuang.hmcl.util.i18n.I18n.i18n;
import static org.jackhuang.hmcl.util.logging.Logger.LOG; import static org.jackhuang.hmcl.util.logging.Logger.LOG;
@@ -128,44 +124,24 @@ public final class ResourcepackListPage extends ListPageBase<ResourcepackListPag
Controllers.navigate(Controllers.getDownloadPage()); Controllers.navigate(Controllers.getDownloadPage());
} }
private static final class ResourcepackListPageSkin extends SkinBase<ResourcepackListPage> { private static final class ResourcepackListPageSkin extends ToolbarListPageSkin<ResourcepackInfoObject, ResourcepackListPage> {
private final JFXListView<ResourcepackInfoObject> listView;
private ResourcepackListPageSkin(ResourcepackListPage control) { public ResourcepackListPageSkin(ResourcepackListPage control) {
super(control); super(control);
}
StackPane pane = new StackPane(); @Override
pane.setPadding(new Insets(10)); protected List<Node> initializeToolbar(ResourcepackListPage skinnable) {
pane.getStyleClass().addAll("notice-pane"); return List.of(
createToolbarButton2(i18n("button.refresh"), SVG.REFRESH, skinnable::refresh),
ComponentList root = new ComponentList(); createToolbarButton2(i18n("resourcepack.add"), SVG.ADD, skinnable::onAddFiles),
root.getStyleClass().add("no-padding"); createToolbarButton2(i18n("resourcepack.download"), SVG.DOWNLOAD, skinnable::onDownload)
listView = new JFXListView<>();
FXUtils.ignoreEvent(listView, KeyEvent.KEY_PRESSED, e -> e.getCode() == KeyCode.ESCAPE);
HBox toolbar = new HBox();
toolbar.setAlignment(Pos.CENTER_LEFT);
toolbar.setPickOnBounds(false);
toolbar.getChildren().setAll(
createToolbarButton2(i18n("button.refresh"), SVG.REFRESH, control::refresh),
createToolbarButton2(i18n("resourcepack.add"), SVG.ADD, control::onAddFiles),
createToolbarButton2(i18n("resourcepack.download"), SVG.DOWNLOAD, control::onDownload)
); );
root.getContent().add(toolbar); }
SpinnerPane center = new SpinnerPane(); @Override
ComponentList.setVgrow(center, Priority.ALWAYS); protected ListCell<ResourcepackInfoObject> createListCell(JFXListView<ResourcepackInfoObject> listView) {
center.loadingProperty().bind(control.loadingProperty()); return new ResourcepackListCell(listView, getSkinnable());
listView.setCellFactory(x -> new ResourcepackListCell(listView, control));
Bindings.bindContent(listView.getItems(), control.getItems());
center.setContent(listView);
root.getContent().add(center);
pane.getChildren().setAll(root);
getChildren().setAll(pane);
} }
} }