--- old/functional/ControlsTests/src/javafx/scene/control/test/utils/ptables/NodeControllerFactory.java 2016-12-09 13:28:00.838662283 +0300 +++ new/functional/ControlsTests/src/javafx/scene/control/test/utils/ptables/NodeControllerFactory.java 2016-12-09 13:28:00.786661817 +0300 @@ -1,221 +1,239 @@ -/* - * Copyright (c) 2014, 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 - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * 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.test.utils.ptables; - -import java.util.logging.Level; -import java.util.logging.Logger; -import javafx.event.ActionEvent; -import javafx.event.EventHandler; -import javafx.scene.Node; -import javafx.scene.control.*; -import javafx.scene.layout.FlowPane; -import javafx.scene.layout.HBox; -import javafx.scene.layout.VBox; - -/** - * @author Alexander Kirov - * - * NOTION: this class should be instantiated on JavaFX thread. - */ -public class NodeControllerFactory { - - public static NodesStorage createFullController(Object node, TabPaneWithControl tabPane) { - PropertiesTable pt = new PropertiesTable(node); - PropertyTablesFactory.explorePropertiesList(node, pt); - SpecialTablePropertiesProvider.provideForControl(node, pt); - - VBox vb = new VBox(); - - if (node instanceof ToolBar) { - vb.getChildren().add(new ToolBarControllers().getForNode((ToolBar) node, tabPane)); - } - - if (node instanceof Menu) { - vb.getChildren().add(new MenuControllers().getForNode((Menu) node, tabPane)); - } - - if (node instanceof TreeItem) { - vb.getChildren().add(new TreeItemControllers().getForNode((TreeItem) node, tabPane)); - } - - return new NodesStorage(pt, vb); - } - - public static class NodesStorage extends VBox { - - public PropertiesTable pt; - public Node storageOfTable; - public Node storageOfControlElements; - - public NodesStorage(PropertiesTable pt, Node storageOfControlElements) { - this.pt = pt; - this.storageOfControlElements = storageOfControlElements; - this.storageOfTable = pt; - - this.getChildren().addAll(storageOfControlElements, storageOfTable); - } - } - - public interface ControllingNodesCreator { - - public abstract Node getForNode(T node, TabPaneWithControl tabPane); - } - - public static class ToolBarControllers extends HBox implements ControllingNodesCreator { - - public final String TOOLBAR_ADD_INDEX_TEXT_FIELD_ID = "TOOLBAR_ADD_INDEX_TEXT_FIELD_ID"; - - @Override - public Node getForNode(final ToolBar toolBar, final TabPaneWithControl tabPane) { - final TextField tf = TextFieldBuilder.create().id(TOOLBAR_ADD_INDEX_TEXT_FIELD_ID).text("0").prefWidth(40).build(); - - this.getChildren().addAll(new NodesChoserFactory("Add!", new NodesChoserFactory.NodeAction() { - @Override - public void execute(Node node) { - toolBar.getItems().add(Integer.parseInt(tf.getText()), node); - try { - tabPane.addPropertiesTable(node.getClass().getSimpleName(), NodeControllerFactory.createFullController(node, tabPane)); - } catch (Throwable ex) { - Logger.getLogger(NodeControllerFactory.class.getName()).log(Level.SEVERE, null, ex); - } - } - }, tf).getChildren()); - - return this; - } - } - - public static class MenuControllers extends HBox implements ControllingNodesCreator { - - public final String MENU_ADD_INDEX_TEXT_FIELD_ID = "MENU_ADD_INDEX_TEXT_FIELD_ID"; - public final String MENU_ADD_NAME_TEXT_FIELD_ID = "MENU_ADD_NAME_TEXT_FIELD_ID"; - - @Override - public Node getForNode(final Menu menu, final TabPaneWithControl tabPane) { - final TextField tf = TextFieldBuilder.create().id(MENU_ADD_INDEX_TEXT_FIELD_ID).text("0").prefWidth(40).build(); - final TextField nameTF = TextFieldBuilder.create().id(MENU_ADD_NAME_TEXT_FIELD_ID).text("Menu").prefWidth(40).build(); - this.getChildren().addAll(new NodesChoserFactory("Add!", new NodesChoserFactory.NodeAction() { - @Override - public void execute(MenuItem node) { - node.setText(nameTF.getText()); - menu.getItems().add(Integer.parseInt(tf.getText()), node); - try { - tabPane.addPropertiesTable(nameTF.getText(), NodeControllerFactory.createFullController(node, tabPane)); - } catch (Throwable ex) { - Logger.getLogger(NodeControllerFactory.class.getName()).log(Level.SEVERE, null, ex); - } - } - }, tf, nameTF).getChildren()); - - return this; - } - } - - public static class TreeItemControllers extends FlowPane implements ControllingNodesCreator { - - public static final String GET_NEXT_SIBLING_TREEITEM_BUTTON_ID = "GET_NEXT_SIBLING_TREEITEM_BUTTON_ID"; - public static final String GET_NEXT_SIBLING_TREEITEM_TEXTFIELD_ID = "GET_NEXT_SIBLING_TREEITEM_TEXTFIELD_ID"; - public static final String GET_PREVIOUS_SIBLING_TREEITEM_BUTTON_ID = "GET_PREVIOUS_SIBLING_TREEITEM_BUTTON_ID"; - public static final String GET_PREVIOUS_SIBLING_TREEITEM_TEXTFIELD_ID = "GET_PREVIOUS_SIBLING_TREEITEM_TEXTFIELD_ID"; - public final static String CHANGE_VALUE_BUTTON_ID = "CHANGE_VALUE_BUTTON_ID"; - public final static String NEW_VALUE_TEXT_FIELD_ID = "NEW_VALUE_TEXT_FIELD_ID"; - - @Override - public Node getForNode(final TreeItem item, final TabPaneWithControl tabPane) { - HBox hb1 = getNextSiblingHBox(item); - HBox hb2 = getPreviousSiblingHBox(item); - HBox hb3 = getChangeValueHBox(item); - - this.getChildren().addAll(hb1, hb2, hb3); - - return this; - } - - private HBox getPreviousSiblingHBox(final TreeItem item) { - HBox hb = new HBox(); - Button button = ButtonBuilder.create().text("Get previous sibling").id(GET_PREVIOUS_SIBLING_TREEITEM_BUTTON_ID).build(); - final TextField tf = TextFieldBuilder.create().text("").promptText("Next sibling").id(GET_PREVIOUS_SIBLING_TREEITEM_TEXTFIELD_ID).prefWidth(100).build(); - - button.setOnAction(new EventHandler() { - public void handle(ActionEvent t) { - TreeItem sibling = item.previousSibling(); - TreeItem sibling2 = item.previousSibling(item); - if (sibling == null) { - if (sibling2 == null) { - tf.setText("null"); - } else { - tf.setText("ERROR"); - } - } else { - if (sibling.equals(sibling2)) { - tf.setText(sibling.getValue().toString()); - } else { - tf.setText("ERROR"); - } - } - } - }); - - hb.getChildren().addAll(button, tf); - return hb; - } - - private HBox getNextSiblingHBox(final TreeItem item) { - HBox hb = new HBox(); - Button button = ButtonBuilder.create().text("Get next sibling").id(GET_NEXT_SIBLING_TREEITEM_BUTTON_ID).build(); - final TextField tf = TextFieldBuilder.create().text("").promptText("Next sibling").id(GET_NEXT_SIBLING_TREEITEM_TEXTFIELD_ID).prefWidth(100).build(); - - button.setOnAction(new EventHandler() { - public void handle(ActionEvent t) { - TreeItem sibling = item.nextSibling(); - if (sibling == null) { - tf.setText("null"); - } else { - tf.setText(sibling.getValue().toString()); - } - } - }); - - hb.getChildren().addAll(button, tf); - return hb; - } - - private HBox getChangeValueHBox(final TreeItem item) { - Button button = ButtonBuilder.create().text("change value to").id(CHANGE_VALUE_BUTTON_ID).build(); - final TextField tfNew = TextFieldBuilder.create().promptText("new value").id(NEW_VALUE_TEXT_FIELD_ID).prefWidth(50).build(); - - button.setOnAction(new EventHandler() { - public void handle(ActionEvent t) { - item.setValue(tfNew.getText()); - } - }); - - HBox hb = new HBox(); - hb.getChildren().addAll(button, tfNew); - - return hb; - } - } -} +/* + * Copyright (c) 2014, 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 + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * 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.test.utils.ptables; + +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.scene.Node; +import javafx.scene.control.*; +import javafx.scene.layout.FlowPane; +import javafx.scene.layout.HBox; +import javafx.scene.layout.VBox; + +/** + * @author Alexander Kirov + * + * NOTION: this class should be instantiated on JavaFX thread. + */ +public class NodeControllerFactory { + + public static NodesStorage createFullController(Object node, TabPaneWithControl tabPane) { + PropertiesTable pt = new PropertiesTable(node); + PropertyTablesFactory.explorePropertiesList(node, pt); + SpecialTablePropertiesProvider.provideForControl(node, pt); + + VBox vb = new VBox(); + + if (node instanceof ToolBar) { + vb.getChildren().add(new ToolBarControllers().getForNode((ToolBar) node, tabPane)); + } + + if (node instanceof Menu) { + vb.getChildren().add(new MenuControllers().getForNode((Menu) node, tabPane)); + } + + if (node instanceof TreeItem) { + vb.getChildren().add(new TreeItemControllers().getForNode((TreeItem) node, tabPane)); + } + + return new NodesStorage(pt, vb); + } + + public static class NodesStorage extends VBox { + + public PropertiesTable pt; + public Node storageOfTable; + public Node storageOfControlElements; + + public NodesStorage(PropertiesTable pt, Node storageOfControlElements) { + this.pt = pt; + this.storageOfControlElements = storageOfControlElements; + this.storageOfTable = pt; + + this.getChildren().addAll(storageOfControlElements, storageOfTable); + } + } + + public interface ControllingNodesCreator { + + public abstract Node getForNode(T node, TabPaneWithControl tabPane); + } + + public static class ToolBarControllers extends HBox implements ControllingNodesCreator { + + public final String TOOLBAR_ADD_INDEX_TEXT_FIELD_ID = "TOOLBAR_ADD_INDEX_TEXT_FIELD_ID"; + + @Override + public Node getForNode(final ToolBar toolBar, final TabPaneWithControl tabPane) { + final TextField tf = new TextField("0"); + tf.setId(TOOLBAR_ADD_INDEX_TEXT_FIELD_ID); + tf.setPrefWidth(40); + + this.getChildren().addAll(new NodesChoserFactory("Add!", new NodesChoserFactory.NodeAction() { + @Override + public void execute(Node node) { + toolBar.getItems().add(Integer.parseInt(tf.getText()), node); + try { + tabPane.addPropertiesTable(node.getClass().getSimpleName(), NodeControllerFactory.createFullController(node, tabPane)); + } catch (Throwable ex) { + Logger.getLogger(NodeControllerFactory.class.getName()).log(Level.SEVERE, null, ex); + } + } + }, tf).getChildren()); + + return this; + } + } + + public static class MenuControllers extends HBox implements ControllingNodesCreator { + + public final String MENU_ADD_INDEX_TEXT_FIELD_ID = "MENU_ADD_INDEX_TEXT_FIELD_ID"; + public final String MENU_ADD_NAME_TEXT_FIELD_ID = "MENU_ADD_NAME_TEXT_FIELD_ID"; + + @Override + public Node getForNode(final Menu menu, final TabPaneWithControl tabPane) { + final TextField tf = new TextField("0"); + tf.setId(MENU_ADD_INDEX_TEXT_FIELD_ID); + tf.setPrefWidth(40); + final TextField nameTF = new TextField("Menu"); + nameTF.setId(MENU_ADD_NAME_TEXT_FIELD_ID); + nameTF.setPrefWidth(40); + this.getChildren().addAll(new NodesChoserFactory("Add!", new NodesChoserFactory.NodeAction() { + @Override + public void execute(MenuItem node) { + node.setText(nameTF.getText()); + menu.getItems().add(Integer.parseInt(tf.getText()), node); + try { + tabPane.addPropertiesTable(nameTF.getText(), NodeControllerFactory.createFullController(node, tabPane)); + } catch (Throwable ex) { + Logger.getLogger(NodeControllerFactory.class.getName()).log(Level.SEVERE, null, ex); + } + } + }, tf, nameTF).getChildren()); + + return this; + } + } + + public static class TreeItemControllers extends FlowPane implements ControllingNodesCreator { + + public static final String GET_NEXT_SIBLING_TREEITEM_BUTTON_ID = "GET_NEXT_SIBLING_TREEITEM_BUTTON_ID"; + public static final String GET_NEXT_SIBLING_TREEITEM_TEXTFIELD_ID = "GET_NEXT_SIBLING_TREEITEM_TEXTFIELD_ID"; + public static final String GET_PREVIOUS_SIBLING_TREEITEM_BUTTON_ID = "GET_PREVIOUS_SIBLING_TREEITEM_BUTTON_ID"; + public static final String GET_PREVIOUS_SIBLING_TREEITEM_TEXTFIELD_ID = "GET_PREVIOUS_SIBLING_TREEITEM_TEXTFIELD_ID"; + public final static String CHANGE_VALUE_BUTTON_ID = "CHANGE_VALUE_BUTTON_ID"; + public final static String NEW_VALUE_TEXT_FIELD_ID = "NEW_VALUE_TEXT_FIELD_ID"; + + @Override + public Node getForNode(final TreeItem item, final TabPaneWithControl tabPane) { + HBox hb1 = getNextSiblingHBox(item); + HBox hb2 = getPreviousSiblingHBox(item); + HBox hb3 = getChangeValueHBox(item); + + this.getChildren().addAll(hb1, hb2, hb3); + + return this; + } + + private HBox getPreviousSiblingHBox(final TreeItem item) { + HBox hb = new HBox(); + Button button = new Button("Get previous sibling"); + button.setId(GET_PREVIOUS_SIBLING_TREEITEM_BUTTON_ID); + final TextField tf = new TextField(""); + tf.setPromptText("Next sibling"); + tf.setId(GET_PREVIOUS_SIBLING_TREEITEM_TEXTFIELD_ID); + tf.setPrefWidth(100); + + button.setOnAction(new EventHandler() { + public void handle(ActionEvent t) { + TreeItem sibling = item.previousSibling(); + TreeItem sibling2 = item.previousSibling(item); + if (sibling == null) { + if (sibling2 == null) { + tf.setText("null"); + } else { + tf.setText("ERROR"); + } + } else { + if (sibling.equals(sibling2)) { + tf.setText(sibling.getValue().toString()); + } else { + tf.setText("ERROR"); + } + } + } + }); + + hb.getChildren().addAll(button, tf); + return hb; + } + + private HBox getNextSiblingHBox(final TreeItem item) { + HBox hb = new HBox(); + Button button = new Button("Get next sibling"); + button.setId(GET_NEXT_SIBLING_TREEITEM_BUTTON_ID); + final TextField tf = new TextField(""); + tf.setPromptText("Next sibling"); + tf.setId(GET_NEXT_SIBLING_TREEITEM_TEXTFIELD_ID); + tf.setPrefWidth(100); + + button.setOnAction(new EventHandler() { + public void handle(ActionEvent t) { + TreeItem sibling = item.nextSibling(); + if (sibling == null) { + tf.setText("null"); + } else { + tf.setText(sibling.getValue().toString()); + } + } + }); + + hb.getChildren().addAll(button, tf); + return hb; + } + + private HBox getChangeValueHBox(final TreeItem item) { + Button button = new Button("change value to"); + button.setId(CHANGE_VALUE_BUTTON_ID); + final TextField tfNew = new TextField(); + tfNew.setPromptText("new value"); + tfNew.setId(NEW_VALUE_TEXT_FIELD_ID); + tfNew.setPrefWidth(50); + + button.setOnAction(new EventHandler() { + public void handle(ActionEvent t) { + item.setValue(tfNew.getText()); + } + }); + + HBox hb = new HBox(); + hb.getChildren().addAll(button, tfNew); + + return hb; + } + } +}