Fixed a bug showing the wrong user status in ChatScene top bar
Additionally refactored UI components a bit
This commit is contained in:
		@@ -2,9 +2,8 @@ package envoy.client.ui.control;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import javafx.geometry.*;
 | 
					import javafx.geometry.*;
 | 
				
			||||||
import javafx.scene.control.Label;
 | 
					import javafx.scene.control.Label;
 | 
				
			||||||
import javafx.scene.image.*;
 | 
					import javafx.scene.image.Image;
 | 
				
			||||||
import javafx.scene.layout.*;
 | 
					import javafx.scene.layout.*;
 | 
				
			||||||
import javafx.scene.shape.Rectangle;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import envoy.client.data.*;
 | 
					import envoy.client.data.*;
 | 
				
			||||||
import envoy.client.util.IconUtil;
 | 
					import envoy.client.util.IconUtil;
 | 
				
			||||||
@@ -23,6 +22,8 @@ public final class ChatControl extends HBox {
 | 
				
			|||||||
			groupIcon = IconUtil.loadIconThemeSensitive("group_icon", 32);
 | 
								groupIcon = IconUtil.loadIconThemeSensitive("group_icon", 32);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
 | 
						 * Creates a new {@code ChatControl}.
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
	 * @param chat the chat to display
 | 
						 * @param chat the chat to display
 | 
				
			||||||
	 * @since Envoy Client v0.1-beta
 | 
						 * @since Envoy Client v0.1-beta
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
@@ -31,13 +32,7 @@ public final class ChatControl extends HBox {
 | 
				
			|||||||
		setPadding(new Insets(0, 0, 3, 0));
 | 
							setPadding(new Insets(0, 0, 3, 0));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Profile picture
 | 
							// Profile picture
 | 
				
			||||||
		ImageView	contactProfilePic	= new ImageView(chat instanceof GroupChat ? groupIcon : userIcon);
 | 
							final var contactProfilePic = new ProfilePicImageView(chat instanceof GroupChat ? groupIcon : userIcon, 32);
 | 
				
			||||||
		final var clip = new Rectangle();
 | 
					 | 
				
			||||||
		clip.setWidth(32);
 | 
					 | 
				
			||||||
		clip.setHeight(32);
 | 
					 | 
				
			||||||
		clip.setArcHeight(32);
 | 
					 | 
				
			||||||
		clip.setArcWidth(32);
 | 
					 | 
				
			||||||
		contactProfilePic.setClip(clip);
 | 
					 | 
				
			||||||
		getChildren().add(contactProfilePic);
 | 
							getChildren().add(contactProfilePic);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Spacing
 | 
							// Spacing
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,14 +26,8 @@ public final class ContactControl extends VBox {
 | 
				
			|||||||
		getChildren().add(nameLabel);
 | 
							getChildren().add(nameLabel);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Online status (user) or member count (group)
 | 
							// Online status (user) or member count (group)
 | 
				
			||||||
		if (contact instanceof User) {
 | 
							getChildren().add(contact instanceof User ? new UserStatusLabel((User) contact) : new GroupSizeLabel((Group) contact));
 | 
				
			||||||
			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"));
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		getStyleClass().add("list-element");
 | 
							getStyleClass().add("list-element");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					package envoy.client.ui.control;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import javafx.scene.control.Label;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import envoy.data.Group;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Displays the amount of members in a {@link Group}.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author Leon Hofmeister
 | 
				
			||||||
 | 
					 * @since Envoy Client v0.3-beta
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public final class GroupSizeLabel extends Label {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @param recipient the group whose members to show
 | 
				
			||||||
 | 
						 * @since Envoy Client v0.3-beta
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public GroupSizeLabel(Group recipient) { super(recipient.getContacts().size() + " members"); }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					package envoy.client.ui.control;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import javafx.scene.control.Label;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import envoy.data.User;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Displays the status of a {@link User}.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author Leon Hofmeister
 | 
				
			||||||
 | 
					 * @since Envoy Client v0.3-beta
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public final class UserStatusLabel extends Label {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @param user the user whose status to display
 | 
				
			||||||
 | 
						 * @since Envoy Client v0.3-beta
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public UserStatusLabel(User user) {
 | 
				
			||||||
 | 
							super(user.getStatus().toString());
 | 
				
			||||||
 | 
							getStyleClass().add(user.getStatus().toString().toLowerCase());
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -51,12 +51,6 @@ import dev.kske.eventbus.Event;
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
public final class ChatScene implements EventListener, Restorable {
 | 
					public final class ChatScene implements EventListener, Restorable {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@FXML
 | 
					 | 
				
			||||||
	private GridPane scene;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	@FXML
 | 
					 | 
				
			||||||
	private Label contactLabel;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	@FXML
 | 
						@FXML
 | 
				
			||||||
	private ListView<Message> messageList;
 | 
						private ListView<Message> messageList;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -85,7 +79,7 @@ public final class ChatScene implements EventListener, Restorable {
 | 
				
			|||||||
	private Button newContactButton;
 | 
						private Button newContactButton;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@FXML
 | 
						@FXML
 | 
				
			||||||
	private TextArea messageTextArea;
 | 
						private Label contactLabel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@FXML
 | 
						@FXML
 | 
				
			||||||
	private Label remainingChars;
 | 
						private Label remainingChars;
 | 
				
			||||||
@@ -93,24 +87,27 @@ public final class ChatScene implements EventListener, Restorable {
 | 
				
			|||||||
	@FXML
 | 
						@FXML
 | 
				
			||||||
	private Label infoLabel;
 | 
						private Label infoLabel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@FXML
 | 
					 | 
				
			||||||
	private MenuItem deleteContactMenuItem;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	@FXML
 | 
					 | 
				
			||||||
	private ImageView attachmentView;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	@FXML
 | 
						@FXML
 | 
				
			||||||
	private Label topBarContactLabel;
 | 
						private Label topBarContactLabel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@FXML
 | 
						@FXML
 | 
				
			||||||
	private Label topBarStatusLabel;
 | 
						private Label topBarStatusLabel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@FXML
 | 
				
			||||||
 | 
						private MenuItem deleteContactMenuItem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@FXML
 | 
				
			||||||
 | 
						private ImageView attachmentView;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@FXML
 | 
						@FXML
 | 
				
			||||||
	private ImageView clientProfilePic;
 | 
						private ImageView clientProfilePic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@FXML
 | 
						@FXML
 | 
				
			||||||
	private ImageView recipientProfilePic;
 | 
						private ImageView recipientProfilePic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@FXML
 | 
				
			||||||
 | 
						private TextArea messageTextArea;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@FXML
 | 
						@FXML
 | 
				
			||||||
	private TextArea contactSearch;
 | 
						private TextArea contactSearch;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -251,8 +248,17 @@ public final class ChatScene implements EventListener, Restorable {
 | 
				
			|||||||
			.ifPresent(msg -> Platform.runLater(messageList::refresh));
 | 
								.ifPresent(msg -> Platform.runLater(messageList::refresh));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Event(eventType = UserStatusChange.class)
 | 
						@Event
 | 
				
			||||||
	private void onUserStatusChange() { Platform.runLater(chatList::refresh); }
 | 
						private void onUserStatusChange(UserStatusChange statusChange) {
 | 
				
			||||||
 | 
							Platform.runLater(() -> {
 | 
				
			||||||
 | 
								chatList.refresh();
 | 
				
			||||||
 | 
								if (currentChat != null && currentChat.getRecipient().getID() == statusChange.getID()) {
 | 
				
			||||||
 | 
									topBarStatusLabel.getStyleClass().clear();
 | 
				
			||||||
 | 
									topBarStatusLabel.setText(statusChange.get().toString());
 | 
				
			||||||
 | 
									topBarStatusLabel.getStyleClass().add(statusChange.get().toString().toLowerCase());
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Event
 | 
						@Event
 | 
				
			||||||
	private void onContactOperation(ContactOperation operation) {
 | 
						private void onContactOperation(ContactOperation operation) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,14 +22,15 @@
 | 
				
			|||||||
<?import javafx.scene.text.Font?>
 | 
					<?import javafx.scene.text.Font?>
 | 
				
			||||||
<?import javafx.stage.Screen?>
 | 
					<?import javafx.stage.Screen?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<GridPane fx:id="scene" maxHeight="-Infinity"
 | 
					<GridPane maxHeight="-Infinity" maxWidth="-Infinity"
 | 
				
			||||||
	maxWidth="-Infinity" minHeight="400.0" minWidth="500.0"
 | 
						minHeight="400.0" minWidth="500.0"
 | 
				
			||||||
	prefHeight="${screen.visualBounds.height}" prefWidth="${screen.visualBounds.width}"
 | 
						prefHeight="${screen.visualBounds.height}"
 | 
				
			||||||
 | 
						prefWidth="${screen.visualBounds.width}"
 | 
				
			||||||
	xmlns="http://javafx.com/javafx/11.0.1"
 | 
						xmlns="http://javafx.com/javafx/11.0.1"
 | 
				
			||||||
	xmlns:fx="http://javafx.com/fxml/1"
 | 
						xmlns:fx="http://javafx.com/fxml/1"
 | 
				
			||||||
	fx:controller="envoy.client.ui.controller.ChatScene">
 | 
						fx:controller="envoy.client.ui.controller.ChatScene">
 | 
				
			||||||
	<fx:define>
 | 
						<fx:define>
 | 
				
			||||||
    	<Screen fx:factory="getPrimary" fx:id="screen" />
 | 
							<Screen fx:factory="getPrimary" fx:id="screen" />
 | 
				
			||||||
	</fx:define>
 | 
						</fx:define>
 | 
				
			||||||
	<columnConstraints>
 | 
						<columnConstraints>
 | 
				
			||||||
		<ColumnConstraints hgrow="NEVER"
 | 
							<ColumnConstraints hgrow="NEVER"
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user