diff --git a/app/src/main/java/org/toop/app/App.java b/app/src/main/java/org/toop/app/App.java index a24c518..6072589 100644 --- a/app/src/main/java/org/toop/app/App.java +++ b/app/src/main/java/org/toop/app/App.java @@ -1,9 +1,11 @@ package org.toop.app; +import javafx.geometry.Pos; import org.toop.app.view.ViewStack; -import org.toop.app.view.views.MainView; import org.toop.app.view.views.QuitView; -import org.toop.app.widget.WidgetSystem; +import org.toop.app.widget.WidgetContainer; +import org.toop.app.widget.complex.ConfirmWidget; +import org.toop.app.widget.complex.PopupWidget; import org.toop.framework.audio.events.AudioEvents; import org.toop.framework.eventbus.EventFlow; import org.toop.framework.resource.ResourceManager; @@ -16,6 +18,8 @@ import javafx.scene.Scene; import javafx.scene.layout.StackPane; import javafx.stage.Stage; +import java.util.HashMap; + public final class App extends Application { private static Stage stage; private static Scene scene; @@ -31,11 +35,8 @@ public final class App extends Application { @Override public void start(Stage stage) throws Exception { - final StackPane root = WidgetSystem.setup(); - + final StackPane root = WidgetContainer.setup(); final Scene scene = new Scene(root); - ViewStack.setup(scene); - scene.setRoot(root); stage.setTitle(AppContext.getString("app-title")); stage.setWidth(1080); @@ -64,7 +65,22 @@ public final class App extends Application { AppSettings.applySettings(); new EventFlow().addPostEvent(new AudioEvents.StartBackgroundMusic()).asyncPostEvent(); - // ViewStack.push(new MainView()); + var abc = new ConfirmWidget("abc"); + var cab = new ConfirmWidget("cab"); + + abc.addButton("test", () -> { + WidgetContainer.add(Pos.CENTER, cab); + WidgetContainer.remove(abc); + }); + abc.addButton("test3333", () -> IO.println("Second test works!")); + + cab.addButton("cab321312", () -> IO.println("Third test")); + cab.addButton("cab31232132131", () -> { + IO.println("Fourth test"); + WidgetContainer.remove(cab); + }); + + WidgetContainer.add(Pos.CENTER, abc); } public static void startQuit() { @@ -89,7 +105,7 @@ public final class App extends Application { public static void reload() { stage.setTitle(AppContext.getString("app-title")); - ViewStack.reload(); + //ViewStack.reload(); } public static void setFullscreen(boolean fullscreen) { diff --git a/app/src/main/java/org/toop/app/interfaces/Popup.java b/app/src/main/java/org/toop/app/interfaces/Popup.java new file mode 100644 index 0000000..7a8b3dd --- /dev/null +++ b/app/src/main/java/org/toop/app/interfaces/Popup.java @@ -0,0 +1,6 @@ +package org.toop.app.interfaces; + +public interface Popup { + void push(); + void pop(); +} \ No newline at end of file diff --git a/app/src/main/java/org/toop/app/widget/Primitive.java b/app/src/main/java/org/toop/app/widget/Primitive.java new file mode 100644 index 0000000..262d16d --- /dev/null +++ b/app/src/main/java/org/toop/app/widget/Primitive.java @@ -0,0 +1,63 @@ +package org.toop.app.widget; + +import javafx.scene.Node; +import javafx.scene.control.*; +import javafx.scene.layout.HBox; +import javafx.scene.layout.VBox; +import javafx.scene.text.Text; + +public final class Primitive { + public static Text header(String label) { + var header = new Text(label); + header.getStyleClass().add("header"); + return header; + } + + public static Text text(String label) { + var text = new Text(label); + text.getStyleClass().add("text"); + return text; + } + + public static Button button(String label) { + var button = new Button(label); + button.getStyleClass().add("button"); + return button; + } + + public static TextField input() { + var input = new TextField(); + input.getStyleClass().add("input"); + return input; + } + + public static Slider slider() { + var slider = new Slider(); + slider.getStyleClass().add("slider"); + return slider; + } + + public static ComboBox choice() { + var choice = new ComboBox(); + choice.getStyleClass().add("choice"); + return choice; + } + + public static ScrollPane scroll(Node content) { + var scroll = new ScrollPane(content); + scroll.getStyleClass().add("scroll"); + return scroll; + } + + public static HBox hbox(Node... nodes) { + var hbox = new HBox(nodes); + hbox.getStyleClass().add("container"); + return hbox; + } + + public static VBox vbox(Node... nodes) { + var vbox = new VBox(nodes); + vbox.getStyleClass().add("container"); + return vbox; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/toop/app/widget/Widget.java b/app/src/main/java/org/toop/app/widget/Widget.java index 25b95cc..e543b4e 100644 --- a/app/src/main/java/org/toop/app/widget/Widget.java +++ b/app/src/main/java/org/toop/app/widget/Widget.java @@ -1,7 +1,16 @@ package org.toop.app.widget; +import javafx.geometry.Pos; import javafx.scene.Node; public interface Widget { T getNode(); + + default void show(Pos position) { + WidgetContainer.add(position, this); + } + + default void hide() { + WidgetContainer.remove(this); + } } \ No newline at end of file diff --git a/app/src/main/java/org/toop/app/widget/WidgetSystem.java b/app/src/main/java/org/toop/app/widget/WidgetContainer.java similarity index 93% rename from app/src/main/java/org/toop/app/widget/WidgetSystem.java rename to app/src/main/java/org/toop/app/widget/WidgetContainer.java index d02cb67..c0d62a8 100644 --- a/app/src/main/java/org/toop/app/widget/WidgetSystem.java +++ b/app/src/main/java/org/toop/app/widget/WidgetContainer.java @@ -3,7 +3,7 @@ package org.toop.app.widget; import javafx.geometry.Pos; import javafx.scene.layout.StackPane; -public final class WidgetSystem { +public final class WidgetContainer { private static StackPane root; public static StackPane setup() { diff --git a/app/src/main/java/org/toop/app/widget/complex/ConfirmWidget.java b/app/src/main/java/org/toop/app/widget/complex/ConfirmWidget.java new file mode 100644 index 0000000..c570e38 --- /dev/null +++ b/app/src/main/java/org/toop/app/widget/complex/ConfirmWidget.java @@ -0,0 +1,26 @@ +package org.toop.app.widget.complex; + +import javafx.scene.layout.HBox; +import org.toop.app.widget.Primitive; +import org.toop.app.widget.Widget; + +import javafx.scene.layout.VBox; + +public class ConfirmWidget implements Widget { + private final HBox buttonsContainer; + private final VBox container; + + public ConfirmWidget(String confirm) { + buttonsContainer = Primitive.hbox(); + container = Primitive.vbox(Primitive.text(confirm), buttonsContainer); + } + + public void addButton(String label, Runnable onClick) { + var button = Primitive.button(label); + button.setOnAction(_ -> onClick.run()); + buttonsContainer.getChildren().add(button); + } + + @Override + public VBox getNode() { return container; } +} \ No newline at end of file diff --git a/app/src/main/java/org/toop/app/widget/complex/PopupWidget.java b/app/src/main/java/org/toop/app/widget/complex/PopupWidget.java index 9d44c80..66448d9 100644 --- a/app/src/main/java/org/toop/app/widget/complex/PopupWidget.java +++ b/app/src/main/java/org/toop/app/widget/complex/PopupWidget.java @@ -1,16 +1,20 @@ package org.toop.app.widget.complex; -import org.toop.app.widget.WidgetSystem; +import org.toop.app.interfaces.Popup; +import org.toop.app.widget.WidgetContainer; import javafx.geometry.Pos; -public abstract class PopupWidget extends ViewWidget { +public abstract class PopupWidget extends ViewWidget implements Popup { public PopupWidget() { super("bg-popup"); - WidgetSystem.add(Pos.CENTER, this); } + public void push() { + WidgetContainer.add(Pos.CENTER, this); + } + public void pop() { - WidgetSystem.remove(this); + WidgetContainer.remove(this); } } \ No newline at end of file diff --git a/app/src/main/java/org/toop/app/widget/complex/PrimaryWidget.java b/app/src/main/java/org/toop/app/widget/complex/PrimaryWidget.java index 462b30d..4ba7dc3 100644 --- a/app/src/main/java/org/toop/app/widget/complex/PrimaryWidget.java +++ b/app/src/main/java/org/toop/app/widget/complex/PrimaryWidget.java @@ -1,16 +1,16 @@ package org.toop.app.widget.complex; -import org.toop.app.widget.WidgetSystem; - import javafx.geometry.Pos; +import org.toop.app.widget.WidgetContainer; -public abstract class PrimaryWidget extends ViewWidget { - public PrimaryWidget() { - super("bg-primary"); - } +public abstract class PrimaryWidget extends ViewWidget implements TransitionAnimation { + public PrimaryWidget() { + super("bg-primary"); + } - public void transition(PrimaryWidget primary) { - WidgetSystem.add(Pos.CENTER, primary); - WidgetSystem.remove(this); - } + @Override + public void transition(PrimaryWidget primary) { + WidgetContainer.add(Pos.CENTER, primary); + WidgetContainer.remove(this); + } } \ No newline at end of file diff --git a/app/src/main/java/org/toop/app/widget/complex/TransitionAnimation.java b/app/src/main/java/org/toop/app/widget/complex/TransitionAnimation.java new file mode 100644 index 0000000..001ff29 --- /dev/null +++ b/app/src/main/java/org/toop/app/widget/complex/TransitionAnimation.java @@ -0,0 +1,5 @@ +package org.toop.app.widget.complex; + +public interface TransitionAnimation { + void transition(PrimaryWidget primary); +} diff --git a/app/src/main/java/org/toop/app/widget/complex/ViewWidget.java b/app/src/main/java/org/toop/app/widget/complex/ViewWidget.java index dd6c9fb..356af91 100644 --- a/app/src/main/java/org/toop/app/widget/complex/ViewWidget.java +++ b/app/src/main/java/org/toop/app/widget/complex/ViewWidget.java @@ -5,23 +5,22 @@ import org.toop.app.widget.Widget; import javafx.scene.layout.StackPane; -public abstract class ViewWidget extends StackPane implements Widget { +public abstract class ViewWidget implements Widget { + private final StackPane container; + public ViewWidget(String cssClass) { - getStyleClass().add(cssClass); + container = new StackPane(); + container.getStyleClass().add(cssClass); } public void add(Pos position, Widget widget) { - setAlignment(widget.getNode(), position); - getChildren().add(widget.getNode()); + StackPane.setAlignment(widget.getNode(), position); + container.getChildren().add(widget.getNode()); } @Override public StackPane getNode() { - return this; - } - - public void show() { - + return container; } public abstract void reload(); diff --git a/app/src/main/java/org/toop/app/widget/view/MainView.java b/app/src/main/java/org/toop/app/widget/view/MainView.java new file mode 100644 index 0000000..1d77b52 --- /dev/null +++ b/app/src/main/java/org/toop/app/widget/view/MainView.java @@ -0,0 +1,4 @@ +package org.toop.app.widget.view; + +public class MainView { +} \ No newline at end of file