From e4f9776f7f65a034b1514bd8d136462795177892 Mon Sep 17 00:00:00 2001 From: Sebastian Lenzlinger Date: Wed, 13 Apr 2022 01:07:49 +0200 Subject: [PATCH] Slowly building the SceneGraph from the bottom. Created a abstract class that imlements the Toggle interface for toggling between who one wants to chat. --- .../client/gui/chat/BroadcastButton.java | 14 +++- .../client/gui/chat/ChatTargetToggle.java | 81 +++++++++++++++++++ .../multiplayer/client/gui/chat/ChatView.java | 42 +++++++--- .../client/gui/chat/ChildNode.java | 10 +++ .../client/gui/chat/NodeWithChildren.java | 13 +++ .../gui/chat/OutMsgTargetChooserNode.java | 32 ++++++++ .../client/gui/chat/SendButton.java | 11 ++- .../multiplayer/client/gui/chat/UINode.java | 9 +++ .../client/gui/chat/WhisperButton.java | 9 ++- 9 files changed, 207 insertions(+), 14 deletions(-) create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatTargetToggle.java create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChildNode.java create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/NodeWithChildren.java create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/OutMsgTargetChooserNode.java create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/UINode.java diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/BroadcastButton.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/BroadcastButton.java index 1ce08d2..04d52ce 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/BroadcastButton.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/BroadcastButton.java @@ -1,7 +1,19 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.chat; +import javafx.beans.property.BooleanProperty; +import javafx.beans.property.ObjectProperty; +import javafx.collections.ObservableMap; import javafx.scene.Node; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.Toggle; +import javafx.scene.control.ToggleGroup; -public class BroadcastButton extends Node { +/** + * Represents toggling to broadcast to everyone + */ +public class BroadcastButton extends ChatTargetToggle implements Toggle { + + Label l = new Label("Broadcast"); } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatTargetToggle.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatTargetToggle.java new file mode 100644 index 0000000..d7606f8 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatTargetToggle.java @@ -0,0 +1,81 @@ +package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.chat; + +import javafx.beans.property.BooleanProperty; +import javafx.beans.property.ObjectProperty; +import javafx.beans.property.Property; +import javafx.collections.ObservableMap; +import javafx.scene.Node; +import javafx.scene.control.Button; +import javafx.scene.control.RadioButton; +import javafx.scene.control.Toggle; +import javafx.scene.control.ToggleGroup; + +/** + * If this is toggled than the client chat is operating in whisper mode. + */ + +public abstract class ChatTargetToggle extends Node implements Toggle{ + + BooleanProperty isToggled; + ObjectProperty myFriends; + + /** + * Returns The {@link ToggleGroup} to which this {@code Toggle} belongs. + * + * @return The {@link ToggleGroup} to which this {@code Toggle} belongs. + */ + @Override + public ToggleGroup getToggleGroup() { + return myFriends.get(); + } + + /** + * Sets the {@link ToggleGroup} to which this {@code Toggle} belongs. + * + * @param toggleGroup The new {@link ToggleGroup}. + */ + @Override + public void setToggleGroup(ToggleGroup toggleGroup) { + myFriends.bindBidirectional((Property) toggleGroup); + } + + /** + * The {@link ToggleGroup} to which this {@code Toggle} belongs. + * + * @return the toggle group property + */ + @Override + public ObjectProperty toggleGroupProperty() { + return myFriends; + } + + /** + * Indicates whether this {@code Toggle} is selected. + * + * @return {@code true} if this {@code Toggle} is selected. + */ + @Override + public boolean isSelected() { + return isToggled.get(); + } + + /** + * Sets this {@code Toggle} as selected or unselected. + * + * @param selected {@code true} to make this {@code Toggle} selected. + */ + @Override + public void setSelected(boolean selected) { + this.isToggled.set(selected); + } + + /** + * The selected state for this {@code Toggle}. + * + * @return the selected property + */ + @Override + public BooleanProperty selectedProperty() { + return isToggled; + } +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatView.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatView.java index b0086b1..db2f39d 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatView.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatView.java @@ -1,20 +1,42 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.chat; -import javafx.scene.Parent; -import javafx.scene.Scene; -import javafx.scene.SceneAntialiasing; -import javafx.scene.control.Label; +import javafx.scene.Node; +import javafx.scene.control.Button; +import javafx.scene.control.TextArea; import javafx.scene.layout.Pane; -import javafx.scene.paint.Paint; -public class ChatView { +/** + * This is the view of the client chat gui. + */ +public class ChatView extends Node implements NodeWithChildren, ChildNode { - private Label send = new Label("Send"); private Pane root; - private Pane createNodeHierarchy(){ - Pane p = new Pane(); - return p; + public void createNodeHierarchy(){ + Button send = new SendButton(); + OutMsgTargetChooserNode chooseTarget = new OutMsgTargetChooserNode(); + TextArea clientOutgoingChatMsg = new TextArea(); + } + + @Override + public Pane getRootPane() { + return root; + } + + @Override + public ChildNode getInstance() { + return this; + } + + @Override + public void create() { + + } + + @Override + public void getChildren() { + //TODO implement + NodeWithChildren.super.getChildren(); } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChildNode.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChildNode.java new file mode 100644 index 0000000..537e609 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChildNode.java @@ -0,0 +1,10 @@ +package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.chat; + +import javafx.scene.layout.Pane; + +public interface ChildNode { + + public Pane getRootPane(); + public ChildNode getInstance(); + +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/NodeWithChildren.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/NodeWithChildren.java new file mode 100644 index 0000000..4d86854 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/NodeWithChildren.java @@ -0,0 +1,13 @@ +package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.chat; + +/** + * Any class that represents a JavaFX node and has children should implement this interface + */ +public interface NodeWithChildren { + + void create(); + + public default void getChildren(){}; + + void createNodeHierarchy(); +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/OutMsgTargetChooserNode.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/OutMsgTargetChooserNode.java new file mode 100644 index 0000000..1978c77 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/OutMsgTargetChooserNode.java @@ -0,0 +1,32 @@ +package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.chat; + +import javafx.collections.ObservableList; +import javafx.scene.Node; +import javafx.scene.control.Toggle; +import javafx.scene.control.ToggleGroup; +import javafx.scene.layout.HBox; +import javafx.scene.layout.Pane; + +public class OutMsgTargetChooserNode extends ToggleGroup implements NodeWithChildren { + + private Pane root; + private ObservableList targets; + + @Override + public void create() { + + } + + @Override + public void getChildren() { + NodeWithChildren.super.getChildren(); + } + + @Override + public void createNodeHierarchy() { + this.root = new HBox(); + for(Node n : targets) + root.getChildren().add(n); + + } +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/SendButton.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/SendButton.java index 8bba790..888299d 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/SendButton.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/SendButton.java @@ -1,7 +1,16 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.chat; import javafx.scene.Node; +import javafx.scene.control.Button; -public class SendButton extends Node { +public class SendButton extends Button implements UINode { + + public SendButton() { + super("Send"); + } + @Override + public void listen() { + + } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/UINode.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/UINode.java new file mode 100644 index 0000000..7baa136 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/UINode.java @@ -0,0 +1,9 @@ +package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.chat; + +/** + * Any class that represents a JavaFX node that takes user input should implement this interface. + */ +public interface UINode { + + void listen(); +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/WhisperButton.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/WhisperButton.java index a029bef..4970ad8 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/WhisperButton.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/WhisperButton.java @@ -1,7 +1,12 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.chat; -import javafx.scene.Node; +import javafx.scene.control.Label; -public class WhisperButton extends Node { +/** + * Represents the toggle for a whisper chat. + */ +public class WhisperButton extends ChatTargetToggle { + + Label l = new Label("Whisper"); }