modules/controls/src/main/java/javafx/scene/control/skin/ButtonBarSkin.java
Print this page
rev 9240 : 8076423: JEP 253: Prepare JavaFX UI Controls & CSS APIs for Modularization
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 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
@@ -20,35 +20,41 @@
*
* 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;
+package javafx.scene.control.skin;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import com.sun.javafx.scene.control.Properties;
+import com.sun.javafx.scene.control.behavior.BehaviorBase;
import javafx.beans.InvalidationListener;
import javafx.beans.property.ObjectProperty;
import javafx.collections.ListChangeListener;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonBar;
import javafx.scene.control.ButtonBar.ButtonData;
+import javafx.scene.control.Control;
+import javafx.scene.control.SkinBase;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.Region;
-import com.sun.javafx.scene.control.behavior.BehaviorBase;
-import com.sun.javafx.scene.control.behavior.KeyBinding;
-
-public class ButtonBarSkin extends BehaviorSkinBase<ButtonBar, BehaviorBase<ButtonBar>> {
+/**
+ * Default skin implementation for the {@link ButtonBar} control.
+ *
+ * @see ButtonBar
+ * @since 9
+ */
+public class ButtonBarSkin extends SkinBase<ButtonBar> {
/**************************************************************************
*
* Static fields
*
@@ -56,16 +62,10 @@
private static final double GAP_SIZE = 10;
private static final String CATEGORIZED_TYPES = "LRHEYNXBIACO"; //$NON-NLS-1$
- // represented as a ButtonData
- public static final String BUTTON_DATA_PROPERTY = "javafx.scene.control.ButtonBar.ButtonData"; //$NON-NLS-1$
-
- // allows to exclude button from uniform resizing
- public static final String BUTTON_SIZE_INDEPENDENCE = "javafx.scene.control.ButtonBar.independentSize"; //$NON-NLS-1$
-
// pick an arbitrary number
private static final double DO_NOT_CHANGE_SIZE = Double.MAX_VALUE - 100;
/**************************************************************************
@@ -73,27 +73,33 @@
* fields
*
**************************************************************************/
private HBox layout;
-
private InvalidationListener buttonDataListener = o -> layoutButtons();
/**************************************************************************
*
* Constructors
*
**************************************************************************/
+ /**
+ * Creates a new ButtonBarSkin instance, installing the necessary child
+ * nodes into the Control {@link Control#getChildren() children} list, as
+ * well as the necessary {@link Node#getInputMap() input mappings} for
+ * handling key, mouse, etc events.
+ *
+ * @param control The control that this skin should be installed onto.
+ */
public ButtonBarSkin(final ButtonBar control) {
- super(control, new BehaviorBase<>(control, Collections.<KeyBinding> emptyList()));
+ super(control);
this.layout = new HBox(GAP_SIZE) {
- @Override
- protected void layoutChildren() {
+ @Override protected void layoutChildren() {
// has to be called first or layout is not correct sometimes
resizeButtons();
super.layoutChildren();
}
};
@@ -110,20 +116,28 @@
updateButtonListeners(c.getAddedSubList(), true);
}
layoutButtons();
});
- registerChangeListener(control.buttonOrderProperty(), "BUTTON_ORDER"); //$NON-NLS-1$
- registerChangeListener(control.buttonMinWidthProperty(), "BUTTON_MIN_WIDTH"); //$NON-NLS-1$
+ registerChangeListener(control.buttonOrderProperty(), e -> layoutButtons());
+ registerChangeListener(control.buttonMinWidthProperty(), e -> resizeButtons());
}
+
+
+ /**************************************************************************
+ *
+ * Implementation
+ *
+ **************************************************************************/
+
private void updateButtonListeners(List<? extends Node> list, boolean buttonsAdded) {
if (list != null) {
for (Node n : list) {
final Map<Object, Object> properties = n.getProperties();
- if (properties.containsKey(ButtonBarSkin.BUTTON_DATA_PROPERTY)) {
- ObjectProperty<ButtonData> property = (ObjectProperty<ButtonData>) properties.get(ButtonBarSkin.BUTTON_DATA_PROPERTY);
+ if (properties.containsKey(Properties.BUTTON_DATA_PROPERTY)) {
+ ObjectProperty<ButtonData> property = (ObjectProperty<ButtonData>) properties.get(Properties.BUTTON_DATA_PROPERTY);
if (property != null) {
if (buttonsAdded) {
property.addListener(buttonDataListener);
} else {
property.removeListener(buttonDataListener);
@@ -132,36 +146,10 @@
}
}
}
}
-
- /**************************************************************************
- *
- * Overriding public API
- *
- **************************************************************************/
-
- @Override protected void handleControlPropertyChanged(String p) {
- super.handleControlPropertyChanged(p);
-
- if ("BUTTON_ORDER".equals(p)) { //$NON-NLS-1$
- layoutButtons();
- } else if ("BUTTON_MIN_WIDTH".equals(p)) { //$NON-NLS-1$
-// layoutButtons();
- resizeButtons();
- }
- }
-
-
-
- /**************************************************************************
- *
- * Implementation
- *
- **************************************************************************/
-
private void layoutButtons() {
final ButtonBar buttonBar = getSkinnable();
final List<? extends Node> buttons = buttonBar.getButtons();
final double buttonMinWidth = buttonBar.getButtonMinWidth();