refactor: 移除 ListPage 和 ListPageSkin (#5244)
This commit is contained in:
@@ -1,49 +0,0 @@
|
|||||||
/*
|
|
||||||
* Hello Minecraft! Launcher
|
|
||||||
* Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package org.jackhuang.hmcl.ui;
|
|
||||||
|
|
||||||
import javafx.beans.property.BooleanProperty;
|
|
||||||
import javafx.beans.property.SimpleBooleanProperty;
|
|
||||||
import javafx.scene.Node;
|
|
||||||
import javafx.scene.control.Skin;
|
|
||||||
|
|
||||||
public abstract class ListPage<T extends Node> extends ListPageBase<T> {
|
|
||||||
private final BooleanProperty refreshable = new SimpleBooleanProperty(this, "refreshable", false);
|
|
||||||
|
|
||||||
public abstract void add();
|
|
||||||
|
|
||||||
public void refresh() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Skin<?> createDefaultSkin() {
|
|
||||||
return new ListPageSkin(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isRefreshable() {
|
|
||||||
return refreshable.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
public BooleanProperty refreshableProperty() {
|
|
||||||
return refreshable;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRefreshable(boolean refreshable) {
|
|
||||||
this.refreshable.set(refreshable);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,108 +0,0 @@
|
|||||||
/*
|
|
||||||
* Hello Minecraft! Launcher
|
|
||||||
* Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package org.jackhuang.hmcl.ui;
|
|
||||||
|
|
||||||
import com.jfoenix.controls.JFXButton;
|
|
||||||
import javafx.beans.binding.Bindings;
|
|
||||||
import javafx.geometry.Insets;
|
|
||||||
import javafx.geometry.Pos;
|
|
||||||
import javafx.scene.control.ScrollPane;
|
|
||||||
import javafx.scene.control.SkinBase;
|
|
||||||
import javafx.scene.layout.BorderPane;
|
|
||||||
import javafx.scene.layout.Pane;
|
|
||||||
import javafx.scene.layout.StackPane;
|
|
||||||
import javafx.scene.layout.VBox;
|
|
||||||
import org.jackhuang.hmcl.ui.construct.SpinnerPane;
|
|
||||||
|
|
||||||
public class ListPageSkin extends SkinBase<ListPage<?>> {
|
|
||||||
|
|
||||||
public ListPageSkin(ListPage<?> skinnable) {
|
|
||||||
super(skinnable);
|
|
||||||
|
|
||||||
SpinnerPane spinnerPane = new SpinnerPane();
|
|
||||||
spinnerPane.getStyleClass().add("large-spinner-pane");
|
|
||||||
Pane placeholder = new Pane();
|
|
||||||
VBox list = new VBox();
|
|
||||||
|
|
||||||
StackPane contentPane = new StackPane();
|
|
||||||
{
|
|
||||||
ScrollPane scrollPane = new ScrollPane();
|
|
||||||
{
|
|
||||||
scrollPane.setFitToWidth(true);
|
|
||||||
|
|
||||||
list.maxWidthProperty().bind(scrollPane.widthProperty());
|
|
||||||
list.setSpacing(10);
|
|
||||||
|
|
||||||
VBox content = new VBox();
|
|
||||||
content.getChildren().setAll(list, placeholder);
|
|
||||||
|
|
||||||
Bindings.bindContent(list.getChildren(), skinnable.itemsProperty());
|
|
||||||
|
|
||||||
scrollPane.setContent(content);
|
|
||||||
FXUtils.smoothScrolling(scrollPane);
|
|
||||||
}
|
|
||||||
|
|
||||||
VBox vBox = new VBox();
|
|
||||||
{
|
|
||||||
vBox.getStyleClass().add("card-list");
|
|
||||||
vBox.setAlignment(Pos.BOTTOM_RIGHT);
|
|
||||||
vBox.setPickOnBounds(false);
|
|
||||||
|
|
||||||
JFXButton btnAdd = FXUtils.newRaisedButton("");
|
|
||||||
FXUtils.setLimitWidth(btnAdd, 40);
|
|
||||||
FXUtils.setLimitHeight(btnAdd, 40);
|
|
||||||
btnAdd.setGraphic(SVG.ADD.createIcon());
|
|
||||||
btnAdd.setOnAction(e -> skinnable.add());
|
|
||||||
|
|
||||||
JFXButton btnRefresh = new JFXButton();
|
|
||||||
FXUtils.setLimitWidth(btnRefresh, 40);
|
|
||||||
FXUtils.setLimitHeight(btnRefresh, 40);
|
|
||||||
btnRefresh.getStyleClass().add("jfx-button-raised-round");
|
|
||||||
btnRefresh.setButtonType(JFXButton.ButtonType.RAISED);
|
|
||||||
btnRefresh.setGraphic(SVG.REFRESH.createIcon());
|
|
||||||
btnRefresh.setOnAction(e -> skinnable.refresh());
|
|
||||||
|
|
||||||
vBox.getChildren().setAll(btnAdd);
|
|
||||||
|
|
||||||
FXUtils.onChangeAndOperate(skinnable.refreshableProperty(),
|
|
||||||
refreshable -> {
|
|
||||||
if (refreshable) {
|
|
||||||
list.setPadding(new Insets(10, 10, 15 + 40 + 15 + 40 + 15, 10));
|
|
||||||
vBox.getChildren().setAll(btnRefresh, btnAdd);
|
|
||||||
} else {
|
|
||||||
list.setPadding(new Insets(10, 10, 15 + 40 + 15, 10));
|
|
||||||
vBox.getChildren().setAll(btnAdd);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Keep a blank space to prevent buttons from blocking up mod items.
|
|
||||||
BorderPane group = new BorderPane();
|
|
||||||
group.setPickOnBounds(false);
|
|
||||||
group.setBottom(vBox);
|
|
||||||
placeholder.minHeightProperty().bind(vBox.heightProperty());
|
|
||||||
|
|
||||||
contentPane.getChildren().setAll(scrollPane, group);
|
|
||||||
}
|
|
||||||
|
|
||||||
spinnerPane.loadingProperty().bind(skinnable.loadingProperty());
|
|
||||||
spinnerPane.setContent(contentPane);
|
|
||||||
|
|
||||||
getChildren().setAll(spinnerPane);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user