1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package cz.zcu.mre.sparkle.gui.tools;
21
22 import javafx.event.EventHandler;
23 import javafx.scene.Node;
24 import javafx.scene.input.KeyCode;
25 import javafx.scene.input.KeyEvent;
26
27
28
29
30
31
32
33
34
35 public abstract class ShortCutHandler
36 implements EventHandler<KeyEvent> {
37
38 public enum Modifier {
39 CONTROL, ALT, SHIFT, META, SHORTCUT
40 }
41
42 private final KeyCode keyCode;
43 private final Modifier[] modifiers;
44
45 public ShortCutHandler(final KeyCode keyCode, final Modifier... modifiers) {
46 this.keyCode = keyCode;
47 this.modifiers = modifiers;
48 }
49
50
51
52
53
54
55 public final void attach(final Node node) {
56 node.addEventFilter(KeyEvent.KEY_PRESSED, this);
57 }
58
59
60
61
62
63
64 public final void detach(final Node node) {
65 node.removeEventFilter(KeyEvent.KEY_PRESSED, this);
66 }
67
68 @Override
69 public final void handle(final KeyEvent event) {
70 if (event.isConsumed() || (event.getCode() != keyCode)) {
71 return;
72 }
73 for (final ShortCutHandler.Modifier modifier : modifiers) {
74 switch (modifier) {
75 case ALT:
76 if (!event.isAltDown()) {
77 return;
78 }
79 break;
80 case CONTROL:
81 if (!event.isControlDown()) {
82 return;
83 }
84 break;
85 case SHIFT:
86 if (!event.isShiftDown()) {
87 return;
88 }
89 break;
90 case META:
91 if (!event.isMetaDown()) {
92 return;
93 }
94 break;
95 case SHORTCUT:
96 if (!event.isShortcutDown()) {
97 return;
98 }
99 default:
100 break;
101 }
102 }
103
104 if (handle(event.getSource())) {
105 event.consume();
106 }
107 }
108
109
110
111
112
113
114
115
116
117 protected abstract boolean handle(final Object source);
118 }