Add Ctrl+U and Ctrl+K shortcuts to ChatScene
This commit is contained in:
		@@ -6,6 +6,7 @@ import java.io.*;
 | 
				
			|||||||
import java.nio.file.Files;
 | 
					import java.nio.file.Files;
 | 
				
			||||||
import java.time.LocalDateTime;
 | 
					import java.time.LocalDateTime;
 | 
				
			||||||
import java.time.format.DateTimeFormatter;
 | 
					import java.time.format.DateTimeFormatter;
 | 
				
			||||||
 | 
					import java.util.*;
 | 
				
			||||||
import java.util.logging.*;
 | 
					import java.util.logging.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import javafx.animation.RotateTransition;
 | 
					import javafx.animation.RotateTransition;
 | 
				
			||||||
@@ -24,19 +25,21 @@ import javafx.scene.shape.Rectangle;
 | 
				
			|||||||
import javafx.stage.FileChooser;
 | 
					import javafx.stage.FileChooser;
 | 
				
			||||||
import javafx.util.Duration;
 | 
					import javafx.util.Duration;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import dev.kske.eventbus.*;
 | 
					 | 
				
			||||||
import dev.kske.eventbus.Event;
 | 
					import dev.kske.eventbus.Event;
 | 
				
			||||||
 | 
					import dev.kske.eventbus.EventBus;
 | 
				
			||||||
 | 
					import dev.kske.eventbus.EventListener;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import envoy.data.*;
 | 
					import envoy.data.*;
 | 
				
			||||||
import envoy.data.Attachment.AttachmentType;
 | 
					import envoy.data.Attachment.AttachmentType;
 | 
				
			||||||
import envoy.data.Message.MessageStatus;
 | 
					import envoy.data.Message.MessageStatus;
 | 
				
			||||||
import envoy.event.*;
 | 
					import envoy.event.*;
 | 
				
			||||||
import envoy.event.contact.UserOperation;
 | 
					import envoy.event.contact.*;
 | 
				
			||||||
import envoy.exception.EnvoyException;
 | 
					import envoy.exception.EnvoyException;
 | 
				
			||||||
import envoy.util.EnvoyLog;
 | 
					import envoy.util.EnvoyLog;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import envoy.client.data.*;
 | 
					import envoy.client.data.*;
 | 
				
			||||||
import envoy.client.data.audio.AudioRecorder;
 | 
					import envoy.client.data.audio.AudioRecorder;
 | 
				
			||||||
 | 
					import envoy.client.data.shortcuts.KeyboardMapping;
 | 
				
			||||||
import envoy.client.event.*;
 | 
					import envoy.client.event.*;
 | 
				
			||||||
import envoy.client.net.*;
 | 
					import envoy.client.net.*;
 | 
				
			||||||
import envoy.client.ui.*;
 | 
					import envoy.client.ui.*;
 | 
				
			||||||
@@ -51,7 +54,7 @@ import envoy.client.util.*;
 | 
				
			|||||||
 * @author Kai S. K. Engelbart
 | 
					 * @author Kai S. K. Engelbart
 | 
				
			||||||
 * @since Envoy Client v0.1-beta
 | 
					 * @since Envoy Client v0.1-beta
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public final class ChatScene implements EventListener, Restorable {
 | 
					public final class ChatScene implements EventListener, Restorable, KeyboardMapping {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@FXML
 | 
						@FXML
 | 
				
			||||||
	private ListView<Message> messageList;
 | 
						private ListView<Message> messageList;
 | 
				
			||||||
@@ -346,6 +349,11 @@ public final class ChatScene implements EventListener, Restorable {
 | 
				
			|||||||
		eventBus.removeListener(this);
 | 
							eventBus.removeListener(this);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Event(eventType = AccountDeletion.class)
 | 
				
			||||||
 | 
						private void onAccountDeletion() {
 | 
				
			||||||
 | 
							Platform.runLater(chatList::refresh);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public void onRestore() {
 | 
						public void onRestore() {
 | 
				
			||||||
		updateRemainingCharsLabel();
 | 
							updateRemainingCharsLabel();
 | 
				
			||||||
@@ -871,4 +879,27 @@ public final class ChatScene implements EventListener, Restorable {
 | 
				
			|||||||
			: c -> c.getRecipient().getName().toLowerCase()
 | 
								: c -> c.getRecipient().getName().toLowerCase()
 | 
				
			||||||
				.contains(contactSearch.getText().toLowerCase()));
 | 
									.contains(contactSearch.getText().toLowerCase()));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public Map<KeyCombination, Runnable> getKeyboardShortcuts() {
 | 
				
			||||||
 | 
							final var map = new HashMap<KeyCombination, Runnable>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Delete text before the caret with "Control" + U
 | 
				
			||||||
 | 
							map.put(new KeyCodeCombination(KeyCode.U, KeyCombination.CONTROL_DOWN), () -> {
 | 
				
			||||||
 | 
								messageTextArea
 | 
				
			||||||
 | 
									.setText(messageTextArea.getText().substring(messageTextArea.getCaretPosition()));
 | 
				
			||||||
 | 
								checkPostConditions(false);
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Delete text after the caret with "Control" + K
 | 
				
			||||||
 | 
							map.put(new KeyCodeCombination(KeyCode.K, KeyCombination.CONTROL_DOWN), () -> {
 | 
				
			||||||
 | 
								messageTextArea
 | 
				
			||||||
 | 
									.setText(
 | 
				
			||||||
 | 
										messageTextArea.getText().substring(0, messageTextArea.getCaretPosition()));
 | 
				
			||||||
 | 
								checkPostConditions(false);
 | 
				
			||||||
 | 
								messageTextArea.positionCaret(messageTextArea.getText().length());
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return map;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user