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 ****
/*
! * Copyright (c) 2013, 2014, 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
--- 1,7 ----
/*
! * 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,41 ****
* questions.
*/
package com.sun.javafx.scene.control.behavior;
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 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;
--- 23,42 ----
* 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 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,111 ****
* 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"));
! }
!
public DateCellBehavior(DateCell dateCell) {
! super(dateCell, DATE_CELL_BINDINGS);
! }
!
! @Override public void callAction(String name) {
! DateCell cell = getControl();
! DatePickerContent dpc = findDatePickerContent(cell);
! if (dpc != null) {
! switch (name) {
! case "SelectDate": dpc.selectDayCell(cell); break;
! default: super.callAction(name);
! }
! return;
}
! super.callAction(name);
}
! @Override public void traverse(final Node node, final Direction dir) {
! boolean rtl = (node.getEffectiveNodeOrientation() == NodeOrientation.RIGHT_TO_LEFT);
! switch (dir) {
! case UP:
! case DOWN:
! case LEFT:
! case RIGHT:
! if (node instanceof DateCell) {
! DatePickerContent dpc = findDatePickerContent(node);
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;
! }
}
}
- super.traverse(node, dir);
}
protected DatePickerContent findDatePickerContent(Node node) {
Node parent = node;
while ((parent = parent.getParent()) != null && !(parent instanceof DatePickerContent));
--- 48,94 ----
* that subclasses implement so that CellSkinBase has API to call.
*
*/
public class DateCellBehavior extends BehaviorBase<DateCell> {
! private final InputMap<DateCell> inputMap;
public DateCellBehavior(DateCell dateCell) {
! super(dateCell);
! 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())
! );
}
!
! @Override public InputMap<DateCell> getInputMap() {
! return inputMap;
}
! private void selectDate() {
! DateCell cell = getNode();
! DatePickerContent dpc = findDatePickerContent(cell);
! dpc.selectDayCell(cell);
! }
! public void traverse(final DateCell cell, final Direction dir) {
! boolean rtl = (cell.getEffectiveNodeOrientation() == NodeOrientation.RIGHT_TO_LEFT);
! DatePickerContent dpc = findDatePickerContent(cell);
if (dpc != null) {
switch (dir) {
! 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;
}
}
}
protected DatePickerContent findDatePickerContent(Node node) {
Node parent = node;
while ((parent = parent.getParent()) != null && !(parent instanceof DatePickerContent));