package ru.testing.client.websocket;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.collections.ObservableList;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.ListCell;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.CheckBoxListCell;
import org.controlsfx.control.IndexedCheckModel;
import org.controlsfx.control.PopOver;
import ru.testing.client.controllers.SendMessagesController;
import ru.testing.client.controllers.TabWsMessagesController;
import ru.testing.client.elements.ContextMenuItems;
/**
* History send message cell factory
*/
public class SendMessagesCellFactory extends CheckBoxListCell<String> {
private ObservableList<String> list;
private TextField sendMsgTextField;
private PopOver sentMsgPopOver;
private IndexedCheckModel<String> checkModel;
public SendMessagesCellFactory(SendMessagesController sendMessagesController,
TabWsMessagesController tabWsMessagesController) {
this.list = sendMessagesController.getList();
sendMsgTextField = tabWsMessagesController.getSendMsgTextField();
sentMsgPopOver = tabWsMessagesController.getSendMessagesPopOver();
checkModel = sendMessagesController.getCheckListView().getCheckModel();
}
@Override
public void updateItem(String message, boolean empty) {
super.setSelectedStateCallback(param -> {
BooleanProperty observable = new SimpleBooleanProperty();
observable.addListener((obs, oldValue, newValue) -> {
if (newValue) {
checkModel.check(param);
} else {
checkModel.clearCheck(param);
}
});
observable.setValue(checkModel.isChecked(param));
return observable;
});
super.updateItem(message, empty);
if (message != null) {
setText(message);
setContextMenu(getSendHistoryContextMenu(this, checkModel));
setOnMouseClicked(event -> {
if (event.getClickCount() > 1) {
String cellText = getText();
if (cellText != null && !cellText.isEmpty() && !sendMsgTextField.isDisable()) {
sendMsgTextField.setText(getText());
sentMsgPopOver.hide();
}
}
});
} else {
setText(null);
setGraphic(null);
}
}
/**
* Context menu for history pop over
*
* @param cell ListCell string
* @return ContextMenu
*/
private ContextMenu getSendHistoryContextMenu(ListCell<String> cell, IndexedCheckModel<String> checkModel) {
ContextMenu contextMenu = new ContextMenu();
ContextMenuItems m = new ContextMenuItems();
contextMenu.getItems().addAll(
m.copySendMsg(cell),
m.clearCheckListView(list, checkModel)
);
return contextMenu;
}
}