8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package com.sun.javafx.scene.control.behavior;
27
28 import com.sun.javafx.scene.control.Properties;
29 import javafx.scene.Node;
30 import javafx.scene.Parent;
31
32 import javafx.scene.Scene;
33 import javafx.scene.control.skin.ComboBoxPopupControl;
34 import javafx.scene.input.KeyEvent;
35
36 import javafx.beans.value.ChangeListener;
37 import javafx.event.Event;
38 import javafx.event.EventDispatcher;
39 import javafx.event.EventHandler;
40 import javafx.scene.input.MouseEvent;
41
42 public class TwoLevelFocusListBehavior extends TwoLevelFocusBehavior {
43
44 public TwoLevelFocusListBehavior(Node node) {
45
46 tlNode = node;
47
68
69 /*
70 ** don't allow the Node handle a key event if it is in externalFocus mode.
71 ** the only keyboard actions allowed are the navigation keys......
72 */
73 final EventDispatcher preemptiveEventDispatcher = (event, tail) -> {
74
75 // block the event from being passed down to children
76 if (event instanceof KeyEvent && event.getEventType() == KeyEvent.KEY_PRESSED) {
77 if (!((KeyEvent)event).isMetaDown() && !((KeyEvent)event).isControlDown() && !((KeyEvent)event).isAltDown()) {
78 if (isExternalFocus()) {
79 //
80 // don't let the behaviour leak any navigation keys when
81 // we're not in blocking mode....
82 //
83 Object obj = event.getTarget();
84
85 switch (((KeyEvent)event).getCode()) {
86 case TAB :
87 if (((KeyEvent)event).isShiftDown()) {
88 ((Node)obj).impl_traverse(com.sun.javafx.scene.traversal.Direction.PREVIOUS);
89 }
90 else {
91 ((Node)obj).impl_traverse(com.sun.javafx.scene.traversal.Direction.NEXT);
92 }
93 event.consume();
94 break;
95 case UP :
96 ((Node)obj).impl_traverse(com.sun.javafx.scene.traversal.Direction.UP);
97 event.consume();
98 break;
99 case DOWN :
100 ((Node)obj).impl_traverse(com.sun.javafx.scene.traversal.Direction.DOWN);
101 event.consume();
102 break;
103 case LEFT :
104 ((Node)obj).impl_traverse(com.sun.javafx.scene.traversal.Direction.LEFT);
105 event.consume();
106 break;
107 case RIGHT :
108 ((Node)obj).impl_traverse(com.sun.javafx.scene.traversal.Direction.RIGHT);
109 event.consume();
110 break;
111 case ENTER :
112 setExternalFocus(false);
113 event.consume();
114 break;
115 default :
116 // this'll kill mnemonics.... unless!
117 Scene s = tlNode.getScene();
118 Event.fireEvent(s, event);
119 event.consume();
120 break;
121 }
122 }
123 }
124 }
125 return event;
126 };
127
128 final EventDispatcher tlfEventDispatcher = (event, tail) -> {
|
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package com.sun.javafx.scene.control.behavior;
27
28 import com.sun.javafx.scene.NodeHelper;
29 import com.sun.javafx.scene.control.Properties;
30 import javafx.scene.Node;
31 import javafx.scene.Parent;
32
33 import javafx.scene.Scene;
34 import javafx.scene.control.skin.ComboBoxPopupControl;
35 import javafx.scene.input.KeyEvent;
36
37 import javafx.beans.value.ChangeListener;
38 import javafx.event.Event;
39 import javafx.event.EventDispatcher;
40 import javafx.event.EventHandler;
41 import javafx.scene.input.MouseEvent;
42
43 public class TwoLevelFocusListBehavior extends TwoLevelFocusBehavior {
44
45 public TwoLevelFocusListBehavior(Node node) {
46
47 tlNode = node;
48
69
70 /*
71 ** don't allow the Node handle a key event if it is in externalFocus mode.
72 ** the only keyboard actions allowed are the navigation keys......
73 */
74 final EventDispatcher preemptiveEventDispatcher = (event, tail) -> {
75
76 // block the event from being passed down to children
77 if (event instanceof KeyEvent && event.getEventType() == KeyEvent.KEY_PRESSED) {
78 if (!((KeyEvent)event).isMetaDown() && !((KeyEvent)event).isControlDown() && !((KeyEvent)event).isAltDown()) {
79 if (isExternalFocus()) {
80 //
81 // don't let the behaviour leak any navigation keys when
82 // we're not in blocking mode....
83 //
84 Object obj = event.getTarget();
85
86 switch (((KeyEvent)event).getCode()) {
87 case TAB :
88 if (((KeyEvent)event).isShiftDown()) {
89 NodeHelper.traverse((Node) obj, com.sun.javafx.scene.traversal.Direction.PREVIOUS);
90 }
91 else {
92 NodeHelper.traverse((Node) obj, com.sun.javafx.scene.traversal.Direction.NEXT);
93 }
94 event.consume();
95 break;
96 case UP :
97 NodeHelper.traverse((Node) obj, com.sun.javafx.scene.traversal.Direction.UP);
98 event.consume();
99 break;
100 case DOWN :
101 NodeHelper.traverse((Node) obj, com.sun.javafx.scene.traversal.Direction.DOWN);
102 event.consume();
103 break;
104 case LEFT :
105 NodeHelper.traverse((Node) obj, com.sun.javafx.scene.traversal.Direction.LEFT);
106 event.consume();
107 break;
108 case RIGHT :
109 NodeHelper.traverse((Node) obj, com.sun.javafx.scene.traversal.Direction.RIGHT);
110 event.consume();
111 break;
112 case ENTER :
113 setExternalFocus(false);
114 event.consume();
115 break;
116 default :
117 // this'll kill mnemonics.... unless!
118 Scene s = tlNode.getScene();
119 Event.fireEvent(s, event);
120 event.consume();
121 break;
122 }
123 }
124 }
125 }
126 return event;
127 };
128
129 final EventDispatcher tlfEventDispatcher = (event, tail) -> {
|