42 lines
1.4 KiB
Java
42 lines
1.4 KiB
Java
package envoy.client.ui.listcell;
|
|
|
|
import javafx.geometry.Insets;
|
|
import javafx.geometry.Pos;
|
|
import javafx.scene.control.ListView;
|
|
|
|
import envoy.data.Message;
|
|
|
|
/**
|
|
* A list cell containing messages represented as message controls.
|
|
* <p>
|
|
* Project: <strong>envoy-client</strong><br>
|
|
* File: <strong>MessageListCell.java</strong><br>
|
|
* Created: <strong>18.07.2020</strong><br>
|
|
*
|
|
* @author Kai S. K. Engelbart
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public final class MessageListCell extends AbstractListCell<Message, MessageControl> {
|
|
|
|
/**
|
|
* @param listView the list view inside of which the cell will be displayed
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public MessageListCell(ListView<? extends Message> 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(0, padding, 6, 0) : new Insets(0, 0, 6, padding));
|
|
}
|
|
}
|