52 lines
1.5 KiB
Java
52 lines
1.5 KiB
Java
package envoy.client.ui.control;
|
|
|
|
import javafx.scene.control.Label;
|
|
import javafx.scene.layout.VBox;
|
|
|
|
import envoy.data.*;
|
|
|
|
/**
|
|
* 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).
|
|
*
|
|
* @author Kai S. K. Engelbart
|
|
* @since Envoy Client v0.2-beta
|
|
*/
|
|
public final class ContactControl extends VBox {
|
|
|
|
private final Contact contact;
|
|
|
|
/**
|
|
* @param contact the contact to display
|
|
* @since Envoy Client v0.2-beta
|
|
*/
|
|
public ContactControl(Contact contact) {
|
|
this.contact = contact;
|
|
|
|
// Name label
|
|
final var nameLabel = new Label(contact.getName());
|
|
getChildren().add(nameLabel);
|
|
|
|
// Online status (user) or member count (group)
|
|
getChildren().add(contact instanceof User ? new UserStatusLabel((User) contact) : new GroupSizeLabel((Group) contact));
|
|
|
|
getStyleClass().add("list-element");
|
|
}
|
|
|
|
/**
|
|
* Replaces the info label of this {@code ContactControl} with an updated
|
|
* version.
|
|
* <p>
|
|
* This method should be called when the status of the underlying user or the
|
|
* size of the underlying group has changed.
|
|
*
|
|
* @since Envoy Client v0.3-beta
|
|
* @apiNote will produce buggy results if contact control gets updated so that
|
|
* the info label is no longer on index 1.
|
|
*/
|
|
public void replaceInfoLabel() {
|
|
getChildren().set(1, contact instanceof User ? new UserStatusLabel((User) contact) : new GroupSizeLabel((Group) contact));
|
|
}
|
|
}
|