diff --git a/src/main/java/fr/insa/clavardator/ui/MainController.java b/src/main/java/fr/insa/clavardator/ui/MainController.java index 378b70c..bc73d82 100644 --- a/src/main/java/fr/insa/clavardator/ui/MainController.java +++ b/src/main/java/fr/insa/clavardator/ui/MainController.java @@ -94,7 +94,7 @@ public class MainController implements Initializable { userListController.addRefreshUserListener(() -> System.out.println("refresh event")); userListController.addUserSelectedListener((user) -> chatController.setRemoteUser(user)); chatController.addAttachmentListener(() -> System.out.println("attach event")); - chatController.addSendListener(() -> System.out.println("send event")); + chatController.addSendListener((text) -> System.out.println("sent : " + text)); toolbarController.addEditListener(() -> { try { openEditUsernameDialog(); diff --git a/src/main/java/fr/insa/clavardator/ui/chat/ChatController.java b/src/main/java/fr/insa/clavardator/ui/chat/ChatController.java index 47bb956..0cbe2f9 100644 --- a/src/main/java/fr/insa/clavardator/ui/chat/ChatController.java +++ b/src/main/java/fr/insa/clavardator/ui/chat/ChatController.java @@ -39,12 +39,13 @@ public class ChatController implements Initializable { chatFooterController.addAttachmentListener(listener); } - public void addSendListener(ButtonPressEvent listener) { + public void addSendListener(ChatFooterController.SendMessageEvent listener) { chatFooterController.addSendListener(listener); } public void setRemoteUser(PeerUser remoteUser) { this.remoteUser = remoteUser; + this.chatFooterController.setRemoteUser(remoteUser); this.chatHeaderController.setRemoteUser(remoteUser); setState(State.LOADING); diff --git a/src/main/java/fr/insa/clavardator/ui/chat/ChatFooterController.java b/src/main/java/fr/insa/clavardator/ui/chat/ChatFooterController.java index 5385f48..0aae845 100644 --- a/src/main/java/fr/insa/clavardator/ui/chat/ChatFooterController.java +++ b/src/main/java/fr/insa/clavardator/ui/chat/ChatFooterController.java @@ -1,12 +1,19 @@ package fr.insa.clavardator.ui.chat; +import com.jfoenix.controls.JFXTextField; import fr.insa.clavardator.ui.ButtonPressEvent; +import fr.insa.clavardator.users.PeerUser; +import javafx.beans.value.ObservableValue; +import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.Initializable; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; import javafx.scene.layout.HBox; import java.net.URL; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.ResourceBundle; @@ -14,31 +21,79 @@ public class ChatFooterController implements Initializable { @FXML private HBox container; + @FXML + private JFXTextField textField; private List attachmentListeners; - private List sendListeners; + private List sendListeners; + + private PeerUser remoteUser; + private HashMap savedText; + public void addAttachmentListener(ButtonPressEvent listener) { attachmentListeners.add(listener); } - public void addSendListener(ButtonPressEvent listener) { + public void addSendListener(SendMessageEvent listener) { sendListeners.add(listener); } public void onAttachmentPress() { attachmentListeners.forEach(ButtonPressEvent::onPress); } - public void onSendPress() { - sendListeners.forEach(ButtonPressEvent::onPress); + public void onSend() { + sendListeners.forEach((l) -> l.onSend(findSavedText())); + textField.setText(""); } public void setEnabled(boolean enabled) { container.setDisable(!enabled); } + private String findSavedText() { + String text = null; + if (remoteUser != null) { + text = savedText.get(remoteUser); + } + return text != null ? text : ""; + } + + private void saveText(String text) { + if (remoteUser != null) { + savedText.put(remoteUser, text); + } + } + + public void onTextChange(ObservableValue observable, String oldText, String newText) { + saveText(newText); + } + @Override public void initialize(URL location, ResourceBundle resources) { + savedText = new HashMap<>(); attachmentListeners = new ArrayList<>(); sendListeners = new ArrayList<>(); + textField.textProperty().addListener(this::onTextChange); + textField.setOnKeyPressed(event -> { + if (event.getCode() == KeyCode.ENTER) { + event.consume(); + if (event.isShiftDown()) { + textField.appendText(System.getProperty("line.separator")); + } else { + if(!textField.getText().isEmpty()){ + onSend(); + } + } + } + }); + } + + public void setRemoteUser(PeerUser remoteUser) { + this.remoteUser = remoteUser; + textField.setText(findSavedText()); + } + + public interface SendMessageEvent { + void onSend(String text); } } diff --git a/src/main/resources/fr/insa/clavardator/ui/chat/chatFooter.fxml b/src/main/resources/fr/insa/clavardator/ui/chat/chatFooter.fxml index 141d155..6114f4d 100644 --- a/src/main/resources/fr/insa/clavardator/ui/chat/chatFooter.fxml +++ b/src/main/resources/fr/insa/clavardator/ui/chat/chatFooter.fxml @@ -12,13 +12,13 @@ - + - +