Use spinnerPane in ModListPage

This commit is contained in:
huanghongxun
2019-01-11 21:18:26 +08:00
parent 718a98d7ec
commit 30c2d88f62
2 changed files with 34 additions and 17 deletions

View File

@@ -19,7 +19,7 @@ package org.jackhuang.hmcl.ui;
import com.jfoenix.controls.JFXButton; import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXScrollPane; import com.jfoenix.controls.JFXScrollPane;
import com.jfoenix.controls.JFXSpinner;
import javafx.beans.binding.Bindings; import javafx.beans.binding.Bindings;
import javafx.geometry.Insets; import javafx.geometry.Insets;
import javafx.geometry.Pos; import javafx.geometry.Pos;
@@ -28,17 +28,14 @@ import javafx.scene.control.SkinBase;
import javafx.scene.layout.StackPane; import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;
import org.jackhuang.hmcl.setting.Theme; import org.jackhuang.hmcl.setting.Theme;
import org.jackhuang.hmcl.ui.construct.SpinnerPane;
public class ListPageSkin extends SkinBase<ListPage> { public class ListPageSkin extends SkinBase<ListPage<?>> {
public ListPageSkin(ListPage<?> skinnable) { public ListPageSkin(ListPage<?> skinnable) {
super(skinnable); super(skinnable);
StackPane rootPane = new StackPane(); SpinnerPane spinnerPane = new SpinnerPane();
JFXSpinner spinner = new JFXSpinner();
spinner.setRadius(16);
spinner.getStyleClass().setAll("materialDesign-purple", "first-spinner");
StackPane contentPane = new StackPane(); StackPane contentPane = new StackPane();
{ {
@@ -56,7 +53,7 @@ public class ListPageSkin extends SkinBase<ListPage> {
scrollPane.setContent(list); scrollPane.setContent(list);
JFXScrollPane.smoothScrolling(scrollPane); JFXScrollPane.smoothScrolling(scrollPane);
} }
VBox vBox = new VBox(); VBox vBox = new VBox();
{ {
vBox.setAlignment(Pos.BOTTOM_RIGHT); vBox.setAlignment(Pos.BOTTOM_RIGHT);
@@ -92,13 +89,9 @@ public class ListPageSkin extends SkinBase<ListPage> {
contentPane.getChildren().setAll(scrollPane, vBox); contentPane.getChildren().setAll(scrollPane, vBox);
} }
rootPane.getChildren().setAll(contentPane); spinnerPane.loadingProperty().bind(skinnable.loadingProperty());
spinnerPane.setContent(contentPane);
skinnable.loadingProperty().addListener((a, b, newValue) -> { getChildren().setAll(spinnerPane);
if (newValue) rootPane.getChildren().setAll(spinner);
else rootPane.getChildren().setAll(contentPane);
});
getChildren().setAll(rootPane);
} }
} }

View File

@@ -19,7 +19,9 @@ package org.jackhuang.hmcl.ui.construct;
import com.jfoenix.controls.JFXSpinner; import com.jfoenix.controls.JFXSpinner;
import javafx.beans.DefaultProperty; import javafx.beans.DefaultProperty;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.ObjectProperty; import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleObjectProperty;
import javafx.scene.Node; import javafx.scene.Node;
import javafx.scene.layout.StackPane; import javafx.scene.layout.StackPane;
@@ -32,19 +34,29 @@ public class SpinnerPane extends StackPane {
private final JFXSpinner spinner = new JFXSpinner(); private final JFXSpinner spinner = new JFXSpinner();
private final StackPane contentPane = new StackPane(); private final StackPane contentPane = new StackPane();
private final ObjectProperty<Node> content = new SimpleObjectProperty<>(this, "content"); private final ObjectProperty<Node> content = new SimpleObjectProperty<>(this, "content");
private final BooleanProperty loading = new SimpleBooleanProperty(this, "loading") {
protected void invalidated() {
if (get())
transitionHandler.setContent(spinner, ContainerAnimations.FADE.getAnimationProducer());
else
transitionHandler.setContent(contentPane, ContainerAnimations.FADE.getAnimationProducer());
}
};
public SpinnerPane() { public SpinnerPane() {
getStyleClass().add("spinner-pane");
getChildren().setAll(contentPane); getChildren().setAll(contentPane);
content.addListener((a, b, newValue) -> contentPane.getChildren().setAll(newValue)); content.addListener((a, b, newValue) -> contentPane.getChildren().setAll(newValue));
} }
public void showSpinner() { public void showSpinner() {
transitionHandler.setContent(spinner, ContainerAnimations.FADE.getAnimationProducer()); setLoading(true);
} }
public void hideSpinner() { public void hideSpinner() {
transitionHandler.setContent(contentPane, ContainerAnimations.FADE.getAnimationProducer()); setLoading(false);
} }
public Node getContent() { public Node getContent() {
@@ -58,4 +70,16 @@ public class SpinnerPane extends StackPane {
public void setContent(Node content) { public void setContent(Node content) {
this.content.set(content); this.content.set(content);
} }
public boolean isLoading() {
return loading.get();
}
public BooleanProperty loadingProperty() {
return loading;
}
public void setLoading(boolean loading) {
this.loading.set(loading);
}
} }