modules/controls/src/main/java/javafx/scene/control/skin/ListCellSkin.java

Print this page
rev 9240 : 8076423: JEP 253: Prepare JavaFX UI Controls & CSS APIs for Modularization

*** 21,67 **** * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ ! package com.sun.javafx.scene.control.skin; import javafx.geometry.Orientation; import javafx.scene.control.ListCell; import javafx.scene.control.ListView; import com.sun.javafx.scene.control.behavior.ListCellBehavior; ! public class ListCellSkin<T> extends CellSkinBase<ListCell<T>, ListCellBehavior<T>> { private double fixedCellSize; private boolean fixedCellSizeEnabled; public ListCellSkin(ListCell<T> control) { ! super(control, new ListCellBehavior<T>(control)); this.fixedCellSize = control.getListView().getFixedCellSize(); this.fixedCellSizeEnabled = fixedCellSize > 0; ! registerChangeListener(control.getListView().fixedCellSizeProperty(), "FIXED_CELL_SIZE"); ! } ! ! @Override protected void handleControlPropertyChanged(String p) { ! super.handleControlPropertyChanged(p); ! if ("FIXED_CELL_SIZE".equals(p)) { this.fixedCellSize = getSkinnable().getListView().getFixedCellSize(); this.fixedCellSizeEnabled = fixedCellSize > 0; } } @Override protected double computePrefWidth(double height, double topInset, double rightInset, double bottomInset, double leftInset) { double pref = super.computePrefWidth(height, topInset, rightInset, bottomInset, leftInset); ListView<T> listView = getSkinnable().getListView(); return listView == null ? 0 : listView.getOrientation() == Orientation.VERTICAL ? pref : Math.max(pref, getCellSize()); } @Override protected double computePrefHeight(double width, double topInset, double rightInset, double bottomInset, double leftInset) { if (fixedCellSizeEnabled) { return fixedCellSize; } --- 21,118 ---- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ ! package javafx.scene.control.skin; + import com.sun.javafx.scene.control.behavior.BehaviorBase; import javafx.geometry.Orientation; + import javafx.scene.Node; + import javafx.scene.control.Accordion; + import javafx.scene.control.Button; + import javafx.scene.control.Control; import javafx.scene.control.ListCell; import javafx.scene.control.ListView; import com.sun.javafx.scene.control.behavior.ListCellBehavior; ! /** ! * Default skin implementation for the {@link ListCell} control. ! * ! * @see ListCell ! * @since 9 ! */ ! public class ListCellSkin<T> extends CellSkinBase<ListCell<T>> { ! ! /*************************************************************************** ! * * ! * Private fields * ! * * ! **************************************************************************/ private double fixedCellSize; private boolean fixedCellSizeEnabled; + private final BehaviorBase<ListCell<T>> behavior; + + + /*************************************************************************** + * * + * Constructors * + * * + **************************************************************************/ + + /** + * Creates a new ListCellSkin instance, installing the necessary child + * nodes into the Control {@link Control#getChildren() children} list, as + * well as the necessary input mappings for handling key, mouse, etc events. + * + * @param control The control that this skin should be installed onto. + */ public ListCellSkin(ListCell<T> control) { ! super(control); ! ! // install default input map for the ListCell control ! behavior = new ListCellBehavior<>(control); ! // control.setInputMap(behavior.getInputMap()); this.fixedCellSize = control.getListView().getFixedCellSize(); this.fixedCellSizeEnabled = fixedCellSize > 0; ! registerChangeListener(control.getListView().fixedCellSizeProperty(), e -> { this.fixedCellSize = getSkinnable().getListView().getFixedCellSize(); this.fixedCellSizeEnabled = fixedCellSize > 0; + }); + } + + + + /*************************************************************************** + * * + * Public API * + * * + **************************************************************************/ + + /** {@inheritDoc} */ + @Override public void dispose() { + super.dispose(); + + if (behavior != null) { + behavior.dispose(); } } + /** {@inheritDoc} */ @Override protected double computePrefWidth(double height, double topInset, double rightInset, double bottomInset, double leftInset) { double pref = super.computePrefWidth(height, topInset, rightInset, bottomInset, leftInset); ListView<T> listView = getSkinnable().getListView(); return listView == null ? 0 : listView.getOrientation() == Orientation.VERTICAL ? pref : Math.max(pref, getCellSize()); } + /** {@inheritDoc} */ @Override protected double computePrefHeight(double width, double topInset, double rightInset, double bottomInset, double leftInset) { if (fixedCellSizeEnabled) { return fixedCellSize; }
*** 70,87 **** --- 121,140 ---- final double cellSize = getCellSize(); final double prefHeight = cellSize == DEFAULT_CELL_SIZE ? super.computePrefHeight(width, topInset, rightInset, bottomInset, leftInset) : cellSize; return prefHeight; } + /** {@inheritDoc} */ @Override protected double computeMinHeight(double width, double topInset, double rightInset, double bottomInset, double leftInset) { if (fixedCellSizeEnabled) { return fixedCellSize; } return super.computeMinHeight(width, topInset, rightInset, bottomInset, leftInset); } + /** {@inheritDoc} */ @Override protected double computeMaxHeight(double width, double topInset, double rightInset, double bottomInset, double leftInset) { if (fixedCellSizeEnabled) { return fixedCellSize; }