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 
  26 package javafx.scene.control.test.tabpane;
  27 
  28 import javafx.beans.value.ChangeListener;
  29 import javafx.beans.value.ObservableValue;
  30 import javafx.event.ActionEvent;
  31 import javafx.event.Event;
  32 import javafx.event.EventHandler;
  33 import javafx.geometry.Side;
  34 import javafx.scene.Scene;
  35 import javafx.scene.control.Button;
  36 import javafx.scene.control.ChoiceBox;
  37 import javafx.scene.control.ContextMenu;
  38 import javafx.scene.control.Label;
  39 import javafx.scene.control.ListView;
  40 import javafx.scene.control.MenuItem;
  41 import javafx.scene.control.Tab;
  42 import javafx.scene.control.TabPane;
  43 import javafx.scene.control.TextField;
  44 import javafx.scene.control.Tooltip;
  45 import javafx.scene.layout.HBox;
  46 import javafx.scene.layout.Pane;
  47 import javafx.scene.layout.VBox;
  48 import test.javaclient.shared.InteroperabilityApp;
  49 import test.javaclient.shared.Utils;
  50 
  51 public class TabPaneApp2 extends InteroperabilityApp {
  52 
  53     public final static String TEST_PANE_ID = "TestPane";
  54     public final static String CLEAR_BTN_ID = "Clear";
  55     public final static String RESET_BTN_ID = "Reset";
  56     public final static String ADD_SINGLE_BTN_ID = "Add single item";
  57     public final static String ADD_SINGLE_AT_POS_BTN_ID = "Add single item at pos";
  58     public final static String DISABLE_SINGLE_AT_POS_BTN_ID = "Disable single item at pos";
  59     public final static String REMOVE_SINGLE_AT_POS_BTN_ID = "Remove single item at pos";
  60     public final static String REMOVE_POS_EDIT_ID = "Remove at pos";
  61     public final static String ADD_POS_EDIT_ID = "Add at pos";
  62     public final static String DISABLE_POS_EDIT_ID = "Disable at pos";
  63     public final static String LAST_SELECTED_ID = "Last selected";
  64     public final static String SHOWN_CHECK_ID = "Shown";
  65     public final static String SHOWING_CHECK_ID = "Showing";
  66     public final static String SIDE_CB_ID = "Side";
  67     public final static String ERROR_ID = "Error";
  68     public final static String EVENT_LIST_ID = "Event list";
  69     public final static String TAB_ITEM = "Tab ";
  70     public final static int TABS_NUM = 10;
  71 
  72     VBox root;
  73     Label last_selected;
  74     Label error;
  75     ListView<String> eventList;
  76 
  77     public static void main(String[] args) {
  78         Utils.launch(TabPaneApp2.class, args);
  79     }
  80 
  81     @Override
  82     protected Scene getScene() {
  83         return new TabPaneAppScene();
  84     }
  85 
  86     public class TabPaneAppScene extends Scene {
  87         final TabPane tabPane;
  88 
  89         public TabPaneAppScene() {
  90             super(root = new VBox());
  91 
  92             Utils.addBrowser(this);
  93 
  94             Pane testPane = new Pane();
  95             testPane.setId(TEST_PANE_ID);
  96             testPane.setMinSize(600, 400);
  97             testPane.setPrefSize(600, 400);
  98             testPane.setMaxSize(600, 400);
  99             root.getChildren().add(testPane);
 100 
 101             tabPane = new TabPane();
 102             tabPane.setTranslateX(200);
 103             tabPane.setTranslateY(150);
 104             tabPane.setPrefSize(200, 200);
 105             testPane.getChildren().add(tabPane);
 106 
 107             HBox control_pane = new HBox();
 108             root.getChildren().add(control_pane);
 109 
 110             VBox controls = new VBox(5);
 111             control_pane.getChildren().add(controls);
 112 
 113             error = new Label();
 114             error.setId(ERROR_ID);
 115 
 116             Button temp;
 117 
 118             temp = new Button(CLEAR_BTN_ID);
 119             temp.setId(CLEAR_BTN_ID);
 120             temp.setOnAction(new EventHandler<ActionEvent>() {
 121                 public void handle(ActionEvent t) {
 122                     tabPane.getTabs().clear();
 123                 }
 124             });
 125             controls.getChildren().add(temp);
 126 
 127             temp = new Button(RESET_BTN_ID);
 128             temp.setId(RESET_BTN_ID);
 129             temp.setOnAction(new EventHandler<ActionEvent>() {
 130                 public void handle(ActionEvent t) {
 131                     reset();
 132                 }
 133             });
 134             controls.getChildren().add(temp);
 135 
 136             temp = new Button(ADD_SINGLE_BTN_ID);
 137             temp.setId(ADD_SINGLE_BTN_ID);
 138             temp.setOnAction(new EventHandler<ActionEvent>() {
 139                 public void handle(ActionEvent t) {
 140                     tabPane.getTabs().add(new NamedTab(TAB_ITEM + tabPane.getTabs().size()));
 141                 }
 142             });
 143             controls.getChildren().add(temp);
 144 
 145             HBox add_position_box = new HBox(5);
 146             controls.getChildren().add(add_position_box);
 147 
 148             final TextField add_position = new TextField("0");
 149             add_position.setId(ADD_POS_EDIT_ID);
 150 
 151             temp = new Button(ADD_SINGLE_AT_POS_BTN_ID);
 152             temp.setId(ADD_SINGLE_AT_POS_BTN_ID);
 153             temp.setOnAction(new EventHandler<ActionEvent>() {
 154                 public void handle(ActionEvent t) {
 155                     tabPane.getTabs().add(new NamedTab("Tab " + tabPane.getTabs().size()));
 156                 }
 157             });
 158             add_position_box.getChildren().add(temp);
 159 
 160             final Label add_label = new Label("at");
 161             add_position_box.getChildren().add(add_label);
 162 
 163             add_position_box.getChildren().add(add_position);
 164 
 165 
 166             HBox disable_position_box = new HBox(5);
 167             controls.getChildren().add(disable_position_box);
 168 
 169             final TextField disable_position = new TextField("0");
 170             disable_position.setId(DISABLE_POS_EDIT_ID);
 171 
 172             temp = new Button(DISABLE_SINGLE_AT_POS_BTN_ID);
 173             temp.setId(DISABLE_SINGLE_AT_POS_BTN_ID);
 174             temp.setOnAction(new EventHandler<ActionEvent>() {
 175                 public void handle(ActionEvent t) {
 176                     Integer pos = Integer.valueOf(disable_position.getText());
 177                     Tab tab = tabPane.getTabs().get(pos.intValue());
 178                     tab.setDisable(!tab.isDisable());
 179                 }
 180             });
 181             disable_position_box.getChildren().add(temp);
 182 
 183             final Label disable_label = new Label("at");
 184             disable_position_box.getChildren().add(disable_label);
 185 
 186             disable_position_box.getChildren().add(disable_position);
 187 
 188 
 189             HBox remove_position_box = new HBox(5);
 190             controls.getChildren().add(remove_position_box);
 191 
 192             final TextField remove_position = new TextField("0");
 193             remove_position.setId(REMOVE_POS_EDIT_ID);
 194 
 195             temp = new Button(REMOVE_SINGLE_AT_POS_BTN_ID);
 196             temp.setId(REMOVE_SINGLE_AT_POS_BTN_ID);
 197             temp.setOnAction(new EventHandler<ActionEvent>() {
 198                 public void handle(ActionEvent t) {
 199                     tabPane.getTabs().remove(Integer.valueOf(remove_position.getText()).intValue());
 200                 }
 201             });
 202             remove_position_box.getChildren().add(temp);
 203 
 204             final Label remove_label = new Label("at");
 205             remove_position_box.getChildren().add(remove_label);
 206 
 207             remove_position_box.getChildren().add(remove_position);
 208 
 209             final ChoiceBox<Side> cb = new ChoiceBox<Side>();
 210             cb.setId(SIDE_CB_ID);
 211             cb.getItems().addAll(Side.values());
 212             cb.getSelectionModel().select(tabPane.getSide());
 213             cb.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() {
 214                 public void changed(ObservableValue ov, Object t, Object t1) {
 215                     tabPane.setSide(cb.getSelectionModel().getSelectedItem());
 216                 }
 217             });
 218 
 219             controls.getChildren().add(cb);
 220 
 221             HBox last_selected_box = new HBox(5);
 222             controls.getChildren().add(last_selected_box);
 223 
 224             Label prompt_last_selected = new Label(LAST_SELECTED_ID);
 225             last_selected = new Label();
 226             last_selected.setId(LAST_SELECTED_ID);
 227             last_selected_box.getChildren().add(prompt_last_selected);
 228             last_selected_box.getChildren().add(last_selected);
 229             last_selected.setText(String.valueOf(tabPane.getSelectionModel().getSelectedIndex()));
 230 
 231             tabPane.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number> () {
 232                 public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) {
 233                     last_selected.setText(t1.toString());
 234                 }
 235             });
 236 
 237             controls.getChildren().add(error);
 238 
 239             eventList = new ListView<String>();
 240             eventList.setId(EVENT_LIST_ID);
 241             eventList.setMaxSize(320, 170);
 242 
 243             control_pane.getChildren().add(eventList);
 244 
 245             reset();
 246         }
 247 
 248         protected void reset() {
 249             tabPane.getTabs().clear();
 250             eventList.getItems().clear();
 251             for (int i = 0; i < TABS_NUM; i++) {
 252                 Tab tab = new NamedTab("Tab " + i);
 253                 tab.setTooltip(new Tooltip("Tab " + i));
 254                 ContextMenu menu = new ContextMenu();
 255                 for (int j = 0; j < 3; j++) {
 256                     menu.getItems().add(new MenuItem("Tab " + i + " menu item " + j));
 257                 }
 258                 tab.setContextMenu(menu);
 259                 if (tab.getContextMenu() != menu) {
 260                     error.setText("tab.setContextMenu() fails");
 261                 }
 262                 tabPane.getTabs().add(tab);
 263             }
 264             tabPane.setSide(Side.TOP);
 265             error.setText("");
 266         }
 267 
 268         class NamedTab extends Tab {
 269             public NamedTab(String name) {
 270                 super(name);
 271                 Label label = new Label(name + " content");
 272                 setContent(label);
 273                 EventHandler handler = new EventHandler<Event>() {
 274                     public void handle(Event t) {
 275                         eventList.getItems().add(((Tab)t.getTarget()).getText());
 276                     }
 277                 };
 278                 setOnSelectionChanged(handler);
 279                 if (getOnSelectionChanged() != handler) {
 280                     error.setText("tab.setOnSelectionChanged() fails");
 281                 }
 282             }
 283         }
 284     }
 285 }