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
|
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 com.sun.javafx.scene.control.inputmap.InputMap;
30 import javafx.scene.input.MouseEvent;
31
32 import static javafx.scene.input.KeyCode.SPACE;
33
34 public class TitledPaneBehavior extends BehaviorBase<TitledPane> {
35
36 private final TitledPane titledPane;
37 private final InputMap<TitledPane> inputMap;
38
39 public TitledPaneBehavior(TitledPane pane) {
40 super(pane);
41 this.titledPane = pane;
42
43 // create a map for titledPane-specific mappings (this reuses the default
44 // InputMap installed on the control, if it is non-null, allowing us to pick up any user-specified mappings)
45 inputMap = createInputMap();
46
47 // add focus traversal mappings
48 addDefaultMapping(inputMap, FocusTraversalInputMap.getFocusTraversalMappings());
49
50 // ENTER should not be a key binding for TitledPane, as this is the
51 // key reserved for the default button. See RT-40166 for more detail.
52 addDefaultMapping(
53 new InputMap.KeyMapping(SPACE, e -> {
54 if (titledPane.isCollapsible() && titledPane.isFocused()) {
55 titledPane.setExpanded(!titledPane.isExpanded());
56 titledPane.requestFocus();
57 }
58 }),
59 new InputMap.MouseMapping(MouseEvent.MOUSE_PRESSED, this::mousePressed)
60 );
61 }
62
63 @Override public InputMap<TitledPane> getInputMap() {
64 return inputMap;
65 }
66
67 /***************************************************************************
68 * *
69 * Key event handling *
70 * *
71 **************************************************************************/
72
73 // private static final String PRESS_ACTION = "Press";
74 //
75 // protected static final List<KeyBinding> TITLEDPANE_BINDINGS = new ArrayList<KeyBinding>();
76 // static {
77 // // ENTER should not be a key binding for TitledPane, as this is the
78 // // key reserved for the default button. See RT-40166 for more detail.
79 // // TITLEDPANE_BINDINGS.add(new KeyBinding(ENTER, PRESS_ACTION));
80 // TITLEDPANE_BINDINGS.add(new KeyBinding(SPACE, PRESS_ACTION));
81 // }
82 //
83 // @Override protected void callAction(String name) {
84 // switch (name) {
85 // case PRESS_ACTION:
86 // if (titledPane.isCollapsible() && titledPane.isFocused()) {
87 // titledPane.setExpanded(!titledPane.isExpanded());
88 // titledPane.requestFocus();
89 // }
90 // break;
91 // default:
92 // super.callAction(name);
93 // }
94 // }
95
96 /***************************************************************************
97 * *
98 * Mouse event handling *
99 * *
100 **************************************************************************/
101
102 public void mousePressed(MouseEvent e) {
103 getNode().requestFocus();
104 }
105
106 /**************************************************************************
107 * State and Functions *
108 *************************************************************************/
109
110 public void expand() {
111 titledPane.setExpanded(true);
112 }
113
114 public void collapse() {
115 titledPane.setExpanded(false);
116 }
117
118 public void toggle() {
119 titledPane.setExpanded(!titledPane.isExpanded());
120 }
121
122 }
123
|