Move AdvancedListItem & Skin to new package

This commit is contained in:
huangyuhui
2018-09-02 21:57:25 +08:00
parent 5fb0035b2f
commit f5b310d959
7 changed files with 51 additions and 140 deletions

View File

@@ -1,74 +0,0 @@
/*
* Hello Minecraft! Launcher.
* Copyright (C) 2017 huangyuhui <huanghongxun2008@126.com>
*
* 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 {http://www.gnu.org/licenses/}.
*/
package org.jackhuang.hmcl.ui;
import javafx.beans.property.*;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Rectangle2D;
import javafx.scene.control.Control;
import javafx.scene.control.Skin;
import javafx.scene.image.Image;
import org.jackhuang.hmcl.game.AccountHelper;
public class AdvancedListItem2 extends Control {
private final ObjectProperty<Image> image = new SimpleObjectProperty<>();
private final ObjectProperty<Rectangle2D> viewport = new SimpleObjectProperty<>();
private final StringProperty title = new SimpleStringProperty();
private final StringProperty subtitle = new SimpleStringProperty();
public ObjectProperty<Image> imageProperty() {
return image;
}
public ObjectProperty<Rectangle2D> viewportProperty() {
return viewport;
}
public StringProperty titleProperty() {
return title;
}
public StringProperty subtitleProperty() {
return subtitle;
}
public final ObjectProperty<EventHandler<ActionEvent>> onActionProperty() {
return onAction;
}
public final void setOnAction(EventHandler<ActionEvent> value) {
onActionProperty().set(value);
}
public final EventHandler<ActionEvent> getOnAction() {
return onActionProperty().get();
}
private ObjectProperty<EventHandler<ActionEvent>> onAction = new SimpleObjectProperty<EventHandler<ActionEvent>>(this, "onAction") {
@Override
protected void invalidated() {
setEventHandler(ActionEvent.ACTION, get());
}
};
@Override
protected Skin<?> createDefaultSkin() {
return new AdvancedListItemSkin(this);
}
}

View File

@@ -19,23 +19,17 @@ package org.jackhuang.hmcl.ui.account;
import javafx.beans.property.ObjectProperty; import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.geometry.Rectangle2D;
import javafx.scene.image.Image; import javafx.scene.image.Image;
import org.jackhuang.hmcl.auth.Account; import org.jackhuang.hmcl.auth.Account;
import org.jackhuang.hmcl.auth.offline.OfflineAccount; import org.jackhuang.hmcl.auth.offline.OfflineAccount;
import org.jackhuang.hmcl.auth.yggdrasil.YggdrasilAccount; import org.jackhuang.hmcl.auth.yggdrasil.YggdrasilAccount;
import org.jackhuang.hmcl.game.AccountHelper; import org.jackhuang.hmcl.game.AccountHelper;
import org.jackhuang.hmcl.setting.Accounts;
import org.jackhuang.hmcl.task.Schedulers; import org.jackhuang.hmcl.task.Schedulers;
import org.jackhuang.hmcl.ui.AdvancedListItem2; import org.jackhuang.hmcl.ui.construct.AdvancedListItem;
import org.jackhuang.hmcl.ui.FXUtils;
import static org.jackhuang.hmcl.ui.FXUtils.onInvalidating;
import static org.jackhuang.hmcl.util.i18n.I18n.i18n; import static org.jackhuang.hmcl.util.i18n.I18n.i18n;
public class AccountAdvancedListItem extends AdvancedListItem2 { public class AccountAdvancedListItem extends AdvancedListItem {
private ObjectProperty<Account> account = new SimpleObjectProperty<Account>() { private ObjectProperty<Account> account = new SimpleObjectProperty<Account>() {
@Override @Override

View File

@@ -23,7 +23,6 @@ import javafx.scene.control.ScrollPane;
import javafx.scene.layout.Pane; import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane; import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;
import org.jackhuang.hmcl.ui.AdvancedListItem2;
import org.jackhuang.hmcl.ui.FXUtils; import org.jackhuang.hmcl.ui.FXUtils;
public class AdvancedListBox extends ScrollPane { public class AdvancedListBox extends ScrollPane {
@@ -43,7 +42,7 @@ public class AdvancedListBox extends ScrollPane {
} }
public AdvancedListBox add(Node child) { public AdvancedListBox add(Node child) {
if (child instanceof Pane || child instanceof AdvancedListItem2) if (child instanceof Pane || child instanceof AdvancedListItem)
container.getChildren().add(child); container.getChildren().add(child);
else { else {
StackPane pane = new StackPane(); StackPane pane = new StackPane();

View File

@@ -1,6 +1,6 @@
/* /*
* Hello Minecraft! Launcher. * Hello Minecraft! Launcher.
* Copyright (C) 2018 huangyuhui <huanghongxun2008@126.com> * Copyright (C) 2017 huangyuhui <huanghongxun2008@126.com>
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@@ -17,55 +17,57 @@
*/ */
package org.jackhuang.hmcl.ui.construct; package org.jackhuang.hmcl.ui.construct;
import com.jfoenix.controls.JFXButton; import javafx.beans.property.*;
import javafx.event.ActionEvent;
import javafx.event.EventHandler; import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.geometry.Rectangle2D; import javafx.geometry.Rectangle2D;
import javafx.scene.control.Label; import javafx.scene.control.Control;
import javafx.scene.control.Skin;
import javafx.scene.image.Image; import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import org.jackhuang.hmcl.ui.FXUtils;
public final class AdvancedListItem extends StackPane { public class AdvancedListItem extends Control {
@FXML private final ObjectProperty<Image> image = new SimpleObjectProperty<>();
private StackPane imageViewContainer; private final ObjectProperty<Rectangle2D> viewport = new SimpleObjectProperty<>();
@FXML private final StringProperty title = new SimpleStringProperty();
private Label lblTitle; private final StringProperty subtitle = new SimpleStringProperty();
@FXML
private Label lblSubtitle;
@FXML
private ImageView imageView;
@FXML private JFXButton btnSettings;
public AdvancedListItem(String title) { public ObjectProperty<Image> imageProperty() {
this(title, ""); return image;
} }
public AdvancedListItem(String title, String subtitle) { public ObjectProperty<Rectangle2D> viewportProperty() {
FXUtils.loadFXML(this, "/assets/fxml/advanced-list-item.fxml"); return viewport;
lblTitle.setText(title);
lblSubtitle.setText(subtitle);
FXUtils.limitSize(imageView, 32, 32);
} }
public void setOnSettingsButtonClicked(EventHandler<? super MouseEvent> handler) { public StringProperty titleProperty() {
btnSettings.setOnMouseClicked(handler); return title;
} }
public void setTitle(String title) { public StringProperty subtitleProperty() {
lblTitle.setText(title); return subtitle;
} }
public void setSubtitle(String subtitle) { public final ObjectProperty<EventHandler<ActionEvent>> onActionProperty() {
lblSubtitle.setText(subtitle); return onAction;
} }
public void setImage(Image image, Rectangle2D viewport) { public final void setOnAction(EventHandler<ActionEvent> value) {
imageView.setImage(image); onActionProperty().set(value);
imageView.setViewport(viewport); }
public final EventHandler<ActionEvent> getOnAction() {
return onActionProperty().get();
}
private ObjectProperty<EventHandler<ActionEvent>> onAction = new SimpleObjectProperty<EventHandler<ActionEvent>>(this, "onAction") {
@Override
protected void invalidated() {
setEventHandler(ActionEvent.ACTION, get());
}
};
@Override
protected Skin<?> createDefaultSkin() {
return new AdvancedListItemSkin(this);
} }
} }

View File

@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see {http://www.gnu.org/licenses/}. * along with this program. If not, see {http://www.gnu.org/licenses/}.
*/ */
package org.jackhuang.hmcl.ui; package org.jackhuang.hmcl.ui.construct;
import com.jfoenix.controls.JFXButton; import com.jfoenix.controls.JFXButton;
import javafx.geometry.Insets; import javafx.geometry.Insets;
@@ -29,12 +29,12 @@ import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;
import javafx.scene.text.TextAlignment; import javafx.scene.text.TextAlignment;
import org.jackhuang.hmcl.setting.Theme; import org.jackhuang.hmcl.setting.Theme;
import org.jackhuang.hmcl.ui.FXUtils;
import org.jackhuang.hmcl.ui.SVG;
import java.util.Optional; public class AdvancedListItemSkin extends SkinBase<AdvancedListItem> {
public class AdvancedListItemSkin extends SkinBase<AdvancedListItem2> { public AdvancedListItemSkin(AdvancedListItem skinnable) {
public AdvancedListItemSkin(AdvancedListItem2 skinnable) {
super(skinnable); super(skinnable);
StackPane stackPane = new StackPane(); StackPane stackPane = new StackPane();

View File

@@ -19,24 +19,14 @@ package org.jackhuang.hmcl.ui.profile;
import javafx.beans.property.ObjectProperty; import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.geometry.Rectangle2D;
import javafx.scene.image.Image; import javafx.scene.image.Image;
import org.jackhuang.hmcl.auth.Account;
import org.jackhuang.hmcl.auth.offline.OfflineAccount;
import org.jackhuang.hmcl.auth.yggdrasil.YggdrasilAccount;
import org.jackhuang.hmcl.game.AccountHelper;
import org.jackhuang.hmcl.setting.Accounts;
import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.setting.Profile;
import org.jackhuang.hmcl.setting.Profiles; import org.jackhuang.hmcl.setting.Profiles;
import org.jackhuang.hmcl.task.Schedulers; import org.jackhuang.hmcl.ui.construct.AdvancedListItem;
import org.jackhuang.hmcl.ui.AdvancedListItem2;
import org.jackhuang.hmcl.ui.FXUtils;
import static org.jackhuang.hmcl.util.i18n.I18n.i18n; import static org.jackhuang.hmcl.util.i18n.I18n.i18n;
public class ProfileAdvancedListItem extends AdvancedListItem2 { public class ProfileAdvancedListItem extends AdvancedListItem {
private ObjectProperty<Profile> profile = new SimpleObjectProperty<Profile>() { private ObjectProperty<Profile> profile = new SimpleObjectProperty<Profile>() {
@Override @Override

View File

@@ -24,12 +24,12 @@ import org.jackhuang.hmcl.event.EventBus;
import org.jackhuang.hmcl.event.RefreshedVersionsEvent; import org.jackhuang.hmcl.event.RefreshedVersionsEvent;
import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.setting.Profile;
import org.jackhuang.hmcl.setting.Profiles; import org.jackhuang.hmcl.setting.Profiles;
import org.jackhuang.hmcl.ui.AdvancedListItem2; import org.jackhuang.hmcl.ui.construct.AdvancedListItem;
import org.jackhuang.hmcl.ui.WeakListenerHelper; import org.jackhuang.hmcl.ui.WeakListenerHelper;
import java.io.File; import java.io.File;
public class GameAdvancedListItem extends AdvancedListItem2 { public class GameAdvancedListItem extends AdvancedListItem {
private final WeakListenerHelper helper = new WeakListenerHelper(); private final WeakListenerHelper helper = new WeakListenerHelper();
private Profile profile; private Profile profile;