diff --git a/src/main/java/envoy/client/ui/SceneContext.java b/src/main/java/envoy/client/ui/SceneContext.java index 0c40bf3..fb2f0b2 100644 --- a/src/main/java/envoy/client/ui/SceneContext.java +++ b/src/main/java/envoy/client/ui/SceneContext.java @@ -58,6 +58,13 @@ public final class SceneContext { */ CONTACT_SEARCH_SCENE("/fxml/ContactSearchScene.fxml"), + /** + * The scene in which the group creation screen is displayed. + * + * @since Envoy Client v0.1-beta + */ + GROUP_CREATION_SCENE("/fxml/GroupCreationScene.fxml"), + /** * The scene in which the login screen is displayed. * diff --git a/src/main/java/envoy/client/ui/controller/ChatScene.java b/src/main/java/envoy/client/ui/controller/ChatScene.java index 4c3fe05..7bdae86 100644 --- a/src/main/java/envoy/client/ui/controller/ChatScene.java +++ b/src/main/java/envoy/client/ui/controller/ChatScene.java @@ -19,9 +19,9 @@ import envoy.client.data.Settings; import envoy.client.event.MessageCreationEvent; import envoy.client.net.Client; import envoy.client.net.WriteProxy; +import envoy.client.ui.ContactListCell; import envoy.client.ui.MessageListCell; import envoy.client.ui.SceneContext; -import envoy.client.ui.ContactListCell; import envoy.data.Contact; import envoy.data.Message; import envoy.data.MessageBuilder; @@ -173,7 +173,7 @@ public final class ChatScene { @FXML private void addContactButtonClicked() { sceneContext.load(SceneContext.SceneInfo.CONTACT_SEARCH_SCENE); - sceneContext.getController().initializeData(sceneContext); + sceneContext.getController().initializeData(sceneContext, localDB); } @FXML diff --git a/src/main/java/envoy/client/ui/controller/ContactSearchScene.java b/src/main/java/envoy/client/ui/controller/ContactSearchScene.java index 9fc495d..f2976c9 100644 --- a/src/main/java/envoy/client/ui/controller/ContactSearchScene.java +++ b/src/main/java/envoy/client/ui/controller/ContactSearchScene.java @@ -8,9 +8,10 @@ import javafx.fxml.FXML; import javafx.scene.control.*; import javafx.scene.control.Alert.AlertType; +import envoy.client.data.LocalDB; import envoy.client.event.SendEvent; -import envoy.client.ui.SceneContext; import envoy.client.ui.ContactListCell; +import envoy.client.ui.SceneContext; import envoy.data.Contact; import envoy.event.ElementOperation; import envoy.event.EventBus; @@ -38,6 +39,9 @@ public class ContactSearchScene { @FXML private Button searchButton; + @FXML + private Button newGroupButton; + @FXML private TextField searchBar; @@ -46,6 +50,8 @@ public class ContactSearchScene { private SceneContext sceneContext; + private LocalDB localDB; + private static EventBus eventBus = EventBus.getInstance(); private static final Logger logger = EnvoyLog.getLogger(ChatScene.class); @@ -53,7 +59,10 @@ public class ContactSearchScene { * @param sceneContext enables the user to return to the chat scene * @since Envoy Client v0.1-beta */ - public void initializeData(SceneContext sceneContext) { this.sceneContext = sceneContext; } + public void initializeData(SceneContext sceneContext, LocalDB localDB) { + this.sceneContext = sceneContext; + this.localDB = localDB; + } @FXML private void initialize() { @@ -122,6 +131,12 @@ public class ContactSearchScene { } } + @FXML + private void newGroupButtonClicked() { + sceneContext.load(SceneContext.SceneInfo.GROUP_CREATION_SCENE); + sceneContext.getController().initializeData(sceneContext, localDB); + } + @FXML private void backButtonClicked() { sceneContext.pop(); } } diff --git a/src/main/java/envoy/client/ui/controller/GroupCreationScene.java b/src/main/java/envoy/client/ui/controller/GroupCreationScene.java new file mode 100644 index 0000000..4eb0a43 --- /dev/null +++ b/src/main/java/envoy/client/ui/controller/GroupCreationScene.java @@ -0,0 +1,78 @@ +package envoy.client.ui.controller; + +import java.util.stream.Collectors; + +import javafx.application.Platform; +import javafx.fxml.FXML; +import javafx.scene.control.*; + +import envoy.client.data.LocalDB; +import envoy.client.event.SendEvent; +import envoy.client.ui.ContactListCell; +import envoy.client.ui.SceneContext; +import envoy.data.Contact; +import envoy.data.User; +import envoy.event.EventBus; +import envoy.event.GroupCreationEvent; + +/** + * Project: envoy-client
+ * File: ContactSearchSceneController.java
+ * Created: 07.06.2020
+ * + * @author Maximilian Käfer + * @since Envoy Client v0.1-beta + */ +public class GroupCreationScene { + + @FXML + private Button backButton; + + @FXML + private Button createButton; + + @FXML + private TextField groupNameBar; + + @FXML + private ListView contactList; + + private SceneContext sceneContext; + + private static EventBus eventBus = EventBus.getInstance(); + // private static final Logger logger = EnvoyLog.getLogger(ChatScene.class); + + @FXML + private void initialize() { + contactList.setCellFactory(e -> new ContactListCell()); + contactList.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); + } + + /** + * @param sceneContext enables the user to return to the chat scene + * @since Envoy Client v0.1-beta + */ + public void initializeData(SceneContext sceneContext, LocalDB localDB) { + this.sceneContext = sceneContext; + Platform.runLater(() -> contactList.getItems() + .addAll(localDB.getUsers() + .values() + .stream() + .filter(c -> c instanceof User && c.getID() != localDB.getUser().getID()) + .collect(Collectors.toList()))); + } + + /** + * Sends a {@link GroupCreationEvent} to the server. + * + * @since Envoy Client v0.1-beta + */ + @FXML + private void sendGroupObject() { + eventBus.dispatch(new SendEvent(new GroupCreationEvent(groupNameBar.getText(), + contactList.getSelectionModel().getSelectedItems().stream().map(Contact::getID).collect(Collectors.toSet())))); + } + + @FXML + private void backButtonClicked() { sceneContext.pop(); } +} diff --git a/src/main/resources/fxml/ContactSearchScene.fxml b/src/main/resources/fxml/ContactSearchScene.fxml index c1fe70b..517b3e5 100644 --- a/src/main/resources/fxml/ContactSearchScene.fxml +++ b/src/main/resources/fxml/ContactSearchScene.fxml @@ -6,10 +6,8 @@ - - @@ -30,15 +28,7 @@ - - - - - - - - - + diff --git a/src/main/resources/fxml/GroupCreationScene.fxml b/src/main/resources/fxml/GroupCreationScene.fxml new file mode 100644 index 0000000..53900d5 --- /dev/null +++ b/src/main/resources/fxml/GroupCreationScene.fxml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +