Use spinnerPane in ModListPage
This commit is contained in:
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user