1 /* 2 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 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 package javafx.scene.control.test.chart.apps; 26 27 import javafx.collections.FXCollections; 28 import javafx.collections.ObservableList; 29 import javafx.event.ActionEvent; 30 import javafx.event.Event; 31 import javafx.event.EventHandler; 32 import javafx.geometry.Insets; 33 import javafx.scene.Scene; 34 import javafx.scene.chart.PieChart; 35 import javafx.scene.chart.PieChart.Data; 36 import javafx.scene.control.*; 37 import javafx.scene.control.test.utils.CommonPropertiesScene; 38 import javafx.scene.control.test.utils.ptables.PropertiesTable; 39 import javafx.scene.control.test.utils.ptables.PropertyTablesFactory; 40 import javafx.scene.control.test.utils.ptables.SpecialTablePropertiesProvider; 41 import javafx.scene.layout.HBox; 42 import javafx.scene.layout.Pane; 43 import javafx.scene.layout.VBox; 44 import test.javaclient.shared.InteroperabilityApp; 45 import test.javaclient.shared.Utils; 46 47 /** 48 * @author Alexander Kirov 49 */ 50 public class NewPieChartApp extends InteroperabilityApp implements ChartIDsInterface { 51 52 public final static String REMOVE_ITEM_POS_TEXT_FIELD_ID = "REMOVE_ITEM_POS_TEXT_FIELD_ID"; 53 public final static String REMOVE_BUTTON_ID = "REMOVE_BUTTON_ID"; 54 public final static String ADD_ITEM_VALUE_TEXT_FIELD_ID = "ADD_ITEM_VALUE_TEXT_FIELD_ID"; 55 public final static String ADD_ITEM_TEXT_FIELD_ID = "ADD_ITEM_TEXT_FIELD_ID"; 56 public final static String ADD_ITEM_POSITION_TEXT_FIELD_ID = "ADD_ITEM_POSITION_TEXT_FIELD_ID"; 57 public final static String ADD_ITEM_BUTTON_ID = "ADD_ITEM_BUTTON_ID"; 58 59 public static void main(String[] args) { 60 Utils.launch(NewPieChartApp.class, args); 61 } 62 63 @Override 64 protected Scene getScene() { 65 Utils.setTitleToStage(stage, "PieChartTestApp"); 66 return new PieChartScene(); 67 } 68 69 class PieChartScene extends CommonPropertiesScene { 70 71 //VBox which contain tested PieChart. 72 Pane pane; 73 PropertiesTable tb; 74 //PieChart to be tested. 75 PieChart testedPieChart; 76 double controlContainerWidth = 600; 77 double controlContainerHeight = 600; 78 ObservableList<Data> data; 79 80 public PieChartScene() { 81 super("PieChart", 1300, 800); 82 } 83 84 @Override 85 final protected void prepareScene() { 86 Utils.addBrowser(this); 87 pane = new Pane(); 88 testedPieChart = getNewChart(); 89 testedPieChart.setId(TESTED_CHART_ID); 90 91 tb = new PropertiesTable(testedPieChart); 92 PropertyTablesFactory.explorePropertiesList(testedPieChart, tb); 93 SpecialTablePropertiesProvider.provideForControl(testedPieChart, tb); 94 95 pane.setMinSize(controlContainerWidth, controlContainerHeight); 96 pane.setPrefSize(controlContainerWidth, controlContainerHeight); 97 pane.setStyle("-fx-border-color : red;"); 98 pane.getChildren().add(testedPieChart); 99 100 VBox vb = new VBox(); 101 vb.setSpacing(5); 102 103 HBox hb = (HBox) getRoot(); 104 hb.setPadding(new Insets(5, 5, 5, 5)); 105 hb.setStyle("-fx-border-color : green;"); 106 107 Button hardResetButton = new Button("Hard reset"); 108 hardResetButton.setId(HARD_RESET_BUTTON_ID); 109 hardResetButton.setOnAction(new EventHandler<ActionEvent>() { 110 public void handle(ActionEvent t) { 111 HBox hb = (HBox) getRoot(); 112 hb.getChildren().clear(); 113 prepareMainSceneStructure(); 114 prepareScene(); 115 } 116 }); 117 118 Button softResetButton = new Button("Soft reset"); 119 softResetButton.setId(SOFT_RESET_BUTTON_ID); 120 softResetButton.setOnAction(new EventHandler<ActionEvent>() { 121 public void handle(ActionEvent t) { 122 throw new UnsupportedOperationException("Not supported yet."); 123 } 124 }); 125 126 Button b = new Button("Add"); 127 b.setOnAction(new EventHandler() { 128 public void handle(Event t) { 129 for (Data data : testedPieChart.getData()) { 130 Label label = new Label("Label"); 131 label.setLabelFor(data.getNode()); 132 } 133 } 134 }); 135 136 HBox resetButtonsHBox = new HBox(); 137 resetButtonsHBox.getChildren().addAll(hardResetButton, softResetButton, b); 138 vb.getChildren().addAll(resetButtonsHBox, getAddItemHBox(), getRemoveDataDialog()); 139 140 ScrollPane sp = new ScrollPane(); 141 sp.setContent(tb); 142 sp.setPannable(true); 143 sp.setMinWidth(1000); 144 sp.setMinHeight(800); 145 146 setTestedControl(testedPieChart); 147 setPropertiesContent(sp); 148 setTestedControlContainerSize(500, 500); 149 setControllersContent(vb); 150 } 151 152 public HBox getRemoveDataDialog() { 153 HBox hb = new HBox(); 154 Label lb = new Label("From position"); 155 final TextField tf = new TextField("0"); 156 tf.setPrefWidth(50); 157 tf.setId(REMOVE_ITEM_POS_TEXT_FIELD_ID); 158 Button bt = new Button("Remove!"); 159 bt.setId(REMOVE_BUTTON_ID); 160 bt.setOnAction(new EventHandler() { 161 public void handle(Event t) { 162 int index = Integer.parseInt(tf.getText()); 163 ((PieChart) testedPieChart).getData().remove(index); 164 } 165 }); 166 hb.getChildren().addAll(lb, tf, bt); 167 return hb; 168 } 169 170 public HBox getAddItemHBox() { 171 HBox hb = new HBox(); 172 Label lb = new Label("Add item"); 173 final TextField tf = new TextField(); 174 tf.setPrefWidth(50); 175 tf.setId(ADD_ITEM_VALUE_TEXT_FIELD_ID); 176 Label namedLabel = new Label(" named "); 177 final TextField name = new TextField(); 178 name.setPrefWidth(50); 179 name.setId(ADD_ITEM_TEXT_FIELD_ID); 180 Label atLb = new Label("at pos"); 181 final TextField tfPos = new TextField(); 182 tfPos.setPrefWidth(50); 183 tfPos.setId(ADD_ITEM_POSITION_TEXT_FIELD_ID); 184 Button bt = new Button("Add!"); 185 bt.setId(ADD_ITEM_BUTTON_ID); 186 bt.setOnAction(new EventHandler() { 187 public void handle(Event t) { 188 int index = Integer.parseInt(tfPos.getText()); 189 190 Data newData = new Data("".equals(name.getText()) ? String.valueOf(index) : name.getText(), Double.parseDouble(tf.getText())); 191 192 ((PieChart) testedPieChart).getData().add(index, newData); 193 194 tb.addDoublePropertyLine(newData.pieValueProperty(), -10, 10000, 100, newData); 195 } 196 }); 197 hb.getChildren().addAll(lb, tf, namedLabel, name, atLb, tfPos, bt); 198 return hb; 199 } 200 201 public PieChart getNewChart() { 202 data = FXCollections.<Data>observableArrayList(); 203 //Don't change numbers here. 204 for (int i = 0; i < 4; i++) { 205 data.add(new Data("Data item " + i, 100)); 206 } 207 PieChart chart = new PieChart(data); 208 chart.setTitle("PieChart"); 209 chart.setStyle("-fx-border-color: darkgray;"); 210 return chart; 211 } 212 } 213 }