From bcb978ce59f0d4fc3a97d56aac544009470143c6 Mon Sep 17 00:00:00 2001 From: CyB3RC0nN0R Date: Mon, 13 Jul 2020 17:55:00 +0200 Subject: [PATCH] Extract ContactControl from ChatControl The new class ContactControl displays the contact name and status (user) or member count (group) and is used inside ChatControl, which adds the unread message count label. --- .../envoy/client/ui/listcell/ChatControl.java | 27 ++++-------- .../client/ui/listcell/ContactControl.java | 44 +++++++++++++++++++ 2 files changed, 52 insertions(+), 19 deletions(-) create mode 100644 client/src/main/java/envoy/client/ui/listcell/ContactControl.java diff --git a/client/src/main/java/envoy/client/ui/listcell/ChatControl.java b/client/src/main/java/envoy/client/ui/listcell/ChatControl.java index 98294a7..c2e942c 100644 --- a/client/src/main/java/envoy/client/ui/listcell/ChatControl.java +++ b/client/src/main/java/envoy/client/ui/listcell/ChatControl.java @@ -5,17 +5,16 @@ import javafx.scene.control.Label; import javafx.scene.layout.*; import envoy.client.data.Chat; -import envoy.data.Contact; -import envoy.data.Group; -import envoy.data.User; /** - * This class formats a single {@link Contact} into a UI component. + * Displays a chat using a contact control for the recipient and a label for the + * unread message count. *

* Project: envoy-client
* File: ContactControl.java
* Created: 01.07.2020
* + * @see ContactControl * @author Leon Hofmeister * @since Envoy Client v0.1-beta */ @@ -26,21 +25,11 @@ public class ChatControl extends HBox { * @since Envoy Client v0.1-beta */ public ChatControl(Chat chat) { - // Container with contact name - final var vBox = new VBox(); - final var nameLabel = new Label(chat.getRecipient().getName()); - nameLabel.setWrapText(true); - vBox.getChildren().add(nameLabel); - if (chat.getRecipient() instanceof User) { - // Online status - final var user = (User) chat.getRecipient(); - final var statusLabel = new Label(user.getStatus().toString()); - statusLabel.getStyleClass().add(user.getStatus().toString().toLowerCase()); - vBox.getChildren().add(statusLabel); - } else // Member count - vBox.getChildren().add(new Label(((Group) chat.getRecipient()).getContacts().size() + " members")); - - getChildren().add(vBox); + + // Contact control + getChildren().add(new ContactControl(chat.getRecipient())); + + // Unread messages if (chat.getUnreadAmount() != 0) { Region spacing = new Region(); setHgrow(spacing, Priority.ALWAYS); diff --git a/client/src/main/java/envoy/client/ui/listcell/ContactControl.java b/client/src/main/java/envoy/client/ui/listcell/ContactControl.java new file mode 100644 index 0000000..c573e69 --- /dev/null +++ b/client/src/main/java/envoy/client/ui/listcell/ContactControl.java @@ -0,0 +1,44 @@ +package envoy.client.ui.listcell; + +import javafx.scene.control.Label; +import javafx.scene.layout.VBox; + +import envoy.data.Contact; +import envoy.data.User; + +/** + * Displays information about a contact in two rows. The first row contains the + * name. The second row contains the online status (user) or the member count + * (group). + *

+ * Project: envoy-client
+ * File: ContactControl.java
+ * Created: 13.07.2020
+ * + * @author Kai S. K. Engelbart + * @since Envoy Client v0.2-beta + */ +public class ContactControl extends VBox { + + /** + * @param contact the contact to display + * @since Envoy Client v0.2-beta + */ + public ContactControl(Contact contact) { + + // Name label + final var nameLabel = new Label(contact.getName()); + nameLabel.setWrapText(true); + getChildren().add(nameLabel); + + // Online status (user) or member count (group) + if (contact instanceof User) { + final var status = ((User) contact).getStatus().toString(); + final var statusLabel = new Label(status); + statusLabel.getStyleClass().add(status.toLowerCase()); + getChildren().add(statusLabel); + } else { + getChildren().add(new Label(contact.getContacts().size() + " members")); + } + } +}