Skip to content

Commit

Permalink
Chat up and down arrow key scrolls over chat channel message history (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
Kimo-s authored Dec 15, 2023
1 parent 47ef44e commit aeabfe0
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@
import javafx.scene.control.TabPane;
import javafx.scene.control.TextInputControl;
import javafx.scene.control.skin.TabPaneSkin;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.paint.Color;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
Expand Down Expand Up @@ -139,12 +141,12 @@ public abstract class AbstractChatTabController extends TabController {
* Messages that arrived before the web view was ready. Those are appended as soon as it is ready.
*/
private final List<ChatMessage> waitingMessages = new ArrayList<>();
private final List<String> userMessageHistory = new ArrayList<>();
private final IntegerProperty unreadMessagesCount = new SimpleIntegerProperty();
protected final ObjectProperty<ChatChannel> chatChannel = new SimpleObjectProperty<>();
protected final ObservableValue<String> channelName = chatChannel.map(ChatChannel::getName);

private final Consumer<ChatMessage> messageListener = this::onChatMessage;

private int lastEntryId;
private boolean isChatReady;

Expand All @@ -154,6 +156,8 @@ public abstract class AbstractChatTabController extends TabController {

private ChatMessage lastMessage;
private WebEngine engine;
private String currentUserMessage = "";
private int curMessageHistoryIndex = 0;

@VisibleForTesting
Pattern mentionPattern;
Expand All @@ -165,7 +169,12 @@ protected void onInitialize() {

initChatView();

messageTextField().setOnKeyPressed(this::onUpOrDownArrowKeyClick);
currentUserMessage = "";
curMessageHistoryIndex = 0;

chatChannel.when(attached).subscribe(((oldValue, newValue) -> {
userMessageHistory.clear();
if (oldValue != null) {
oldValue.openProperty().unbind();
oldValue.removeMessageListener(messageListener);
Expand Down Expand Up @@ -212,6 +221,34 @@ private void clearUnreadIfFocused() {
}
}

private void onUpOrDownArrowKeyClick(KeyEvent event){
if(event.getCode() == KeyCode.DOWN || event.getCode() == KeyCode.UP) {
if(curMessageHistoryIndex == 0) {
currentUserMessage = messageTextField().getText();
}
if(event.getCode() == KeyCode.DOWN) {
curMessageHistoryIndex--;
}
if(event.getCode() == KeyCode.UP) {
curMessageHistoryIndex++;
}

if(curMessageHistoryIndex > 0 && curMessageHistoryIndex <= userMessageHistory.size()) {
messageTextField().setText(userMessageHistory.get(userMessageHistory.size() - curMessageHistoryIndex));
}
if (curMessageHistoryIndex > userMessageHistory.size()) {
curMessageHistoryIndex = userMessageHistory.size();
}
if (curMessageHistoryIndex <= 0) {
curMessageHistoryIndex = 0;
messageTextField().setText(currentUserMessage);
}
messageTextField().positionCaret(messageTextField().getText().length());
} else {
curMessageHistoryIndex = 0;
}
}

/**
* Returns true if this chat tab is currently focused by the user. Returns false if a different tab is selected, the
* user is not in "chat" or if the window has no focus.
Expand Down Expand Up @@ -367,6 +404,13 @@ public void onSendMessage() {
return;
}

if(userMessageHistory.size() >= 50) {
userMessageHistory.remove(0);
userMessageHistory.add(text);
} else {
userMessageHistory.add(text);
}

if (text.startsWith(ACTION_PREFIX)) {
sendAction(messageTextField, text);
} else if (text.startsWith(JOIN_PREFIX)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -400,4 +400,4 @@ protected TextInputControl messageTextField() {
protected WebView getMessagesWebView() {
return messagesWebView;
}
}
}

0 comments on commit aeabfe0

Please sign in to comment.