package com.kodcu.keyboard;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.scene.input.KeyEvent;
import java.util.Arrays;
import java.util.Objects;
import java.util.function.Predicate;
import static javafx.scene.input.KeyCombination.SHORTCUT_DOWN;
/**
* Created by usta on 01.07.2016.
*/
public class KeyHelper {
private static final KeyPairs UNDEFINED = new KeyPairs(KeyCode.UNDEFINED);
private static final KeyPairs CONTEXT_MENU = new KeyPairs(KeyCode.CONTEXT_MENU);
private static final KeyPairs F2 = new KeyPairs(KeyCode.F2);
private static final KeyPairs COPY = new KeyPairs(KeyCode.C, SHORTCUT_DOWN);
private static final KeyPairs DELETE = new KeyPairs(KeyCode.DELETE);
private static final KeyPairs ENTER = new KeyPairs(KeyCode.ENTER);
private static final KeyPairs UP = new KeyPairs(KeyCode.UP, KeyCode.KP_UP);
private static final KeyPairs DOWN = new KeyPairs(KeyCode.DOWN, KeyCode.KP_DOWN);
private static final KeyPairs BACK_SPACE = new KeyPairs(KeyCode.BACK_SPACE);
private static final KeyPairs FILE_LEGALS = new KeyPairs(KeyCode.SPACE, KeyCode.PERIOD, KeyCode.DECIMAL, KeyCode.MINUS, KeyCode.DEAD_TILDE, KeyCode.DOLLAR);
public static boolean isBackSpace(KeyEvent event) {
return BACK_SPACE.match(event);
}
public static boolean isUp(KeyEvent event) {
return UP.match(event);
}
public static boolean isContextMenu(KeyEvent event) {
return CONTEXT_MENU.match(event);
}
public static boolean isDown(KeyEvent event) {
return DOWN.match(event);
}
// TODO: review it
public static boolean isWord(KeyEvent event) {
KeyCode keyCode = event.getCode();
return keyCode.isLetterKey() || keyCode.isDigitKey() || FILE_LEGALS.match(event) || keyCode == KeyCode.UNDEFINED;
}
public static boolean isEnter(KeyEvent event) {
boolean enter = false;
enter = ENTER.match(event);
if (!enter) {
if (isUndefined(event)) {
String character = event.getCharacter();
if (character.matches("\\R")) {
enter = true;
}
}
}
return enter;
}
public static boolean isUndefined(KeyEvent event) {
return UNDEFINED.match(event);
}
public static boolean isDelete(KeyEvent event) {
return DELETE.match(event);
}
// TODO: review it
public static boolean isAnyDown(KeyEvent event) {
return event.isShortcutDown() || event.isShiftDown() || event.isControlDown() || event.isAltDown();
}
public static boolean isCopy(KeyEvent event) {
return COPY.match(event) || event.getCode() == KeyCode.COPY;
}
public static boolean isF2(KeyEvent event) {
return F2.match(event);
}
}