1 /* 2 * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 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 javafx.scene.control.TitledPane; 29 import javafx.scene.input.MouseEvent; 30 import java.util.ArrayList; 31 import java.util.List; 32 import static javafx.scene.input.KeyCode.ENTER; 33 import static javafx.scene.input.KeyCode.SPACE; 34 35 public class TitledPaneBehavior extends BehaviorBase<TitledPane> { 36 37 private TitledPane titledPane; 38 39 public TitledPaneBehavior(TitledPane pane) { 40 super(pane, TITLEDPANE_BINDINGS); 41 this.titledPane = pane; 42 } 43 44 /*************************************************************************** 45 * * 46 * Key event handling * 47 * * 48 **************************************************************************/ 49 50 private static final String PRESS_ACTION = "Press"; 51 52 protected static final List<KeyBinding> TITLEDPANE_BINDINGS = new ArrayList<KeyBinding>(); 53 static { 54 // ENTER should not be a key binding for TitledPane, as this is the 55 // key reserved for the default button. See RT-40166 for more detail. 56 // TITLEDPANE_BINDINGS.add(new KeyBinding(ENTER, PRESS_ACTION)); 57 TITLEDPANE_BINDINGS.add(new KeyBinding(SPACE, PRESS_ACTION)); 58 } 59 60 @Override protected void callAction(String name) { 61 switch (name) { 62 case PRESS_ACTION: 63 if (titledPane.isCollapsible() && titledPane.isFocused()) { 64 titledPane.setExpanded(!titledPane.isExpanded()); 65 titledPane.requestFocus(); 66 } 67 break; 68 default: 69 super.callAction(name); 70 } 71 } 72 73 /*************************************************************************** 74 * * 75 * Mouse event handling * 76 * * 77 **************************************************************************/ 78 79 @Override public void mousePressed(MouseEvent e) { 80 super.mousePressed(e); 81 TitledPane tp = getControl(); 82 tp.requestFocus(); 83 } 84 85 /************************************************************************** 86 * State and Functions * 87 *************************************************************************/ 88 89 public void expand() { 90 titledPane.setExpanded(true); 91 } 92 93 public void collapse() { 94 titledPane.setExpanded(false); 95 } 96 97 public void toggle() { 98 titledPane.setExpanded(!titledPane.isExpanded()); 99 } 100 101 } 102