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 }