From 9f7fc2556ba2cf19540d9f13be8a7d409f5059ab Mon Sep 17 00:00:00 2001 From: Sebastian Lenzlinger Date: Sat, 30 Apr 2022 16:35:54 +0200 Subject: [PATCH] Adding Functionality to the view --- .../multiplayer/client/gui/ClientModel.java | 40 ++++++++++ .../client/gui/chat/ChatController.java | 2 - .../client/gui/lounge/ClientListItem.java | 40 ++++++++++ .../client/gui/lounge/LobbyListItem.java | 18 +++-- .../gui/lounge/LoungeSceneViewController.java | 73 ++++++++++++++++++- .../client/gui/lounge/LoungeSceneView.fxml | 41 ++++++++++- 6 files changed, 205 insertions(+), 9 deletions(-) create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/ClientListItem.java diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/ClientModel.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/ClientModel.java index 7444913..7afc932 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/ClientModel.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/ClientModel.java @@ -2,6 +2,19 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui; import ch.unibas.dmi.dbis.cs108.BudaLogConfig; import ch.unibas.dmi.dbis.cs108.multiplayer.client.Client; +import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.lounge.ClientListItem; +import ch.unibas.dmi.dbis.cs108.multiplayer.server.Lobby; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import javafx.beans.property.SimpleListProperty; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.property.StringProperty; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.collections.ObservableMap; +import javafx.collections.ObservableSet; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -14,9 +27,17 @@ public class ClientModel { private Client client; private String incomingChatMsg; + private ObservableList allClients; + private ObservableMap idToNameMap; + + + private HashSet clientsOnServer; + public ClientModel(String username, Client client) { this.username = username; this.client = client; + this.allClients = FXCollections.observableArrayList(); + this.idToNameMap = FXCollections.observableHashMap(); } //private Number; @@ -36,4 +57,23 @@ public class ClientModel { public void setUsername(String username) { this.username = username; } + + public ObservableList getAllClients() { + return allClients; + } + + public void addClientToList(ClientListItem nameAndId) { + this.allClients.add(nameAndId); + } + + public void removeClientFromList(int id){ + Iterator it = allClients.iterator(); + while(it.hasNext()){ + int uid = it.next().getId(); + if(uid == id){ + it.remove(); + break; + } + } + } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatController.java index 122f1a3..16f186f 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatController.java @@ -12,8 +12,6 @@ import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.ListChangeListener; -import javafx.event.ActionEvent; -import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.Group; diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/ClientListItem.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/ClientListItem.java new file mode 100644 index 0000000..b0f17c5 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/ClientListItem.java @@ -0,0 +1,40 @@ +package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.lounge; + +import javafx.beans.property.SimpleIntegerProperty; +import javafx.beans.property.SimpleStringProperty; + +public class ClientListItem { + + private SimpleStringProperty name; + private final SimpleIntegerProperty id; + + public ClientListItem(SimpleStringProperty name, SimpleIntegerProperty id) { + this.name = name; + this.id = id; + } + + @Override + public String toString(){ + return name + " ID: " + id; + } + + public String getName() { + return name.get(); + } + + public SimpleStringProperty nameProperty() { + return name; + } + + public void setName(String name) { + this.name.set(name); + } + + public int getId() { + return id.get(); + } + + public SimpleIntegerProperty idProperty() { + return id; + } +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LobbyListItem.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LobbyListItem.java index 4793b9c..5259334 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LobbyListItem.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LobbyListItem.java @@ -1,14 +1,22 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.lounge; -import java.util.List; +import java.util.Set; +import javafx.beans.property.StringProperty; import javafx.scene.control.Label; import javafx.scene.control.ToggleButton; public class LobbyListItem { - private Label lobbyID; - private Label adminName; - private List clientInLobby; - private ToggleButton button; + private final Label lobbyID; + private final Label adminName; + private Set clientsInLobby; + private final ToggleButton button; + public LobbyListItem(Label lobbyID, Label adminName, + Set clientsInLobby, ToggleButton button) { + this.lobbyID = lobbyID; + this.adminName = adminName; + this.clientsInLobby = clientsInLobby; + this.button = button; + } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LoungeSceneViewController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LoungeSceneViewController.java index 9a72b54..53cbf57 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LoungeSceneViewController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LoungeSceneViewController.java @@ -1,5 +1,76 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.lounge; -public class LoungeSceneViewController { +import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.ClientModel; +import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.events.ChangeNameButtonPressedEventHandler; +import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.events.LeaveServerButtonPressedEventHandler; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.beans.property.StringProperty; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.Button; +import javafx.scene.control.ListCell; +import javafx.scene.control.ListView; +import javafx.scene.control.ToolBar; +import javafx.scene.control.TreeView; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.BorderPane; +import javafx.scene.layout.HBox; +public class LoungeSceneViewController implements Initializable { + + + @FXML + private TreeView LobbyTreeView; + @FXML + private ListView ClientListView; + @FXML + private Button ChangeNameButton; + @FXML + private Button LeaveServerButton; + @FXML + private AnchorPane ChatArea; + @FXML + private HBox ChatAreaHBox; + @FXML + private BorderPane LoungeSceneBorderPane; + @FXML + private ToolBar NTtBToolBar; + + public static ClientModel client; + + + /** + * Called to initialize a controller after its root element has been completely processed. + * + * @param location The location used to resolve relative paths for the root object, or {@code + * null} if the location is not known. + * @param resources The resources used to localize the root object, or {@code null} if + */ + @Override + public void initialize(URL location, ResourceBundle resources) { + ChangeNameButton.setOnAction(new ChangeNameButtonPressedEventHandler()); + LeaveServerButton.setOnAction(new LeaveServerButtonPressedEventHandler()); + } + + public void updateLobbyListView(){ + + } + + public void updateClientListView(){ + + } + + public void addClientToList(ClientListItem player) { + ListCell playerCell = new ListCell<>(); + ClientListView.ite + } + + /** + * Utility to set the client model for this class + * @param client, the client model + */ + public static void setClient(ClientModel client) { + LoungeSceneViewController.client = client; + } } diff --git a/src/main/resources/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LoungeSceneView.fxml b/src/main/resources/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LoungeSceneView.fxml index 92ce78d..ddd29bb 100644 --- a/src/main/resources/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LoungeSceneView.fxml +++ b/src/main/resources/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LoungeSceneView.fxml @@ -1,6 +1,45 @@ + + + + + + - + + + + + + +