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.skin;
27
28 import javafx.geometry.Orientation;
29 import javafx.scene.control.ListCell;
30 import javafx.scene.control.ListView;
31
32 import com.sun.javafx.scene.control.behavior.ListCellBehavior;
33
34 public class ListCellSkin<T> extends CellSkinBase<ListCell<T>, ListCellBehavior<T>> {
35
36 private double fixedCellSize;
37 private boolean fixedCellSizeEnabled;
38
39 public ListCellSkin(ListCell<T> control) {
40 super(control, new ListCellBehavior<T>(control));
41
42 this.fixedCellSize = control.getListView().getFixedCellSize();
43 this.fixedCellSizeEnabled = fixedCellSize > 0;
44
45 registerChangeListener(control.getListView().fixedCellSizeProperty(), "FIXED_CELL_SIZE");
46 }
47
48 @Override protected void handleControlPropertyChanged(String p) {
49 super.handleControlPropertyChanged(p);
50 if ("FIXED_CELL_SIZE".equals(p)) {
51 this.fixedCellSize = getSkinnable().getListView().getFixedCellSize();
52 this.fixedCellSizeEnabled = fixedCellSize > 0;
53 }
54 }
55
56 @Override protected double computePrefWidth(double height, double topInset, double rightInset, double bottomInset, double leftInset) {
57 double pref = super.computePrefWidth(height, topInset, rightInset, bottomInset, leftInset);
58 ListView<T> listView = getSkinnable().getListView();
59 return listView == null ? 0 :
60 listView.getOrientation() == Orientation.VERTICAL ? pref : Math.max(pref, getCellSize());
61 }
62
63 @Override protected double computePrefHeight(double width, double topInset, double rightInset, double bottomInset, double leftInset) {
64 if (fixedCellSizeEnabled) {
65 return fixedCellSize;
66 }
67
68 // Added the comparison between the default cell size and the requested
69 // cell size to prevent the issue identified in RT-19873.
70 final double cellSize = getCellSize();
71 final double prefHeight = cellSize == DEFAULT_CELL_SIZE ? super.computePrefHeight(width, topInset, rightInset, bottomInset, leftInset) : cellSize;
72 return prefHeight;
73 }
74
75 @Override protected double computeMinHeight(double width, double topInset, double rightInset, double bottomInset, double leftInset) {
76 if (fixedCellSizeEnabled) {
77 return fixedCellSize;
78 }
79
80 return super.computeMinHeight(width, topInset, rightInset, bottomInset, leftInset);
81 }
82
83 @Override protected double computeMaxHeight(double width, double topInset, double rightInset, double bottomInset, double leftInset) {
84 if (fixedCellSizeEnabled) {
85 return fixedCellSize;
86 }
87
88 return super.computeMaxHeight(width, topInset, rightInset, bottomInset, leftInset);
89 }
90 }
|
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 javafx.scene.control.skin;
27
28 import com.sun.javafx.scene.control.behavior.BehaviorBase;
29 import javafx.geometry.Orientation;
30 import javafx.scene.Node;
31 import javafx.scene.control.Accordion;
32 import javafx.scene.control.Button;
33 import javafx.scene.control.Control;
34 import javafx.scene.control.ListCell;
35 import javafx.scene.control.ListView;
36
37 import com.sun.javafx.scene.control.behavior.ListCellBehavior;
38
39 /**
40 * Default skin implementation for the {@link ListCell} control.
41 *
42 * @see ListCell
43 * @since 9
44 */
45 public class ListCellSkin<T> extends CellSkinBase<ListCell<T>> {
46
47 /***************************************************************************
48 * *
49 * Private fields *
50 * *
51 **************************************************************************/
52
53 private double fixedCellSize;
54 private boolean fixedCellSizeEnabled;
55 private final BehaviorBase<ListCell<T>> behavior;
56
57
58
59 /***************************************************************************
60 * *
61 * Constructors *
62 * *
63 **************************************************************************/
64
65 /**
66 * Creates a new ListCellSkin instance, installing the necessary child
67 * nodes into the Control {@link Control#getChildren() children} list, as
68 * well as the necessary input mappings for handling key, mouse, etc events.
69 *
70 * @param control The control that this skin should be installed onto.
71 */
72 public ListCellSkin(ListCell<T> control) {
73 super(control);
74
75 // install default input map for the ListCell control
76 behavior = new ListCellBehavior<>(control);
77 // control.setInputMap(behavior.getInputMap());
78
79 this.fixedCellSize = control.getListView().getFixedCellSize();
80 this.fixedCellSizeEnabled = fixedCellSize > 0;
81
82 registerChangeListener(control.getListView().fixedCellSizeProperty(), e -> {
83 this.fixedCellSize = getSkinnable().getListView().getFixedCellSize();
84 this.fixedCellSizeEnabled = fixedCellSize > 0;
85 });
86 }
87
88
89
90 /***************************************************************************
91 * *
92 * Public API *
93 * *
94 **************************************************************************/
95
96 /** {@inheritDoc} */
97 @Override public void dispose() {
98 super.dispose();
99
100 if (behavior != null) {
101 behavior.dispose();
102 }
103 }
104
105 /** {@inheritDoc} */
106 @Override protected double computePrefWidth(double height, double topInset, double rightInset, double bottomInset, double leftInset) {
107 double pref = super.computePrefWidth(height, topInset, rightInset, bottomInset, leftInset);
108 ListView<T> listView = getSkinnable().getListView();
109 return listView == null ? 0 :
110 listView.getOrientation() == Orientation.VERTICAL ? pref : Math.max(pref, getCellSize());
111 }
112
113 /** {@inheritDoc} */
114 @Override protected double computePrefHeight(double width, double topInset, double rightInset, double bottomInset, double leftInset) {
115 if (fixedCellSizeEnabled) {
116 return fixedCellSize;
117 }
118
119 // Added the comparison between the default cell size and the requested
120 // cell size to prevent the issue identified in RT-19873.
121 final double cellSize = getCellSize();
122 final double prefHeight = cellSize == DEFAULT_CELL_SIZE ? super.computePrefHeight(width, topInset, rightInset, bottomInset, leftInset) : cellSize;
123 return prefHeight;
124 }
125
126 /** {@inheritDoc} */
127 @Override protected double computeMinHeight(double width, double topInset, double rightInset, double bottomInset, double leftInset) {
128 if (fixedCellSizeEnabled) {
129 return fixedCellSize;
130 }
131
132 return super.computeMinHeight(width, topInset, rightInset, bottomInset, leftInset);
133 }
134
135 /** {@inheritDoc} */
136 @Override protected double computeMaxHeight(double width, double topInset, double rightInset, double bottomInset, double leftInset) {
137 if (fixedCellSizeEnabled) {
138 return fixedCellSize;
139 }
140
141 return super.computeMaxHeight(width, topInset, rightInset, bottomInset, leftInset);
142 }
143 }
|