package ru.testing.client.controllers;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import org.controlsfx.control.CheckListView;
import ru.testing.client.common.objects.SendMessage;
import ru.testing.client.websocket.SendMessagesCellFactory;
import java.util.ArrayList;
import java.util.List;
/**
* Http headers controller
*/
public class SendMessagesController {
private final ObservableList<String> list = FXCollections.observableArrayList();
@FXML
private TextField tfMsgValue;
@FXML
private Button btAddMsg;
@FXML
private Label lbCheckInfo;
@FXML
private Label noMessagesLabel;
@FXML
private CheckListView<String> checkListView;
@FXML
private void initialize() {
// Setup messages list
checkListView.setItems(list);
checkListView.getItems().addListener((ListChangeListener<? super String>) change -> {
if (change.next()) {
int size = list.size();
if (size > 0) {
setListViewVisible(true);
} else {
setListViewVisible(false);
noMessagesLabel.requestFocus();
}
}
});
// Setup new message value and add button
checkTextFieldMessage();
tfMsgValue.textProperty().addListener((observable, oldValue, newValue) -> checkTextFieldMessage());
tfMsgValue.setOnKeyPressed(key -> {
if (key.getCode() == KeyCode.ENTER) {
addMessage();
}
});
}
public void setCheckListViewCellFactory(TabWsMessagesController controller) {
checkListView.setCellFactory(list -> new SendMessagesCellFactory(this, controller));
}
/**
* Add message to check view list
*/
@FXML
public void addMessage() {
String text = tfMsgValue.getText().trim();
if (!text.isEmpty()) {
if (!list.contains(text)) {
list.add(text);
}
tfMsgValue.clear();
tfMsgValue.requestFocus();
}
}
/**
* Get sent messages list with checked status
*
* @return List<SendMessage>
*/
List<SendMessage> getSentMessages() {
List<SendMessage> checkedList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
checkedList.add(i, new SendMessage(checkListView.getCheckModel().isChecked(i), list.get(i)));
}
return checkedList;
}
/**
* Get send message list
*
* @return ObservableList<String>
*/
public ObservableList<String> getList() {
return list;
}
/**
* Get check list view
*
* @return CheckListView<String>
*/
public CheckListView<String> getCheckListView() {
return checkListView;
}
/**
* Show or hide headers list
*
* @param visible boolean visible status
*/
private void setListViewVisible(boolean visible) {
checkListView.setVisible(visible);
checkListView.setManaged(visible);
lbCheckInfo.setVisible(visible);
lbCheckInfo.setManaged(visible);
noMessagesLabel.setVisible(!visible);
noMessagesLabel.setManaged(!visible);
}
/**
* Check text field message value
*/
private void checkTextFieldMessage() {
String text = tfMsgValue.getText().trim();
btAddMsg.setDisable(text.length() <= 0);
}
}