Fixes for garbage code by Omar

This commit is contained in:
Bas de Jong
2025-10-28 14:37:15 +01:00
parent 48ed6df6b4
commit 84c17d185b
11 changed files with 164 additions and 32 deletions

View File

@@ -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) {

View File

@@ -0,0 +1,6 @@
package org.toop.app.interfaces;
public interface Popup {
void push();
void pop();
}

View File

@@ -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 <T> ComboBox<T> choice() {
var choice = new ComboBox<T>();
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;
}
}

View File

@@ -1,7 +1,16 @@
package org.toop.app.widget;
import javafx.geometry.Pos;
import javafx.scene.Node;
public interface Widget<T extends Node> {
T getNode();
default void show(Pos position) {
WidgetContainer.add(position, this);
}
default void hide() {
WidgetContainer.remove(this);
}
}

View File

@@ -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() {

View File

@@ -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<VBox> {
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; }
}

View File

@@ -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);
}
}

View File

@@ -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 abstract class PrimaryWidget extends ViewWidget implements TransitionAnimation {
public PrimaryWidget() {
super("bg-primary");
}
@Override
public void transition(PrimaryWidget primary) {
WidgetSystem.add(Pos.CENTER, primary);
WidgetSystem.remove(this);
WidgetContainer.add(Pos.CENTER, primary);
WidgetContainer.remove(this);
}
}

View File

@@ -0,0 +1,5 @@
package org.toop.app.widget.complex;
public interface TransitionAnimation {
void transition(PrimaryWidget primary);
}

View File

@@ -5,23 +5,22 @@ import org.toop.app.widget.Widget;
import javafx.scene.layout.StackPane;
public abstract class ViewWidget extends StackPane implements Widget<StackPane> {
public abstract class ViewWidget implements Widget<StackPane> {
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();

View File

@@ -0,0 +1,4 @@
package org.toop.app.widget.view;
public class MainView {
}