2020-09-25 14:29:23 +02:00
|
|
|
package envoy.client.ui.control;
|
2020-07-01 19:35:15 +02:00
|
|
|
|
2020-09-25 14:29:23 +02:00
|
|
|
import javafx.geometry.*;
|
2020-07-01 19:35:15 +02:00
|
|
|
import javafx.scene.control.Label;
|
2020-09-25 14:29:23 +02:00
|
|
|
import javafx.scene.image.*;
|
2020-07-11 10:40:42 +02:00
|
|
|
import javafx.scene.layout.*;
|
2020-07-17 13:56:36 +02:00
|
|
|
import javafx.scene.shape.Rectangle;
|
2020-07-01 19:35:15 +02:00
|
|
|
|
2020-09-25 14:29:23 +02:00
|
|
|
import envoy.client.data.*;
|
|
|
|
import envoy.client.util.IconUtil;
|
2020-07-01 19:35:15 +02:00
|
|
|
|
|
|
|
/**
|
2020-07-13 17:55:00 +02:00
|
|
|
* Displays a chat using a contact control for the recipient and a label for the
|
|
|
|
* unread message count.
|
2020-07-01 19:35:15 +02:00
|
|
|
*
|
2020-07-13 17:55:00 +02:00
|
|
|
* @see ContactControl
|
2020-07-01 19:35:15 +02:00
|
|
|
* @author Leon Hofmeister
|
|
|
|
* @since Envoy Client v0.1-beta
|
|
|
|
*/
|
2020-08-22 13:37:07 +02:00
|
|
|
public final class ChatControl extends HBox {
|
2020-07-01 19:35:15 +02:00
|
|
|
|
2020-09-25 14:29:23 +02:00
|
|
|
private static final Image userIcon = IconUtil.loadIconThemeSensitive("user_icon", 32),
|
|
|
|
groupIcon = IconUtil.loadIconThemeSensitive("group_icon", 32);
|
|
|
|
|
2020-07-01 19:35:15 +02:00
|
|
|
/**
|
2020-07-12 14:46:35 +02:00
|
|
|
* @param chat the chat to display
|
2020-07-01 19:35:15 +02:00
|
|
|
* @since Envoy Client v0.1-beta
|
|
|
|
*/
|
2020-07-12 14:46:35 +02:00
|
|
|
public ChatControl(Chat chat) {
|
2020-07-17 13:56:36 +02:00
|
|
|
setAlignment(Pos.CENTER_LEFT);
|
|
|
|
setPadding(new Insets(0, 0, 3, 0));
|
2020-09-25 14:29:23 +02:00
|
|
|
|
|
|
|
// Profile picture
|
|
|
|
ImageView contactProfilePic = new ImageView(chat instanceof GroupChat ? groupIcon : userIcon);
|
2020-08-22 13:37:07 +02:00
|
|
|
final var clip = new Rectangle();
|
2020-07-17 13:56:36 +02:00
|
|
|
clip.setWidth(32);
|
|
|
|
clip.setHeight(32);
|
|
|
|
clip.setArcHeight(32);
|
|
|
|
clip.setArcWidth(32);
|
|
|
|
contactProfilePic.setClip(clip);
|
|
|
|
getChildren().add(contactProfilePic);
|
2020-09-25 14:29:23 +02:00
|
|
|
|
|
|
|
// Spacing
|
2020-08-22 13:37:07 +02:00
|
|
|
final var leftSpacing = new Region();
|
2020-07-17 13:56:36 +02:00
|
|
|
leftSpacing.setPrefSize(8, 0);
|
|
|
|
leftSpacing.setMinSize(8, 0);
|
|
|
|
leftSpacing.setMaxSize(8, 0);
|
|
|
|
getChildren().add(leftSpacing);
|
2020-09-25 14:29:23 +02:00
|
|
|
|
2020-07-13 17:55:00 +02:00
|
|
|
// Contact control
|
|
|
|
getChildren().add(new ContactControl(chat.getRecipient()));
|
2020-09-25 14:29:23 +02:00
|
|
|
|
2020-07-13 17:55:00 +02:00
|
|
|
// Unread messages
|
2020-07-12 14:46:35 +02:00
|
|
|
if (chat.getUnreadAmount() != 0) {
|
2020-07-25 16:51:46 +02:00
|
|
|
final var spacing = new Region();
|
2020-07-11 10:46:17 +02:00
|
|
|
setHgrow(spacing, Priority.ALWAYS);
|
|
|
|
getChildren().add(spacing);
|
2020-07-12 14:46:35 +02:00
|
|
|
final var unreadMessagesLabel = new Label(Integer.toString(chat.getUnreadAmount()));
|
2020-07-11 10:46:17 +02:00
|
|
|
unreadMessagesLabel.setMinSize(15, 15);
|
2020-09-25 14:29:23 +02:00
|
|
|
final var vbox = new VBox();
|
|
|
|
vbox.setAlignment(Pos.CENTER_RIGHT);
|
2020-07-11 10:46:17 +02:00
|
|
|
unreadMessagesLabel.setAlignment(Pos.CENTER);
|
2020-08-26 15:50:46 +02:00
|
|
|
unreadMessagesLabel.getStyleClass().add("unread-messages-amount");
|
2020-09-25 14:29:23 +02:00
|
|
|
vbox.getChildren().add(unreadMessagesLabel);
|
|
|
|
getChildren().add(vbox);
|
2020-07-11 10:46:17 +02:00
|
|
|
}
|
2020-08-26 15:50:46 +02:00
|
|
|
getStyleClass().add("list-element");
|
2020-07-01 19:35:15 +02:00
|
|
|
}
|
|
|
|
}
|