23 package com.realtime.crossfire.jxclient.gui.keybindings;
28 import java.awt.event.KeyEvent;
29 import java.io.BufferedReader;
30 import java.io.BufferedWriter;
31 import java.io.IOException;
32 import java.nio.charset.StandardCharsets;
33 import java.nio.file.Files;
34 import java.nio.file.NoSuchFileException;
35 import java.nio.file.Path;
36 import java.util.Collection;
37 import java.util.TreeSet;
38 import java.util.function.Predicate;
39 import java.util.stream.Collectors;
40 import org.jetbrains.annotations.NotNull;
41 import org.jetbrains.annotations.Nullable;
59 private final Collection<KeyBinding>
keybindings =
new TreeSet<>();
135 if (keyBinding !=
null) {
159 try (BufferedReader reader = Files.newBufferedReader(file, StandardCharsets.UTF_8)) {
161 final String line = reader.readLine();
169 System.err.println(
"ignoring invalid key binding ("+ex.getMessage()+
"): "+line);
173 }
catch (
final NoSuchFileException ignored) {
176 }
catch (
final IOException ex) {
179 System.err.println(
"Cannot read keybindings file "+file+
": "+ex.getMessage());
197 }
catch (
final IOException ex) {
198 System.err.println(
"Cannot write keybindings file "+
fileVersion2+
": "+ex.getMessage());
204 try (BufferedWriter bw = Files.newBufferedWriter(
fileVersion2, StandardCharsets.UTF_8)) {
207 if (keyBinding.isDefault()) {
214 final KeyEvent2 keyEvent = keyBinding.getKeyEvent2();
216 if (code == KeyEvent.VK_UNDEFINED) {
218 bw.write(Integer.toString(keyEvent.
getKeyChar()));
231 }
catch (
final IOException ex) {
232 System.err.println(
"Cannot write keybindings file "+
fileVersion2+
": "+ex.getMessage());
246 if (keyBinding.getKeyEvent2().equals(keyEvent)) {
262 if (line.startsWith(
"char ")) {
263 final String[] tmp = line.substring(5).split(
" +", 2);
264 if (tmp.length != 2) {
269 final char keyChar = (char)Integer.parseInt(tmp[0]);
273 }
catch (
final NumberFormatException ex) {
275 keyBindingException.initCause(ex);
276 throw keyBindingException;
278 }
else if (line.startsWith(
"code ")) {
279 final String[] tmp = line.substring(5).split(
" +", 3);
280 if (tmp.length != 3) {
293 keyBindingException.initCause(ex);
294 throw keyBindingException;
296 if (keyCode == KeyEvent.VK_UNDEFINED) {
303 }
catch (
final NumberFormatException ignored) {
322 if (keyBinding.matchesKeyEvent(e)) {
336 keyBinding.getCommands().execute();
345 public Collection<KeyBinding>
getBindings(@NotNull
final Predicate<KeyBinding> predicate) {
346 return keybindings.stream().filter(predicate).collect(Collectors.toSet());