diff --git a/client/src/main/java/envoy/client/ui/controller/ChatScene.java b/client/src/main/java/envoy/client/ui/controller/ChatScene.java index 469c39a..c57d736 100644 --- a/client/src/main/java/envoy/client/ui/controller/ChatScene.java +++ b/client/src/main/java/envoy/client/ui/controller/ChatScene.java @@ -23,6 +23,7 @@ import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import javafx.scene.layout.GridPane; import javafx.scene.paint.Color; +import javafx.scene.shape.Rectangle; import javafx.stage.FileChooser; import javafx.util.Duration; @@ -103,6 +104,12 @@ public final class ChatScene implements Restorable { @FXML private Button messageSearchButton; + @FXML + private ImageView clientProfilePic; + + @FXML + private ImageView recipientProfilePic; + private LocalDB localDB; private Client client; private WriteProxy writeProxy; @@ -140,6 +147,13 @@ public final class ChatScene implements Restorable { attachmentView.setImage(DEFAULT_ATTACHMENT_VIEW_IMAGE); rotateButton.setGraphic(new ImageView(IconUtil.loadIconThemeSensitive("rotate", (int) (DEFAULT_ICON_SIZE * 1.5)))); messageSearchButton.setGraphic(new ImageView(IconUtil.loadIconThemeSensitive("search", DEFAULT_ICON_SIZE))); + clientProfilePic.setImage(IconUtil.loadIconThemeSensitive("user_icon", 43)); + Rectangle clip = new Rectangle(); + clip.setWidth(43); + clip.setHeight(43); + clip.setArcHeight(43); + clip.setArcWidth(43); + clientProfilePic.setClip(clip); // Listen to received messages eventBus.register(MessageCreationEvent.class, e -> { @@ -278,16 +292,26 @@ public final class ChatScene implements Restorable { attachmentButton.setDisable(false); chatList.refresh(); - topBarContactLabel.setText(currentChat.getRecipient().getName()); - if (currentChat.getRecipient() instanceof User) { - String status = ((User) currentChat.getRecipient()).getStatus().toString(); - topBarStatusLabel.setText(status); - topBarStatusLabel.getStyleClass().add(status.toLowerCase()); - } - else topBarStatusLabel.setText(currentChat.getRecipient().getContacts().size() + " members"); - - if (currentChat != null) - messageSearchButton.setVisible(true); + if (currentChat != null) { + topBarContactLabel.setText(currentChat.getRecipient().getName()); + if (currentChat.getRecipient() instanceof User) { + String status = ((User) currentChat.getRecipient()).getStatus().toString(); + topBarStatusLabel.setText(status); + topBarStatusLabel.getStyleClass().add(status.toLowerCase()); + recipientProfilePic.setImage(IconUtil.loadIconThemeSensitive("user_icon", 43)); + } else { + topBarStatusLabel.setText(currentChat.getRecipient().getContacts().size() + " members"); + recipientProfilePic.setImage(IconUtil.loadIconThemeSensitive("group_icon", 43)); + } + Rectangle clip = new Rectangle(); + clip.setWidth(43); + clip.setHeight(43); + clip.setArcHeight(43); + clip.setArcWidth(43); + recipientProfilePic.setClip(clip); + + messageSearchButton.setVisible(true); + } } /** 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 a0bd640..39086ca 100644 --- a/client/src/main/java/envoy/client/ui/listcell/ChatControl.java +++ b/client/src/main/java/envoy/client/ui/listcell/ChatControl.java @@ -1,10 +1,15 @@ package envoy.client.ui.listcell; +import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.control.Label; +import javafx.scene.image.ImageView; import javafx.scene.layout.*; +import javafx.scene.shape.Rectangle; import envoy.client.data.Chat; +import envoy.client.ui.IconUtil; +import envoy.data.Group; /** * Displays a chat using a contact control for the recipient and a label for the @@ -25,7 +30,25 @@ public class ChatControl extends HBox { * @since Envoy Client v0.1-beta */ public ChatControl(Chat chat) { - + setAlignment(Pos.CENTER_LEFT); + setPadding(new Insets(0, 0, 3, 0)); + // profile pic + ImageView contactProfilePic; + if (chat.getRecipient() instanceof Group) contactProfilePic = new ImageView(IconUtil.loadIconThemeSensitive("group_icon", 32)); + else contactProfilePic = new ImageView(IconUtil.loadIconThemeSensitive("user_icon", 32)); + Rectangle clip = new Rectangle(); + clip.setWidth(32); + clip.setHeight(32); + clip.setArcHeight(32); + clip.setArcWidth(32); + contactProfilePic.setClip(clip); + getChildren().add(contactProfilePic); + // spacing + Region leftSpacing = new Region(); + leftSpacing.setPrefSize(8, 0); + leftSpacing.setMinSize(8, 0); + leftSpacing.setMaxSize(8, 0); + getChildren().add(leftSpacing); // Contact control getChildren().add(new ContactControl(chat.getRecipient())); // Unread messages diff --git a/client/src/main/resources/css/base.css b/client/src/main/resources/css/base.css index cbfd244..3549824 100644 --- a/client/src/main/resources/css/base.css +++ b/client/src/main/resources/css/base.css @@ -127,3 +127,7 @@ #transparentBackground { -fx-background-color: transparent; } + +#profilePic { + -fx-radius: 1em; +} diff --git a/client/src/main/resources/fxml/ChatScene.fxml b/client/src/main/resources/fxml/ChatScene.fxml index 9cd5d1f..8541cc2 100644 --- a/client/src/main/resources/fxml/ChatScene.fxml +++ b/client/src/main/resources/fxml/ChatScene.fxml @@ -48,6 +48,11 @@ + + + + + @@ -143,31 +151,29 @@ - + - - + + + + + + @@ -178,6 +184,11 @@ + + + + + - + diff --git a/client/src/main/resources/icons/dark/group_icon.png b/client/src/main/resources/icons/dark/group_icon.png new file mode 100644 index 0000000..5b1660e Binary files /dev/null and b/client/src/main/resources/icons/dark/group_icon.png differ diff --git a/client/src/main/resources/icons/dark/user_icon.png b/client/src/main/resources/icons/dark/user_icon.png new file mode 100644 index 0000000..b44604c Binary files /dev/null and b/client/src/main/resources/icons/dark/user_icon.png differ