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));