package envoy.client.ui.listcell; import javafx.geometry.*; import javafx.scene.control.ListView; import envoy.data.Message; import envoy.client.ui.control.MessageControl; /** * A list cell containing messages represented as message controls. * * @author Kai S. K. Engelbart * @since Envoy Client v0.1-beta */ public final class MessageListCell extends AbstractListCell { /** * @param listView the list view inside of which the cell will be displayed * @since Envoy Client v0.1-beta */ public MessageListCell(ListView listView) { super(listView); } @Override protected MessageControl renderItem(Message message) { final var control = new MessageControl(message); listView.widthProperty().addListener((observable, oldValue, newValue) -> adjustPadding(newValue.intValue(), control.isOwnMessage())); adjustPadding((int) listView.getWidth(), control.isOwnMessage()); if (control.isOwnMessage()) setAlignment(Pos.CENTER_RIGHT); else setAlignment(Pos.CENTER_LEFT); return control; } private void adjustPadding(int listWidth, boolean ownMessage) { int padding = 10 + Math.max((listWidth - 1000) / 2, 0); setPadding(ownMessage ? new Insets(3, padding, 3, 0) : new Insets(3, 0, 3, padding)); } }