modules/controls/src/main/java/com/sun/javafx/scene/control/behavior/DateCellBehavior.java
Print this page
rev 9240 : 8076423: JEP 253: Prepare JavaFX UI Controls & CSS APIs for Modularization
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
@@ -23,19 +23,20 @@
* questions.
*/
package com.sun.javafx.scene.control.behavior;
+import com.sun.javafx.scene.traversal.Direction;
import javafx.geometry.NodeOrientation;
import javafx.scene.Node;
import javafx.scene.control.DateCell;
-import java.util.ArrayList;
-import java.util.List;
-import com.sun.javafx.scene.control.skin.DatePickerContent;
-import com.sun.javafx.scene.traversal.Direction;
-import static java.time.temporal.ChronoUnit.DAYS;
-import static java.time.temporal.ChronoUnit.WEEKS;
+
+import com.sun.javafx.scene.control.DatePickerContent;
+import com.sun.javafx.scene.control.inputmap.InputMap;
+
+import java.time.temporal.ChronoUnit;
+
import static javafx.scene.input.KeyCode.DOWN;
import static javafx.scene.input.KeyCode.ENTER;
import static javafx.scene.input.KeyCode.LEFT;
import static javafx.scene.input.KeyCode.RIGHT;
import static javafx.scene.input.KeyCode.SPACE;
@@ -47,65 +48,47 @@
* that subclasses implement so that CellSkinBase has API to call.
*
*/
public class DateCellBehavior extends BehaviorBase<DateCell> {
- /**************************************************************************
- * Setup KeyBindings *
- *************************************************************************/
- protected static final List<KeyBinding> DATE_CELL_BINDINGS = new ArrayList<KeyBinding>();
- static {
- DATE_CELL_BINDINGS.add(new KeyBinding(UP, "TraverseUp"));
- DATE_CELL_BINDINGS.add(new KeyBinding(DOWN, "TraverseDown"));
- DATE_CELL_BINDINGS.add(new KeyBinding(LEFT, "TraverseLeft"));
- DATE_CELL_BINDINGS.add(new KeyBinding(RIGHT, "TraverseRight"));
- DATE_CELL_BINDINGS.add(new KeyBinding(ENTER, KEY_RELEASED, "SelectDate"));
- DATE_CELL_BINDINGS.add(new KeyBinding(SPACE, KEY_RELEASED, "SelectDate"));
- }
-
+ private final InputMap<DateCell> inputMap;
public DateCellBehavior(DateCell dateCell) {
- super(dateCell, DATE_CELL_BINDINGS);
- }
-
- @Override public void callAction(String name) {
- DateCell cell = getControl();
- DatePickerContent dpc = findDatePickerContent(cell);
+ super(dateCell);
- if (dpc != null) {
- switch (name) {
- case "SelectDate": dpc.selectDayCell(cell); break;
- default: super.callAction(name);
- }
- return;
+ inputMap = createInputMap();
+ addDefaultMapping(inputMap,
+ new InputMap.KeyMapping(UP, e -> traverse(dateCell, Direction.UP)),
+ new InputMap.KeyMapping(DOWN, e -> traverse(dateCell, Direction.DOWN)),
+ new InputMap.KeyMapping(LEFT, e -> traverse(dateCell, Direction.LEFT)),
+ new InputMap.KeyMapping(RIGHT, e -> traverse(dateCell, Direction.RIGHT)),
+ new InputMap.KeyMapping(ENTER, KEY_RELEASED, e -> selectDate()),
+ new InputMap.KeyMapping(SPACE, KEY_RELEASED, e -> selectDate())
+ );
}
- super.callAction(name);
+
+ @Override public InputMap<DateCell> getInputMap() {
+ return inputMap;
}
- @Override public void traverse(final Node node, final Direction dir) {
- boolean rtl = (node.getEffectiveNodeOrientation() == NodeOrientation.RIGHT_TO_LEFT);
+ private void selectDate() {
+ DateCell cell = getNode();
+ DatePickerContent dpc = findDatePickerContent(cell);
+ dpc.selectDayCell(cell);
+ }
- switch (dir) {
- case UP:
- case DOWN:
- case LEFT:
- case RIGHT:
- if (node instanceof DateCell) {
- DatePickerContent dpc = findDatePickerContent(node);
+ public void traverse(final DateCell cell, final Direction dir) {
+ boolean rtl = (cell.getEffectiveNodeOrientation() == NodeOrientation.RIGHT_TO_LEFT);
+ DatePickerContent dpc = findDatePickerContent(cell);
if (dpc != null) {
- DateCell cell = (DateCell)node;
switch (dir) {
- case UP: dpc.goToDayCell(cell, -1, WEEKS, true); break;
- case DOWN: dpc.goToDayCell(cell, +1, WEEKS, true); break;
- case LEFT: dpc.goToDayCell(cell, rtl ? +1 : -1, DAYS, true); break;
- case RIGHT: dpc.goToDayCell(cell, rtl ? -1 : +1, DAYS, true); break;
- }
- return;
- }
+ case UP: dpc.goToDayCell(cell, -1, ChronoUnit.WEEKS, true); break;
+ case DOWN: dpc.goToDayCell(cell, +1, ChronoUnit.WEEKS, true); break;
+ case LEFT: dpc.goToDayCell(cell, rtl ? +1 : -1, ChronoUnit.DAYS, true); break;
+ case RIGHT: dpc.goToDayCell(cell, rtl ? -1 : +1, ChronoUnit.DAYS, true); break;
}
}
- super.traverse(node, dir);
}
protected DatePickerContent findDatePickerContent(Node node) {
Node parent = node;
while ((parent = parent.getParent()) != null && !(parent instanceof DatePickerContent));